SMBMS 슈퍼마켓 주문 관리 시스템 의 사이트 소스 코드

MVC 3 층 구조(코드 전 체 를 레이 어 링 으로 작성)
在这里插入图片描述
전체 프로 세 스 와 코드 작성 방향:
在这里插入图片描述
제안 은 디 버 깅 과 debug 에 편리 하고 먼저 작성Dao 하 는 것 입 니 다.주로 데이터 베이스 와 의 상호작용,sql 문 구 를 작성 하 는 것 을 책임 집 니 다.그 다음 에 작성Servicce 은 주로 Dao 층 을 호출 하고 다시 작성Servlet 하 는 것 을 책임 집 니 다.이것 은 주로 Service 와 전단 의 데이터 상호작용 을 호출 합 니 다.예 를 들 어 resquet 와 response 등 입 니 다.
기본 구조
在这里插入图片描述
프로젝트 구축 준비 작업
1- 4
在这里插入图片描述
5 프로젝트 패키지 구조 만 들 기
在这里插入图片描述
6-7
在这里插入图片描述
在这里插入图片描述
8 정적 자원 발생
웹 앱 디 렉 터 리 에 놓 습 니 다.사이트 자원 이기 때 문 입 니 다.
在这里插入图片描述
로그 인 기능 구현
在这里插入图片描述
1.전단 페이지 login.jsp 작성
在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>     -         </title>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/css/style.css" rel="external nofollow"  />
    <script type="text/javascript">
	/* if(top.location!=self.location){
	      top.location=self.location;
	 } */
    </script>
</head>
<body class="login_bg">
    <section class="loginBox">
        <header class="loginHeader">
            <h1>        </h1>
        </header>
        <section class="loginCont">
	        <form class="loginForm" action="${pageContext.request.contextPath }/login.do"  name="actionForm" id="actionForm"  method="post" >
				<div class="info">${error }</div>
				<div class="inputbox">
                    <label for="userCode">   :</label>
					<input type="text" class="input-text" id="userCode" name="userCode" placeholder="      " required/>
				</div>	
				<div class="inputbox">
                    <label for="userPassword">  :</label>
                    <input type="password" id="userPassword" name="userPassword" placeholder="     " required/>
                </div>	
				<div class="subBtn">
					
                    <input type="submit" value="  "/>
                    <input type="reset" value="  "/>
                </div>	
			</form>
        </section>
    </section>
</body>
</html>
2.첫 페이지 설정

<!--      -->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
3.Dao 계층 사용자 로그 인 인터페이스 작성
Dao 층(데이터 지구 층)은 데이터 베 이 스 를 조작 하고 업무(예 를 들 어 사용자 로그 인,계 정 비밀번호 보다)는 업무 층 이 책임 집 니 다.
在这里插入图片描述

public User getLoginUser(Connection connection, String userCode)throws Exception;
4.Dao 인터페이스 구현 클래스 작성

public User getLoginUser(Connection connection, String userCode) throws Exception {
		// TODO Auto-generated method stub
		PreparedStatement pstm = null;
		ResultSet rs = null;
		User user = null;
		if(null != connection){
			String sql = "select * from smbms_user where userCode=?";
			Object[] params = {userCode};
			rs = BaseDao.execute(connection, pstm, rs, sql, params);
			if(rs.next()){
				user = new User();
				user.setId(rs.getInt("id"));
				user.setUserCode(rs.getString("userCode"));
				user.setUserName(rs.getString("userName"));
				user.setUserPassword(rs.getString("userPassword"));
				user.setGender(rs.getInt("gender"));
				user.setBirthday(rs.getDate("birthday"));
				user.setPhone(rs.getString("phone"));
				user.setAddress(rs.getString("address"));
				user.setUserRole(rs.getInt("userRole"));
				user.setCreatedBy(rs.getInt("createdBy"));
				user.setCreationDate(rs.getTimestamp("creationDate"));
				user.setModifyBy(rs.getInt("modifyBy"));
				user.setModifyDate(rs.getTimestamp("modifyDate"));
			}
			//connection  null     ,                。
			BaseDao.closeResource(null, pstm, rs);
		}
		return user;
	}
5.비 즈 니스 계층 인터페이스
업무 층 은 업무 에 필요 한 데 이 터 를 얻 기 위해 Dao 층 을 호출 합 니 다.
在这里插入图片描述

public interface UserService {
	 //    
	public User login(String userCode, String userPassword);
}
6.업무 층 실현 클래스
  • 업무 층 이 Dao 층(데이터 베 이 스 를 가 져 오 는 데이터)을 호출 하고 Dao 층 을 호출 하려 면 인 자 를 전달 해 야 하기 때문에 connection 은 이때 Dao 층 에 전달 되 기 때문에 connection 대상 은 업무 층 에서 만 듭 니 다.
  • 업무 층 에 업무 가 존재 하고 실패 하면 다시 굴 러 갑 니 다.그래서 connection 대상 은 업무 층 에서 만 듭 니 다.
  • 
    public class UserServiceImpl implements UserService{
    	
    	private UserDao userDao;
    	public UserServiceImpl(){
    		userDao = new UserDaoImpl();
    	}
    	public User login(String userCode, String userPassword) {
    		// TODO Auto-generated method stub
    		Connection connection = null;
    		User user = null;
    		try {
    			connection = BaseDao.getConnection();
    			user = userDao.getLoginUser(connection, userCode);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			BaseDao.closeResource(connection, null, null);
    		}
    		
    		//    
    		if(null != user){
    			if(!user.getUserPassword().equals(userPassword))
    				user = null;
    		}
    		
    		return user;
    	}
    }
    7.servlet 작성
  • servlet 는 제어 층 으로 업무 층
  • 을 호출 합 니 다.
  • 제어 층 의 역할:사용자 의 요청 을 받 아들 여 업무 층 에 맡 깁 니 다.여기 서 사용자 의 요청 은 로그 인(사용자 이름과 비밀 번 호 를 입력 하여 로그 인 을 요청 합 니 다)입 니 다.업무 층 은 데이터베이스 에 입력 한 사용자 이름과 비밀 번 호 를 일치 시 켜 야 합 니 다.
  • 
    public class LoginServlet extends HttpServlet {
        //servlet:   ,       ,       。
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //           (       )
            String userCode = req.getParameter("userCode");
            String userPassword = req.getParameter("userPassword");
    
            //          ,   :            ,        
            UserServiceImpl userService = new UserServiceImpl();
            User user = userService.login(userCode, userPassword);//              
    
            if(user != null){//    ,    
                //        Session 
                req.getSession().setAttribute(Constant.USER_SESSION , user);
                //    (        ,    ,      )
                resp.sendRedirect("jsp/frame.jsp");
    
            }else{//    ,    
                //       ,     ,        。((      ,           (        ),    ,       ))
                req.setAttribute("error" , "        ");//        
                req.getRequestDispatcher("login.jsp").forward(req , resp);
    
            }
    
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    8.servlet 등록
    
    <!--servlet-->
        <servlet>
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>com.tong.servlet.user.LoginServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>
            <url-pattern>/login.do</url-pattern>
        </servlet-mapping>
    전체 흐름
    전단 이 시작 되면 login.jsp(첫 페이지 로 설정)를 실행 하고 웹.xml 에 설 치 된 login.do(servlet 맵)로 직접 이동 하여 해당 하 는 servlet(Login Servlet)을 호출 하고 servlet 에서 업무(User ServiceImpl)를 호출 한 다음 에 업무 가 사용 하고 자 하 는 Dao(UserDaoImpl)를 호출 하여 데 이 터 를 가 져 옵 니 다.
    로그 인 기능 최적화
    로그아웃 기능:
    사고방식:session 를 제거 하고 로그 인 인터페이스 로 돌아 가기;
    LogoutServlet
    
    public class LogoutServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.getSession().removeAttribute(Constant.USER_SESSION);
            resp.sendRedirect(req.getContextPath() + "/login.jsp");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    책.
    
    <!--  -->
        <servlet>
            <servlet-name>LogoutServlet</servlet-name>
            <servlet-class>com.tong.servlet.user.LogoutServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>LogoutServlet</servlet-name>
            <url-pattern>/jsp/logout.do</url-pattern>
        </servlet-mapping>
    로그 인 차단 최적화
    왜 로그 인 차단 최적화
  • 정상적으로 로그 인 한 후 로그 인 인터페이스의 주 소 를 복사 하고 로그아웃 후의 로그 인 인터페이스 에 복 제 된 주 소 를 붙 여 사용자 이름과 비밀 번 호 를 입력 하지 않 은 전제 에서 시스템 에 들 어 갔다.로그 인 차단 이 필요 합 니 다
  • session 에 user 라 는 속성 이 있 는 지 없 는 지의 경우 session 에 user 라 는 속성 이 없 기 때문에 없 으 면 정상 적 인 로그 인 이 아니 라 차단 하 는 것 을 설명 합 니 다.정상적으로 로그 인 할 때 만 session 에서 user 라 는 속성 을 만 듭 니 다.이 때 는 정상적으로 로그 인 할 수 있 습 니 다.
  • 在这里插入图片描述
    在这里插入图片描述
    로그아웃 후 사이트 주 소 를 붙 여 도 로그 인 할 수 있 으 니 차단 해 야 합 니 다.
    在这里插入图片描述
    구체 적 절차
    필 터 를 만 들 고 등록 합 니 다.
    
    public class SysFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
    
            //   , session     
            User user = (User) request.getSession().getAttribute(Constant.USER_SESSION);
            if(user == null){//session     ,      ,     
                response.sendRedirect("error.jsp");
            }else{
                chain.doFilter(req , resp);
            }
        }
    
        public void destroy() {
    
        }
    }
    
    <!--       -->
        <filter>
            <filter-name>SysFilter</filter-name>
            <filter-class>com.tong.filter.SysFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>SysFilter</filter-name>
            <url-pattern>/jsp/*</url-pattern>
        </filter-mapping>
    암호 수정
    암호 수정 은 데이터베이스 와 접촉 해 야 하기 때문에 dao 층,service 층,servlet 층 이라는 선 을 가 야 합 니 다.
  • Dao 층:사용자 ID 에 따라 사용자 암호(update 문)를 수정 합 니 다.
  • service 층:전 송 된 비밀 번 호 를 받 고 Dao 를 호출 하여 배경 비밀 번 호 를 가 져 오 는 것 과 비교 합 니 다.
  • servlet 층:상자 에 입력 한 새 비밀 번 호 를 가 져 와 업무 층 에 건 네 줍 니 다.
  • 1.전단 소재 가 져 오기
    在这里插入图片描述
    2.항목 을 쓰 고 아래 에서 위로 쓰 는 것 을 권장 합 니 다.
    在这里插入图片描述
    3.현재 사용자 암호 인터페이스 수정public interface UserDao
    
        //        
    	//        int  ,          ;
    	public int updatePwd(Connection connection, int id, String pwd)throws Exception;
    4.Dao 인터페이스 구현 클래스 작성public class UserDaoImpl implements UserDao
    
    public int updatePwd(Connection connection, int id, String pwd)
    			throws Exception {
    		// TODO Auto-generated method stub
    		int flag = 0;
    		PreparedStatement pstm = null;
    		if(connection != null){
    			String sql = "update smbms_user set userPassword= ? where id = ?";
    			Object[] params = {pwd,id};
    			flag = BaseDao.execute(connection, pstm, sql, params);
    			BaseDao.closeResource(null, pstm, null);
    		}
    		return flag;
    	}
    5.비 즈 니스 계층 인터페이스public interface UserService
    
    //  userId    
    	public boolean updatePwd(int id, String pwd);
    6.비 즈 니스 계층 인터페이스 구현 클래스
  • 업무 층 이 Dao 층(데이터 베 이 스 를 가 져 오 는 데이터)을 호출 하고 Dao 층 을 호출 하려 면 인 자 를 전달 해 야 하기 때문에 connection 은 이때 Dao 층 에 전달 되 기 때문에 connection 대상 은 업무 층 에서 만 듭 니 다.
  • 업무 층 에 업무 가 존재 하고 실패 하면 다시 굴 러 갑 니 다.그래서 connection 대상 은 업무 층 에서 만 듭 니 다.
  • public class UserServiceImpl implements UserService
  • 
    public boolean updatePwd(int id, String pwd) {
    		boolean flag = false;//     ,          。
    		Connection connection = null;
    		try{
    			connection = BaseDao.getConnection();
    			if(userDao.updatePwd(connection,id,pwd) > 0)
    				flag = true;
    		}catch (Exception e) {
    			e.printStackTrace();
    		}finally{
    			BaseDao.closeResource(connection, null, null);
    		}
    		return flag;
    	}
    7.servlet 재 활용 을 위해 추출 방법 이 필요 하 다 는 것 을 기억 하 세 요.
    
    //  servlet  
    public class UserServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getParameter("method");
            if(method.equals("savepwd")){
                this.updatePwd(req , resp);
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
        public void updatePwd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // session  Uer   
            Object o = req.getSession().getAttribute(Constant.USER_SESSION);
            String newPassword = req.getParameter("newPassword");
    
            boolean flag = false;
            if(o != null && newPassword != null && newPassword.length() != 0){//Uer       newPassword    ,       
                UserServiceImpl userService = new UserServiceImpl();
                flag = userService.updatePwd(((User) o).getId(), newPassword);
                if(flag){
                    req.setAttribute("message" , "      ,   ,       ");
                    //      ,  session。      ,session        ,      ,             ,  session     
                    req.getSession().removeAttribute(Constant.USER_SESSION);
                }else {
                    req.setAttribute("message" , "      ");
                }
            }else{
                req.setAttribute("message" , "      ");
            }
    
            req.getRequestDispatcher("pwdmodify.jsp").forward(req , resp);
    
        }
    }
    여기 서 SMBMS 슈퍼마켓 주문 관리 시스템 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SMBMS 슈퍼마켓 주문 관리 시스템 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!

    좋은 웹페이지 즐겨찾기