JSP 프로젝트 전체구조

jungnoeun·2022년 7월 14일
0

jsp

목록 보기
5/14

한글 인코딩

<Filter></Filter> 를 사용한다.

1) filter 를 생성한다.

  • 목적: response와 utf-8을 세팅한다.
    web.xml 에 <Filter></Filter> 를 이용해 만든다.

2) filter를 구현하는 Charconfig.java파일을 생성

  • postman 을 이용해 localhost:8080/blog 로 send해서 한글이 깨지지 않는지 확인한다.
    => 한글이 깨지지 않으면 filter가 잘 작동하는 것이다.






컨트롤러 구현

접속경로:
http://localhost:8080/blog/user?cmd=loginForm 에 접속 시 UserController로 오게 된다.
그러므로 UserController 에서 request/response 와 관련된 기능을 처리하고 회원가입과 같은 서비스를 호출하기 위해 서비스를 구현해야 한다.

controller와 service

- controller

1) 세션만 바뀌는 기능(ex.로그인폼 요청)
단순히 이동만하면 sendRedirect(); 를 사용
response.sendRedirect("user/loginForm.jsp");
응답으로 loginForm.jsp 내용이 실행되도록 한다.
위의 코드만 사용하여 구현가능하다.

2) 서비스 호출이 필요한 기능(ex.로그인)
과정: 데이터를 받아서 서비스 호출을 하도록 한다.
dto를 만들고 그 dto를 매개변수로 하여 service의 기능함수(ex.로그인())을 호출한다.
어떤 기능이 들어가면 서비스를 호출해야 한다.






세션이 바뀔때 필요한 jsp파일 생성

1) webapp(webContent) 에 user,board 폴더를 생성한다.

reply는 board안에서 동작하므로 따로 생성하지 않는다.

2) user폴더 안에 loginForm.jsp를 생성한다.

요청하는 데이터를 받는 과정에서 코드가 너무 복잡하다?
간결화 방법
1) filter로 처리하기
-> 쿼리 스트링 방법으로는 적절하지 않다.
2) Controller를 사용한 리플랙션
-> 알아보기

DB연결하는 Dao

서비스에서는 database 연결해서 실행해야 한다.
-> database 연결은 service가 아닌 Dao에서 한다.

domain패키지의 user,board,relply 각각에 Dao.java 파일을 생성한다.

이제, Dao.java 파일에서 DB연결하고 preparestate를 달고? 함수(save(), update, usernamecheck()등..)를 사용하면 된다.

이제, jsp파일을 만들고, 부트스트랩 디자인하고, DB연결해서 뿌리면 된다.






파일 구조







코드

한글 인코딩 - 필터기능 추가

WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.1" 
	xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

	<description>MySQL Test App</description>
  	<resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  	</resource-ref>

  
  // 필터기능 추가 ****************************
	<filter>
		<filter-name>charConfig</filter-name>
		<filter-class>com.cos.blog.config.CharConfig</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>charConfig</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
// 필터기능 추가 ****************************

</web-app>

config/CharConfig.java

public class CharConfig implements Filter{
	
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		
		request.setCharacterEncoding("utf-8"); //들어오는 문자 세팅 (utf-8로) 요청의 경우, request.getParameter("-")로 한번 파싱하면 다시 다른거로 setCharacterEncoding("-")해도 적용안된다. 이미 파싱을 했기 때문
		response.setContentType("text/html; charset=utf-8"); //응답의 경우, 밑에 다른거로 하면 바뀜
		
//		//filter가 잘 작동되는지(한글이 안깨지고 나오는지 확인하는 로그)
//		String username = request.getParameter("username");
//		System.out.println("username: "+username);
//		
//		//응답 확인(필터 안타게 해야 해서 chain.doFilter(request, response); 를 주석처리한다.)
//		PrintWriter out = response.getWriter();
//		out.println("안녕"); // 이 글자가 안깨지고 나오면 성공이다. 응답이 text/html로 설정했으니 "안녕"자체를 html로 인식한다. charset=utf-8로 안하면 깨질 수 있다.
//		out.flush();
		
		//다시 필터를 타게 한다.
		chain.doFilter(request, response);
	}

}




컨트롤러 서비스 구현

webapp/user/loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>로그인 폼 페이지 </h1>
</body>
</html>

UserController.java

// 접근되는 주소: http://localhost:8080/blog/user
@WebServlet("/user")
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public UserController() {
        super();
    }

	// GET/POST 요청을 하면 doProcess 실행
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	// http://localhost:8080/blog/user?cmd = 머시기
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		 String cmd = request.getParameter("cmd");
		UserService userService = new UserService();
		 
		// http://localhost:8080/blog/user?cmd=loginForm
		if(cmd.equals("loginForm")) {
			//서비스 호출 필요x , 그냥 로그린 폼만 주면 된다.
			// 아이디 기억 서비스 추가? -> 로직 추가  -> 서비스 필요 
			response.sendRedirect("user/loginForm.jsp");
		}else if(cmd.equals("login")) {
			// 서비스 호출
			// 과정 : 데이터 받아서 서비스 호출하는 로직
			//리플랙션 방식으로 하면 dto만들어서 들고 있음. 자동으로 되어 편리함
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			LoginReqDto dto = new LoginReqDto();
			dto.setUsername(username);
			dto.setPassword(password);
			userService.로그인(dto);
			// userService에 request를 넘기면 안되나?
			// 답: 서비스는 요청오는 데이터 자체를 처리하는 것이 아니라 그런거는 미리하고 서비스에서는 받은 데이터를 통해 데이터베이스에 연결하는것이다.
			// 가공하는 과정은 서비스가 아닌 컨트롤러에서 하는 것이다.
			// 가공하는 과정은 리플랙션에서 필터링해서 처리하면 아주 간결해진다. > 나중에 해보기 (더 좋은 방법)
		}else if(cmd.equals("joinForm")) {
			response.sendRedirect("user/joinForm.jsp");
		}else if(cmd.equals("join")) {
			// 서비스 호출
			// 과정 : 데이터 받아서 서비스 호출하는 로직
			
            // 가공 과정****************************************
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			String email = request.getParameter("email");
			String address = request.getParameter("address");
			JoinReqDto dto = new JoinReqDto();
			dto.setUsername(username);
			dto.setPassword(password);
			dto.setEmail(email);
			dto.setAddress(address);
            // 가공 과정****************************************
            
            // 가공한 dto를 가지고 서비스 호출
			userService.회원가입(dto);
		}
	 }
}






database연결하는 DAO 생성

UserDao.java

public class UserDao {
	public void save() { // 회원 가입
		
	}
	
	public void update() { // 회원 수정
		
	}
	
	public void usernameCheck() { // 아이디 중복 체크
		
	}
	
	public void findById() { //회원 정보 보기
		
	}
}

BoardDao.java

public class BoardDao {

}

reply.java

public class ReplyDao {

}
profile
개발자

0개의 댓글