코딩하는 바나나
[BackEnd] Servlet 과 JSP 본문
Servlet
WAS에서 동작하는 어플리케이션을 Java Web Application이라고 한다.
Java Web Application은 html,css, 자바클래스, servlet, jsp 등등을 포함한다.
Servlet은 동적인 처리를 할때 사용이 된다.
Servlet 3.0이상은 web.xml파일을 사용하지 않고 자바 어노테이션 기반으로 사용
Servlet 3.0미만은 web.cml파일에 여러가지 설정들을 한다.
Servlet은 HttpServlet 객체를 사용한다.
@WebServlet("/Helloservelet")
public class Helloservelet extends HttpServlet {
private static final long serialVersionUID = 1L;
public Helloservelet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<h1>Hello servelet</h1>");
}
}
위 코드의 어노테이션 부분을 보면 url이 적혀있다.
이 url로 특정 http메소드로 접속을 했을 때 servlet이 특정 로직을 수행하게 돼있다.
밑에 정의되어 있는 doGet함수 처럼 get메소드로 요청이 왔을때 화면에 hello servlet을 출력하는 로직이 구현되어있다.
response에 컨텐츠 타입과 같은 헤더의 정보들도 넣을수 있고 writer객체를 받아와 화면에 출력도 할 수 있다.
그런데 이런식으로 html태그들을 하나하나 출력을 하기에는 코드도 복잡하고 너무 힘들 것이다. 그래서 나온 것이 JSP이다.
JSP에대해서는 밑에서 보기로 하고 이제 Servlet의 라이프 사이클에 대해 알아보자
Servlet의 라이프 사이클에는 Init, service, destroy 가 있다.
init은 servlet객체가 생성될때, service는 servlet객체가 수행될때, destroy는 servlet객체가 삭제될때 실행되는 함수들이다. 각 함수안에서 콘솔에 출력을 시켜 실행시켜보자.
@WebServlet("/LifeCycleServlet")
public class LifeCycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifeCycleServlet() {
System.out.println("LifeCycleServlet 생성!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init test 호풀!");
}
public void destroy() {
System.out.println("destroy 호풀!");
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service 호풀!");
}
}
최초 Was를 실행할때 servlet 객체가 만들어지고 init이 실행된다.
하지만 웹어플리케이션을 수정하게되면 servlet객체를 destroy한 후 다시 init을 호출한다.
수정후 다시 url로 접속하면 새로운 servlet이 생성되고 init이 실행된다.
service는 servlet이 불려질때 마다 실행된다. 새로고침을 누르면 저렇게 sercvice가 계속 호출되는 것을 볼 수 있다.
destroy는 was 종료시 또는 웹어플리케이션의 내용이 변경되었을 경우 servlet 객체를 다시 생성해 주기 위해서 실행된다.
저렇게 html만 보내주는데 왜 동적인 컨텐츠를 처리한다고 의문이 들수도있다. 우리가 html파일만 클라이언트로 보내주는 것과는 다르게 servlet을 활용하면 html의 회원이름 같이 유저가 입력한정보를 request로 받아서 servlet으로 출력해줄 수 있다. 이를 동적인 컨텐츠라 하는 것이다.
JSP
JSP는 servlet과 사용방식이 조금 다르다. Servlet은 주로 서비스 로직을 구현하는 반면 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>
<%
int total = 0;
for(int i =0; i <= 10; i++){
total = total + i;
}
%>
1부터 10까지의 합 <%=total %>
</body>
</html>
위의 코드는 0부터 jsp파일이다. 언뜻 보면 html파일 같지만 다르다.
html 문법은 그대로 쓰되 <% 같은 것들이 추가되어있다. 이를 스크립트 요소라고 한다.
스크립트요소에는 <%! %>, <% %>, <%=%>이있다.
<%!%> 는 전역변수나 메소드를 선언할때 사용한다.
<%%>는 자바 코드를 사용할때 사용한다. 이론적으로는 자바 외의 다른 언어도 사용가능이 하지만 JSP는 자바를 사용한다.
<%=%>화면에 출력할 내용 기술에 사용한다. <%=total%>과 같이 자바 변수들을 출력해 줄 수 있다.
JSP의 핵심은 결국 작성된 JSP파일은 Servlet으로 변경되어 실행된다는 점이다.
jsp파일 작성후 디렉토리를 보면 WAS가 jsp를 토대로 작성한 Servlet파일이 있을 것이다.
Servlet과 JSP를 연동하여 사용하면 로직은 로직대로 출력은 출력대로 쉽게 구현 할 수 있다.
Servlet과 JSP를 연동은 foward를 통해서 해야한다. foward는 다음에 알아보자.
'Web' 카테고리의 다른 글
[BackEnd] Scope (0) | 2022.03.09 |
---|---|
[BackEnd] redirect, foward, servlet jsp연동 (0) | 2022.03.09 |
[BackEnd] WAS (0) | 2022.02.28 |
[FrontEnd] Javascript - Ajax 통신 (0) | 2022.02.27 |
[FrontEnd] Jacascript - DOM (2) | 2022.02.27 |