국비 48일차 Servlet(init, context 파라미터 , filter, redirect, forward)
2021. 3. 17. 18:29
2021.03.17 국비교육 48일차
[TOC]
초기화 파라미터
- 특정 서블릿에서만 사용 가능
- init
package com.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//web.xml 설정된 init 초기 파라미터 얻기
String userid = getInitParameter("userid");
String passwd = getInitParameter("passwd");
System.out.println(userid + "\t" + passwd);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("초기화 파라미터 userid 값 : " + userid + "<br>" );
out.print("초기화 파라미터 passwd 값 : " + passwd + "<br>" );
out.print("</body>");
out.print("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>JSPWorkshop23</display-name>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.controller.TestServlet</servlet-class>
<!-- 추후 추가시작 -->
<init-param>
<param-name>userid</param-name>
<param-value>test</param-value>
</init-param>
<init-param>
<param-name>passwd</param-name>
<param-value>1234</param-value>
</init-param>
<!-- 추가 끝 -->
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/xxx</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
컨텍스트 파라미터
- 프로젝트내의 모든 서블릿 사용 가능
- context
package com.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//context 파라미터 얻기
ServletContext ctx = getServletContext();
String userid = ctx.getInitParameter("userid");
String passwd = ctx.getInitParameter("passwd");
System.out.println(userid + "\t" + passwd);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("초기화 파라미터 userid 값 : " + userid + "<br>" );
out.print("초기화 파라미터 passwd 값 : " + passwd + "<br>" );
out.print("</body>");
out.print("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>JSPWorkshop24_context</display-name>
<context-param><!-- contextparam설정, key:value -->
<param-name>userid</param-name>
<param-value>aaa</param-value>
</context-param>
<context-param>
<param-name>passwd</param-name>
<param-value>1234</param-value>
</context-param>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.controller.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Filter API
클라이언트에서 서블릿으로 요청하고 응답을 처리할 때 서블릿이 요청 받기 전과 응답처리 전에 임의의 특정작업을 수행할 수 있도록 하는 것
client와 server의 관문같은 역할
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyEncodingFilter implements Filter{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override //이름변경
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("MyEncodingFilter.doFilter 요청");
//request 인코딩 설정
request.setCharacterEncoding("utf-8"); //request한글처리
chain.doFilter(request, response); //요청한 servlet에 request, response연결시켜줌
//servlet 실행
System.out.println("MyEncodingFilter.doFilter 응답");
//web.xml에 filter클래스 등록 반드시 해야함
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyEnocdingFilter.doFilter init");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<filter>
<filter-name>MyEncodingFilter</filter-name>
<filter-class>com.filter.MyEncodingFilter</filter-class> <!-- 클래스 이름부여 -->
</filter>
<filter-mapping>
<filter-name>MyEncodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 모든 주소에 대해 처리 -->
</filter-mapping>
</web-app>
실행순서
MyEnocdingFilter.doFilter init
MyEncodingFilter.doFilter 요청
TestSevlet.doget
MyEncodingFilter.doFilter 응답
요청 위임
사용자의 요청을 받은 서블릿 또는 JSP에서 다른 컴포넌트로 요청을 위임할 수 있는 방법
redirect시 데이터 전송은 안됨
redirect
package com.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/TestController")
public class TestController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestController.doGet");
//SetServlet
request.setAttribute("request", "홍길동"); // request 객체 설정
HttpSession session = request.getSession();
session.setAttribute("session", "이순신"); //session에 객체 설정
ServletContext application = getServletContext();
application.setAttribute("application", "유관순"); //application에 객체 설정
//1.redirect 방법
response.sendRedirect("hello.jsp"); //요청 위임 받고 화면 출력 구현
//페이지의 재요청이 이루어지며 요청위임(화면전환)이 이루어져
//request에 저장한 내용은 전달되지 않음
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HelloJsp 테스트 </title>
</head>
<body>
<%
/* html코드 중간중간에 필요한 jps태그 삽입 */
String mesg= (String)request.getAttribute("request"); //request객체에서 뽑기 홍길동 -- 넘어오지 않음
String mesg2= (String)session.getAttribute("session"); //session객체에서 뽑기 이순신
String mesg3= (String)application.getAttribute("application"); //application 객체에서 뽑기 유관순
%>
request: <%= request.getAttribute("request") %><br>
session: <%= session.getAttribute("session") %><br>
application: <%= application.getAttribute("application") %><br>
<hr border="2">
1>> <%= mesg %>
2>> <%=mesg2 %>
3>> <%=mesg3 %>
hello~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</body>
</html>
forward
package com.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/TestController")
public class TestController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TestController.doGet");
//SetServlet
request.setAttribute("request", "홍길동"); // request 객체 설정
HttpSession session = request.getSession();
session.setAttribute("session", "이순신"); //session에 객체 설정
ServletContext application = getServletContext();
application.setAttribute("application", "유관순"); //application에 객체 설정
//2.RequestDispatcher.forward방법 - request와 response를 직접 요청위임페잊에 전달
//요청위임 페이지에서는 Request안의 내용을 그대로 사용이 가능
RequestDispatcher dis = request.getRequestDispatcher("hello.jsp");
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
'ETC > 국비교육' 카테고리의 다른 글
국비 51일차 (MVC패턴, hidden활용, Map과 List) (0) | 2021.03.22 |
---|---|
국비 49일차 JSP 스크립팅요소, 내장객체 (0) | 2021.03.18 |
국비 47일차 Servlet scope (0) | 2021.03.16 |
국비 46일차 Servlet DB 연동 절차 (0) | 2021.03.15 |
국비 45일차 서블릿 파라미터 처리(values, names, map) (0) | 2021.03.12 |