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);
    }

}

+ Recent posts