티스토리 뷰
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
'KH 정보교육원 [ Java ]' 카테고리의 다른 글
KH 88일차 - ServletContext 2 (*****) + 리스너 / 필터 생성 (0) | 2022.07.04 |
---|---|
KH 87일차 - ServletContext (*****) (0) | 2022.07.01 |
KH 85일차 - Servlet 2 (****) (0) | 2022.06.29 |
KH 84일차 - Servlet 생성 (****) (0) | 2022.06.28 |
KH 83일차 - Driver SPY / junit (0) | 2022.06.27 |
댓글