티스토리 뷰

1.    ServletConfig API를 활용한 초기화 파라미터 

-      Servlet이 초기화될 때, 공통적으로 적용해야 되는 작업들이 필요한 경우가 있다.

-      이러한 정보들은 Servlet에서 설정하기 보다는 web.xml파일에서 설정한 후에 Servlet에서 접근해서 사용하는데, 이때 web.xml에 설정된 값을 초기화 파라미터라고 한다.


[ 1. 로그인 폼에서 입력값 받아오기 ] (***)

 

[ 1 - 1. 로그인 폼 ]

<!DOCTYPE html>

<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <!-- 정적 문서파일은 webapp 파일 밑에 생성해야 한다. -->
</head>

<body>
    <h1>getParameter 실습</h1>

    <form action="Login" method="get">

        <fieldset>

            <legend>로그인 폼</legend>
            
            <ul>
                <li>
                    <label for="userid">아이디</label>
                    <input type="text" name="userid">
                </li>

                <li>
                    <label for="password">비밀번호</label>
                    <input type="password" name="password">
                </li>

                <li><input type="submit" value="전송"></li>
            </ul>
        </fieldset>
    </form>
</body>

</html>

 

[ 1 - 2. Login Servlet ]

 

package org.zerock.myapp;

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;

import lombok.Cleanup;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor(access=lombok.AccessLevel.PUBLIC)

@WebServlet("/Login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		log.trace("service(req, res) invoked.");
		
		// 1. 전송 파라미터 수신하기 ( 폼의 name과 동일하게 해야 한다. )
		String userid = req.getParameter("userid");
		String passwd = req.getParameter("password");
		
		log.info("\t + userid:{} , passwd : {}", userid, passwd);
		
		//=======================================================
		
		// 2. 응답 문서 만들기
		res.setContentType("text/html; charset=utf8");
		
		@Cleanup
		PrintWriter out = res.getWriter();
		
		out.print("<html><body>");
		out.print("아이디 값 : " + userid + "<br>");
		out.print("비밀번호 값 : " + passwd + "<br>");
		out.print("</body></html>");
		
		// + 로그인폼에서 입력한 값을 화면에 보여준다.
		
		out.flush();
		
	} // service

} // end class

[ 2. 클라이언트가 입력한 값 다루기 ] (**)

 

package org.zerock.myapp;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;

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 lombok.Cleanup;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor
@WebServlet("/Sports")
public class SportsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		log.trace("service(req, res) invoked.");
		
		//=======================================================
		
		// 1. 전송 파라미터 수신하기
		
		// 수신받은 값의 한글이 깨지는 것을 방지
		req.setCharacterEncoding("utf-8");
		
		String[] sports = req.getParameterValues("sports");
		String sex = req.getParameter("sex");
		
		//=======================================================
		
		// 2. 응답문서 만들기
		
		res.setContentType("text/html; charset=utf8");
		
		//=======================================================
		
		// 2. 응답문서 만들기
		
		@Cleanup
		PrintWriter out = res.getWriter();
		
		out.print("<html><body>");
		
		for( String sport : sports ) {
			out.print("좋아하는 운동 : " + sport + "<br>");
			log.info("\t + 좋아하는 운동 : {}", sport);
		} // for : 값 하나씩 빼오기
		
		out.println(Arrays.toString(sports)); // Arrays.toString으로 배열의 원소 출력하기
		
		out.print("성별 : " + sex + "<br>");
		log.info("\t + 성별 : {}", sex);
		out.print("</body></html>");
		
		//=======================================================
		
	} // end service

} // end class

[ 3. 클라이언트가 입력한 값 다루기 ] (**)

 

package org.zerock.myapp;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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 lombok.Cleanup;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor

@WebServlet("/Member")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		log.trace("service(req, res) invoked.");
		
		req.setCharacterEncoding("utf-8");
		
		Enumeration<String> paraNames = req.getParameterNames();
		
//		======================================================
		
		res.setContentType("text/html; charset=utf8");
		
		@Cleanup
		PrintWriter out = res.getWriter();
		
		out.print("<html><body>");
		
		while( paraNames.hasMoreElements()) {
			String name = paraNames.nextElement();
			String val = req.getParameter(name);
			out.print("<h3> + name : " + name + ", value : " + val + "</h3><br>");
			// out.println(String.format("name : %s, value : %s", name, val));
		} // while
		
		out.print("</body></html>");
		
		out.flush();

	} // service

} // end class

[ 4. 초기화 파라미터 설정 - 직접 입력하는 방법 ]

 

[ 4 - 1. web.xml파일에 등록 ]

 

    <!-- 초기화 파라미터 작성 -->

    <servlet>

      <servlet-name>InitParam2Servlet</servlet-name>
      <servlet-class>org.zerock.myapp.InitParam2Servlet</servlet-class>

      <init-param>
        <param-name>dirPath</param-name>
        <param-value>DIR_PATH_VALUE</param-value>
      </init-param>

      <init-param>
        <param-name>userid</param-name>
        <param-value>USER_ID_VALUE_HR</param-value>
      </init-param>

    </servlet>

    <servlet-mapping>
      <servlet-name>InitParam2Servlet</servlet-name>
      <url-pattern>/InitParam2</url-pattern>
    </servlet-mapping>

 

[ 4 - 2. Servlet 생성 ]

 

package org.zerock.myapp;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
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 lombok.Cleanup;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor

//@WebServlet("/InitParam2")
public class InitParam2Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	//=========================================================
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		log.trace("init(config) invoked.");
		
		// 수동으로 web.xml파일에 작성한 초기화 파라미터 값 가지고 오기
		String dirPath = config.getInitParameter("dirPath");
		String userid = config.getInitParameter("userid");
		
		log.info("1. dirPath : {}, userid : {}", dirPath, userid);
		
	} // init
	
	//=========================================================

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		log.trace("service(req, res) invoked.");
		
		req.setCharacterEncoding("UTF-8");
		
		String dirPath = this.getInitParameter("dirPath"); // xx
		String userid = this.getInitParameter("userid"); // xx
		
		log.info("\t + 2. dirPath : {}, userid : {}", dirPath, userid); // xx
		
		// + service에서는 초기화 파라미터 값을 얻어낼 수 없다. ( 위의 코드는 작성하지 말아야 한다. )
		// + 초기화 파라미터의 값이 궁금할 경우에는 Init에서 해야 한다. (***)
		
	} // service
	
	//=========================================================

} // end class

[ 5. 초기화 파라미터 설정 - 롬복을 활용하는 방법 ]

 

package org.zerock.myapp;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;


@Log4j2
@NoArgsConstructor
//=========================================================
@WebServlet(
		urlPatterns = { "/InitParams" }, 
		initParams = { 
				@WebInitParam(name = "userid", value = "USER_ID_VALUE"), 
				@WebInitParam(name = "dirPath", value = "DIR_PATH_VALUE")
		})
//=========================================================
public class InitParamsServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	//=========================================================
	
	// 롬복을 활용한 초기화 파라미터 설정

	@Override
	public void init(ServletConfig config) throws ServletException {
		log.trace("init(config) invoked.");
		
		// 수동으로 web.xml파일에 작성한 초기화 파라미터 값 가지고 오기
		String dirPath = config.getInitParameter("dirPath");
		String userid = config.getInitParameter("userid");
		
		log.info("1. dirPath : {}, userid : {}", dirPath, userid);
		
	} // init
	
	//=========================================================

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		log.trace("service(req, res) invoked.");
		
		// + 롬복을 사용해도 service에서 초기화 파라미터 값을 가지고 오는 것은 부담이 되기에, 불가능하다.
		
	} // service

} // end class
728x90
댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항