2019/09/30 모델2
- -
- 지금까지 해왔던 모델 1버전을 마치고 모델 2 버전으로 로그인과 게시판을 만들어 보겠다.
[자바 개발 방식]
- .jsp
- .java =>.java 로만 페이지를 구현 하려면, Servlet클래스를 알아야 가능합니다.
- .jsp+.java(DTO,DAO)
※ jsp 자바 코드에 덜 의존적이라 프로그래밍하기가 더 쉽지만, 보안상 문제가 크다
[01] 서블릿(Servlet)의 기본
1) 서블릿의 개요
- JSP와 서블릿은 자바 기반으로 만들어진 웹 프로그래밍 언어이다
- 서블릿이 자바 코드에 의존적이라면
JSP는 덜 의존적이라 프로그래밍하기가 더 쉽고 편하다
2) 서블릿의 동작 원리
- Servlet클래스 작성
GenericServlet 클래스 또는 HttpServlet클래스 상속받는다
- javax.servlet과 javax.servlet.http의 클래스와 인터페이스를 이용해 만든다
- 서블릿은 main()메소드를 갖지 않는다.
서버가 서블릿에 요청을 전달할 때마다 서블릿의 service()메소드가 자동호출 된다
3) 서블릿의 요청과 응답의 과정에서 웹컨테이너(톰캣)가 하는일
- 객체가 있는지 유무판단, 없으면 생성
- Thread생성
- Service()호출
- Service()가 doGet()자동 호출
4) 서블릿의 요청과 응답의 과정에서 Service() 메소드가 하는일
- request가 올 때마다 doGet()호출
- doGet()은 HttpServlet에 의해 지원 받는 몇몇 Service()중 하나이다.
1. mvcTest
▶ Dynamic web project 로 프로젝트를 생성하게 되면 지금 사용하는 버전은 java runa 버전이기 때문에
servlet을 불러오지 못한다. 때문에 톰켓 폴더에서 servlet-api.jar파일을 lib 에 복사해 넣자
1) .jsp 구성된 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환영합니다</title>
</head>
<body>
<!-- JSP코트만 사용한 페이지 -->
<strong>대한민국</strong>
<hr>
<span style="color:red;">오니모니하</span>
<hr>
<table border="1">
<tr>
<th>Column 1 Heading</th>
<th>Column 2 Heading</th>
</tr>
<tr>
<td>Row 1: Col 1</td>
<td>Row 1: Col 2</td>
</tr>
</table>
</body>
</html>
▶ .jsp파일에서는 HTML 코드도 사용이 가능하다
2) .java 로만 구성된 코드
▶ .java 로 구성된 클래스는 HttpServlet 클래스를 상속받을 것이다.
class GenericServlet{}
class HttpServlet extends GenericServlet{}
class Welcome extends HttpServlet{} -현재 내가 상속받은 클래스의 경로
▶ 상속받은 메소드를 override 받아 리폼하여 사용할 것이다.
@Override //<-물려받은 메소드 재정의 (리폼) protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
package mbcTest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Welcome extends HttpServlet {
//클래스의 부모가 class :extends
//클래스의 부모가 interface :implements
@Override //<-물려받은 메소드 재정의 (리폼)
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//<form method=get>방식으로 요청하면 자동으로 doGet을 호출
//req 내부객체 request 와 동일
//resp 내부객체 response 와 동일
try{
//단순 문자열로 응답(AJAX)
//resp.setContentType("text/plain; charset=UTF-8");
//HTML 문서 구조로 응답
resp.setContentType("text/html; charset=UTF-8");
//요청한 사용자에세 응답하기 위한 객체
PrintWriter out=resp.getWriter();
out.println("");
out.println("<!DOCTYPE html>");
out.println(" <html>");
out.println(" <head>");
out.println(" <meta charset='UTF-8'>");
out.println(" <title>환영합니다</title>");
out.println(" </head>");
out.println(" <body>");
out.println(" <strong>대한민국</strong>");
out.println(" <hr>");
out.println(" <span style='color:red'>오니모니하</span>");
out.println(" <hr>");
out.println(" <table border='1'>");
out.println(" <tr>");
out.println(" <th>Column 1 Heading</th>");
out.println(" <th>Column 2 Heading</th>");
out.println(" </tr>");
out.println(" <tr>");
out.println(" <td>Row 1: Col 1</td>");
out.println(" <td>Row 1: Col 2</td>");
out.println(" </tr>");
out.println(" </table>");
out.println("</body>");
out.println("</html>");
out.close();
}catch(Exception e){System.out.println("요청실패"+e);}
}//doGet() end
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//<form method=post> 방식으로 요청했을때 호출
}//doPost() end
}//class end
3) web.xml 의 커스텀
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>net.control.Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/wel.do</url-pattern>
</servlet-mapping>
▶ web.xml 에서 커스텀 태그를 만든후
결과확인
http://localhost:8090/mvcTest/wel.do
주소로 들어가보면 위에서 설정해준 servlet-class 로 들어가게 된다
4) LifeCycle
▶ 이번에 사용하는 override 는 HttpServlet 에 doGet, doPost,Service GenericServlet 에 destroy,init
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// method = get 방식 요청이 들어오면
//부모클레스를 부른다
super.doGet(req, resp);
System.out.println("doGet() 호출.....");
}// doGet end
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// method = post 방식 요청이 들어오면
super.doPost(req, resp);
System.out.println("doPost() 호출.....");
}// doPost end
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// method=get 방식으로 요청되면 doGet()호출
// method=post 방식으로 요청되면 doPost()호출
// 구분해서 호출하는 역할
super.service(arg0, arg1);
System.out.println("doService() 호출.....");
}// service end
@Override
public void destroy() {
// 서버가 중지되면 1번만 자동 실행
super.destroy();
System.out.println("destroy()호출....");
}// destroy end
@Override
public void init() throws ServletException {
// 서블릿이 최초로 호출될때 1번만 자동 실행
//초기환경 구축할때 사용
super.init();
System.out.println("init()호출....");
}// init end
<servlet>
<servlet-name>Jav</servlet-name>
<servlet-class>net.control.LifeCycle</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Jav</servlet-name>
<url-pattern>/life.do</url-pattern>
</servlet-mapping>
1) 서버 호출시 init()호출
2) method=get 방싱의 요청이 들어오면 doGet()호출
3) method=get 방식으로 요청되면 doGet()호출
method=post 방식으로 요청되면 doPost()호출
구분해서 호출하는 역할
4) 서버가 중지되면 1번만 자동 실행
'JAVA 교육 > Servlet' 카테고리의 다른 글
2019/10/02 Servlet을 이용한 index.do (0) | 2019.10.02 |
---|---|
2019/10/01 error 페이지 (0) | 2019.10.01 |
2019/09/30 loginForm.jsp (mvc) test (0) | 2019.09.30 |
소중한 공감 감사합니다