<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hello
<%
System.out.println("jspService()");
%>
<%!
public void jspInit() {
System.out.println("jspInit()!");
}
public void jspDestroy() {
System.out.println("jspDestroy()");
}
%>
</body>
</html>
- 브라우저가 웹서버에 대한 JSP에 대한 요청 정보를 전달한다.
- 브라우저가 요청한 JSP가 최초일 경우만 JSP로 작성한 코드를 서블릿 코드로 변환한다.(java 파일 생성)
- 서블릿 코드를 컴파일한다. (class 파일 생성)
- 클래스 로딩하고 인스턴스 생성한다.
- 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.
- init(), service(), destroy()
- _jspinit(), _jspservice(), _jspdestroy()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for(int i=0;i<5;i++){
%> //프로그래밍 코드는 스크립트릿으로 감싸줘야 한다.
id :<%= getId() + i %><br>
//화면에 출력할 코드는 표현식에 감싸져 있어야 한다.
<%
} //프로그래밍 코드는 스크립트릿으로 감싸줘야 한다.
%>
</body>
</html>
<%!
String id = "u00"; //멤버변수(전역변수) 선언
public String getId( ) { //메소드 선언
return id;
}
%> //전역변수, 메소드는 선언문에 감싸져 있어야 한다.
- 브라우저는 서버에게 요청을 보낸다.
- 서버는 클라이언트에게 HTTP 상태코드 302로 응답하고 헤더에 Location 값이 URL을 추가하여 응답한다. (저 URL로 이동 부탁합니다.)
- 클라이언트는 서버로부터 받은 상태값이 302면 Location 헤더값으로 재요청을 보내고 브라우저의 URL로 바뀌게 된다.
- 상태코드 302: 클라이언트가 요청한 리소스가 Location 헤더의 주어진 URL로 일시적으로 이동했음을 가리킨다.
서블릿이나 JSP는 리다이렉트하기 위해 HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.
예시 : 게시판에서 글 작성 - 클라이언트>서버(글 저장 요청) - 서버 글 저장 - 서버>클라이언트(글 목록으로 이동 응답) - 자동으로 글 목록(서버에게 요청하여 응답받은) 출력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
response.sendRedirect("redirect02.jsp");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
redirect된 페이지 입니다.
</body>
</html>
- 브라우저에서 Servlet1에게 요청을 보냄
- Servlet1은 요청 처리 후 HttpServletRequest에 저장
- Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse을 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송
- Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 웹 브라우저에게 결과를 전송
@WebServlet("/front")
public class FrontServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FrontServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int Value = (int) 100;
request.setAttribute("number", Value);
RequestDispatcher requestDispatehcer = request.getRequestDispatcher("/next");
requestDispatehcer.forward(request, response);
}
}
@WebServlet("/next")
public class ForwardServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ForwardServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
int num = (Integer)request.getAttribute("number");
out.println(num);
out.println("</body>");
out.println("</html>");
}
}
@WebServlet("/LogicServlet")
public class LogicServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LogicServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int v1 = (int)100;
int v2 = (int)200;
int result = v1 + v2;
request.setAttribute("v1", v1);
request.setAttribute("v2", v2);
request.setAttribute("result", result);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/result.jsp");
requestDispatcher.forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title</title>
</head>
<body>
EL표기법으로 출력합니다.<br>
${v1} + ${v2} = ${result} <br><br>
스클립틀릿과 표현식을 이용해 출력합니다.<br>
<%
int v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%-- setAttribute로 담았던 변수를 가져온다. --%>
<!-- 이것도 주석 가능 -->
<%=v1%> + <%=v2 %> = <%=result %>
</body>
</html>
폴더 경로가 일치하는 경우: /folder1/folder2/* 확장자 패턴이 일치하는 경우: *.html(확장자)
Reference: