Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Word Wrap
- /js/app/index.js
- sysout자동입력
- 구글 로그인 후 redirect
- 7기
- Java
- 구글 로그인 후 js
- Cannot determine URI for
- 줄변경
- cannot determine url for
- 줄바꿈
- 이클립스
- 회고
- 중도퇴소
- sysout
- 자동으로 줄내리기
- 구글 로그인 후 경로
- 삼성청년소프트웨어아카데미
- SSAFY
- System
- 싸피
- System.out.println
- http://localhost:8080/js/app/index.js
- 취업퇴소
- 특화프로젝트
- 사피
Archives
- Today
- Total
IT탐험
서블릿 확장 API 본문
서블릿 포워드
- 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법
- 사용되는 용도
- 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 한다
- 요청(request)에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있다
- 요청(request)에 정보를 포함시켜 다른 서블릿에 전달할 수 있다
- 모델2 개발 시 서블릿에서 JSP로 데이터를 전달하는 데 사용
서블릿의 포워드 방법
- redirect
- HttpServletResponse 객체의 sendRedirect() 메서드를 이용
- 웹 브라우저에 재요청하는 방식
- 형식 : sendRedirect("포워드할 서블릿 또는 JSP");
- Refresh
- HttpServletResponse 객체의 addHeader() 메서드를 이용
- 웹 브라우저에 재요청하는 방식
- 형식 : response.addHeader("Refresh", "경과시간(초);url=요청할 서블릿 또는 JSP");
- location
- 자바스크립트 location 객체의 href 속성을 이용
- 자바스크립트에서 재요청하는 방식
- 형식 : location.href='요청할 서블릿 또는 JSP';
- dispatch
- 일반적으로 포워드 기능을 지칭
- 서블릿이 직접 요청하는 방법
- RequestDispather 클래스의 forward()메서드를 이용
- 형식 : RequestDispatcher dis=request.getRequestDispatcher("포워드할 서블릿 또는 JSP"); dis.forward(request.response);
- redirect, refresh, location 방법은 서블릿이 웹 브라우저를 거쳐 다른 서블릿이나 JSP에게 요청하는 방법
- 반면 dispatch 방법은 서블릿에서 클라이언트를 거치지 않고 바로 다른 서블릿에게 요청하는 방법
- 네 가지 모두 자주 사용된다
redirect를 이용한 포워딩
- 방법
- 클라이언트의 웹 브라우저에서 첫 번째 서블릿의 요청한다
- 첫 번째 서블릿은 sendRedirect() 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해서 요청한다
- 웹 브라우저는 sendRedirect() 메서드가 지정한 두 번째 서블릿을 다시 요청한다
- 사용예시 : http://localhost:8080/first 입력시 http://localhost:8080/second로 이동
더보기
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.sendRedirect("second");
}
}
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("sendRedirect를 이용한 redirect 실습");
out.println("</body></html>");
}
}
refresh를 이용한 포워딩
- 방법
- 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청한다
- 첫 번째 서블릿은 addHeader() 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해 요청한다
- 웹 브라우저는 addHeader() 메서드가 지정한 두 번째 서블릿을 다시 요청한다
- 사용예시 : http://localhost:8080/first2 입력시 http://localhost:8080/second2로 이동
더보기
@WebServlet("/first2")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.addHeader("Refresh","1;url=second2");
}
}
@WebServlet("/second2")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("refresh를 이용한 redirect 실습");
out.println("</body></html>");
}
}
location을 이용한 포워딩
- 사용예시 : http://localhost:8080/first2 입력시 http://localhost:8080/second2로 이동
더보기
@WebServlet("/first3")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<script type='text/javascript'>");
out.print("location.href='second3';");
out.print("</script>");
}
}
@WebServlet("/second3")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("location를 이용한 redirect 실습");
out.println("</body></html>");
}
}
redirect 방식으로 다른 서블릿에 데이터 전달하는법
- 사용예시 : http://localhost:8080/first4 입력시 http://localhost:8080/second4?name=lee로 이동
더보기
@WebServlet("/first4")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.sendRedirect("second4?name=lee");
// GET 방식을 이용해 이름/값 쌍으로 데이터를 다른 서블릿으로 전달
}
}
@WebServlet("/second4")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name=request.getParameter("name");
// name으로 이전 서블릿에서 전달된 lee를 받는다
out.println("<html><body>");
out.println("이름 : " + name);
out.println("</body></html>");
}
}
- refresh나 location 또한 get 방식을 이용해 다른 서블릿으로 데이터 전달이 가능하다
dispatch를 이용한 포워드 방법
- dispatch를 이용한 포워딩 과정
- redirect 방식과 다르게 클라이언트의 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행되기 때문에 웹 브라우저 주소창의 URL이 변경되지 않는다. 즉, 클라이언트 측에서는 포워드가 진행되는지 알 수 없다
- 수행 과정 순서
- 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청한다
- 첫 번째 서블릿은 RequestDispatcher를 이용해 두 번째 서블릿으로 포워드한다
- * 모델2 방식이나 스트럿츠(struts), 스프링(spring) 프레임워크에서 포워딩할 때 사용한다
- 사용예시 : http://localhost:8080/first5 입력시 URL이 변경되지않고 그대로이다
더보기
@WebServlet("/first5")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatch = request.getRequestDispatcher("second5");
dispatch.forward(request, response);
// dispatch 방법을 이용해 second로 전달
}
}
@WebServlet("/second5")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("dispatch를 이용한 forward 실습");
out.println("</body></html>");
}
}
- dispatch를 이용해 전송할 때 GET 방식으로 데이터를 전송
- 사용예시 : http://localhost:8080/first5 입력시 데이터가 전달되었음에도 URL이 변경되지않고 그대로이다
더보기
@WebServlet("/first6")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatch = request.getRequestDispatcher("second6?name=lee");
dispatch.forward(request, response);
}
}
@WebServlet("/second6")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name=request.getParameter("name");
out.println("<html><body>");
out.println("이름 : " + name + "<br/>");
out.println("dispatch를 이용한 forward 실습");
out.println("</body></html>");
}
}
바인딩
- 서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달할 때 사용하는 기능
- 사전적의미 : 두 개를 하나로 묶는다
- 웹 프로그램 실행 시 자원(데이터)을 서블릿 관련 객체에 저장하는 방법으로 주로 HttpServletRequest, HttpSession, ServletContext 객체에서 사용되며 저장된 자원(데이터)은 프로그램 실행 시 서블릿이나 JSP에서 공유하여 사용
- 모델2, 스트럿츠, 스프링 프레임워크로 구현하는 웹 프로그램은 바인딩 기능을 이용하여 서블릿이나 JSP간 데이터를 전달하고 공유한다
서블릿 객체에서 사용되는 바인딩 관련 메서드 | 기능 |
setAttribute(String name, Object obj) | 서블릿 객체에 name 값으로 obj를 바인딩 한다 |
getAttribute(String name) | 서블릿 객체에 name 값으로 바인딩된 데이터를 가져온다 |
removeAttribute(String name) | 서블릿 객체에 name 값으로 바인딩된 데이터를 삭제한다 |
HttpServletRequest를 이용한 redirect 포워딩 시 바인딩
- redirect 방식은 요청할때의 request와 재요청되는 request가 다른 요청이기 때문에 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없다
HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩
- 재요청하는 redirect 방식이 아닌 dispatch 방식은 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 있다
- 사용예시
더보기
@WebServlet("/first8")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setAttribute("address", "서울시 성북구");
RequestDispatcher dispatch = request.getRequestDispatcher("second8");
dispatch.forward(request, response);
}
}
@WebServlet("/second8")
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String address = (String) request.getAttribute("address");
out.println("<html><body>");
out.println("주소 : " + address + "<br/>");
out.println("dispatch를 이용한 바인딩 실습");
out.println("</body></html>");
}
}
- 두 서블릿 간 회원 정보 조회 바인딩 사용예시
더보기
@WebServlet("/member")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
MemberDao dao = new MemberDao();
List memberList=dao.listMembers();
request.setAttribute("memberList", memberList);
// 조회된 회원 정보를 ArrayList 객체에 저장한 후 request에 바인딩
RequestDispatcher dispatch = request.getRequestDispatcher("viewMembers");
dispatch.forward(request, response);
// 바인딩한 request를 viewMembers 서블릿으로 포워딩
}
}
@WebServlet("/viewMembers")
public class ViewServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
List memberList = (List) request.getAttribute("memberList");
// 바인딩해서 넘어온 request에서 회원 정보를 가져온다
out.print("<html><body>");
out.print("<table border=1><tr align='center' bgcolor='lightgreen'>");
out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td><td>삭제</td></tr>");
for(int i=0; i<memberList.size();i++) {
MemberVO memberVO = (MemberVO) memberList.get(i);
String id = memberVO.getId();
String pwd = memberVO.getPwd();
String name = memberVO.getName();
String email = memberVO.getEmail();
Date joinDate = memberVO.getJoinDate();
out.print("<tr><td>" + id + "</td><td>" + pwd + "</td><td>" + name + "</td><td>" + email + "</td><td>" + joinDate + "</td><td>" + "<a href='/pro08/member3?command=delMember&id=" + id + "'>삭제 </a></td></tr>");
}
out.print("</body></html>");
out.print("<a href='/pro08/memberForm.html'> 새 회원 등록하기</a>");
}
}
ViewServlet 클래스는 웹 브라우저에서 화면 기능을 담당하는데 이런 기능을 하는 서블릿이 분화되어 발전된 것이 JSP이다
ServletContext와 ServletConfig 사용법
- ServletContext 클래스
- 톰캣 컨테이너 실행 시 각 컨텍스트(웹 어플리케이션)마다 한 개의 ServletContext 객체를 생성하고 톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸된다
- ServletContext 객체는 웹 애플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하여 사용
- ServletContext 클래스의 특징
- javax.servlet.ServletContext로 정의
- 서블릿과 컨테이너 간의 연동을 위해 사용
- 컨텍스트(웹 애플리케이션)마다 하나의 ServletContext가 생성
- 서블릿끼리 자원(데이터)을 공유하는 데 사용
- 컨테이너 실행 시 생성되고 컨테이너 종료 시 소멸
- ServletContext가 제공하는 기능
- 서블릿에서 파일 접근 기능
- 자원 바인딩 기능
- 로그 파일 기능
- 컨텍스트에서 제공하는 설정 정보 제공 기능
- ServletConfig는 각 서블릿에 대해 생성
ServletContext에서 제공하는 메서드 | 기능 |
getAttribute(String name) | 주어진 name을 이용해 바인딩된 value를 가져온다 name이 존재하지 않으면 null을 반환 |
getAttributeNames() | 바인딩된 속성들의 name을 반환 |
getContext(String uripath) | 지정한 uripath에 해당되는 객체를 반환 |
getInitParameter(String name) | name에 해당되는 매개변수의 초기화 값을 반환 name에 해당되는 매개변수가 존재하지 않으면 null 반환 |
getInitParameterNames() | 컨텍스트의 초기화 관련 매개변수들의 이름들을 String 객체가 저장된 Enumeration 타입으로 반환 매개변수가 존재하지 않으면 null 반환 |
getMajorVersion() | 서블릿 컨테이너가 지원하는 주요 서블릿 API 버전을 반환 |
getRealPath(String path) | 지정한 path에 해당되는 실제 경로를 반환 |
getResource(String path) | 지정한 path에 해당되는 Resource를 반환 |
getServerInfo() | 현재 서블릿이 실행되고 있는 서블릿 컨테이너의 이름과 버전을 반환 |
getServletContextName() | 해당 어플리케이션의 배치 관리자가 지정한 ServletContext에 대한 해당 웹 애플리케이션의 이름을 반환 |
log(String msg) | 로그 파일에 로그를 기록 |
removeAttribute(String name) | 해당 name으로 ServletContext에 바인딩된 객체를 제거 |
setAttribute(String name, Object object) | 해당 name으로 객체를 ServletContext에 바인딩 |
setInitParameter(String name, String value) | 주어진 name으로 value를 컨텍스트 초기화 매개변수로 설정 |
ServletContext 바인딩 기능
더보기
@WebServlet("/cset")
public class SetServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
// ServletContext 객체를 가져온다
List member = new ArrayList();
member.add("이순신");
member.add(30);
context.setAttribute("member", member);
// ServletContext 객체에 데이터를 바인딩한다
out.print("<html><body>");
out.print("이순신과 30 설정");
out.print("</body></html>");
}
}
@WebServlet("/cget")
public class GetServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
// ServletContext 객체를 가져온다
List member = (ArrayList) context.getAttribute("member");
// member로 이전에 바인딩된 회원 정보를 가져온다
String name = (String)member.get(0);
int age = (Integer)member.get(1);
out.print("<html><body>");
out.print(name + "<br>");
out.print(age + "<br>");
out.print("</body></html>");
}
}
ServletContext에 바인딩된 데이터는 모든 서블릿들이 접근할 수 있으므로
웹 애플리케이션에서 모든 서블릿이 공통으로 사용하는 데이터는 ServletContext에 바인딩하여 사용하면 편리
ServletContext 매개변수 설정
- 대부분의 웹 앱에서 메뉴는 공통으로 사용하는 기능이므로 web.xml에 설정 후 프로그램 시작 시 초기화할 때 가져와서 사용하면 편리
더보기
web.xml
<?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_4_0.xsd" id="WebApp_ID" version="4.0">
<context-param>
<param-name>menu_member</param-name>
<param-value>회원등록 회원조회 회원수정</param-value>
</context-param>
<context-param>
<param-name>menu_order</param-name>
<param-value>주문조회 주문등록 주문수정 주문취소</param-value>
</context-param>
<context-param>
<param-name>menu_goods</param-name>
<param-value>상품조회 상품등록 상품수정 상품삭제</param-value>
</context-param>
</web-app>
Servlet.java
@WebServlet("/initMenu")
public class ContextParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
String menu_member = context.getInitParameter("menu_member");
String menu_order = context.getInitParameter("menu_order");
String menu_goods = context.getInitParameter("menu_goods");
out.print("<html><body>");
out.print("<table border=1 cellspacing=0><tr>메뉴 이름</tr>");
out.print("<tr><td>" + menu_member + "</td></tr>");
out.print("<tr><td>" + menu_order + "</td></tr>");
out.print("<tr><td>" + menu_goods + "</td></tr>");
out.print("</body></html>");
}
}
ServletContext의 파일 입출력
- 파일에서 데이터를 읽어올 수 있다
더보기
init.txt
회원등록 회원조회 회원수정, 주문조회 주문수정 주문취소, 상품조회 상품등록 상품수정 상품삭제
Servlet.java
@WebServlet("/cfile")
public class ContextFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf8");
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/bin/init.txt");
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
String menu = null;
String menu_member = null;
String menu_order = null;
String menu_goods = null;
while((menu=buffer.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(menu, ",");
menu_member=tokens.nextToken();
menu_order=tokens.nextToken();
menu_goods=tokens.nextToken();
}
out.print("<html><body>");
out.print(menu_member + "<br>");
out.print(menu_order + "<br>");
out.print(menu_goods + "<br>");
out.print("</body></html>");
out.close();
}
}
ServletConfig
- 컨텍스트마다 생성되는 ServletContext와 다르게 서블릿 객체마다 하나씩 생성된다
- ServletConfig 인터페이스를 GenericServlet 클래스가 실제 구현한다
- 각 서블릿에서만 접근할 수 있으며 공유는 불가능하다
- ServletConfig가 제공하는 기능
- ServletContext객체를 얻는 기능
- 서블릿에 대한 초기화 작업 기능
- 서블릿에서 초기화하는 방법
- @WebServlet 애너테이션 이용
- web.xml에 설정
@WebServlet 애너테이션을 이용한 서블릿 설정
@WebServlet의 구성요소 | 설명 |
urlPatterns | 웹 브라우저에서 서블릿 요청 시 사용하는 매핑 이름 |
name | 서블릿 이름 |
loadOnStartup | 컨테이너 실행 시 서블릿이 로드되는 순서 지정 |
initParams | @WebInitParam 애너테이션 이용해 매개변수를 추가하는 기능 |
description | 서블릿에 대한 설명 |
더보기
@WebServlet(name="InitParamServlet",
urlPatterns = {"/sInit", "/sInit2"},
initParams = {@WebInitParam(name = "email", value = "admin@jweb.com"),
@WebInitParam(name = "tel", value = "010-1111-2222")})
public class InitParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String email = getInitParameter("email");
String tel = getInitParameter("tel");
out.print("<html><body>");
out.print("<table><tr>");
out.print("<td>email:</td><td>" + email + "</td></tr>");
out.print("<tr><td>휴대전화: </td><td>" + tel + "</td></tr></table>");
out.print("</body></html>");
}
}
load-on-startup
- 서블릿은 브라우저에서 최초 요청 시 init() 메서드를 실행한 후 메모리에 로드되어 기능을 수행하는데, 최초 요청에 대해 실행 시간이 길어지는 단점을 보완하기 위한 기능
- 특징
- 톰캣 컨테이너가 실행되면서 미리 서블릿을 실행
- 지정한 숫자가 0보다 크면 톰캣 컨테이너가 실행되면서 서블릿이 초기화
- 지정한 숫자는 우선순위를 의미하며 작은 숫자부터 먼저 초기화
- 구현방법
- 애너테이션 이용
- web.xml에 설정
더보기
@WebServlet(name = "loadConfig", urlPatterns = { "/loadConfig" }, loadOnStartup = 1)
public class LoadAppConfig extends HttpServlet {
private ServletContext context;
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("LoadAppConfig의 init 메서드 호출");
context = config.getServletContext();
String menu_member = context.getInitParameter("menu_member");
String menu_order = context.getInitParameter("menu_order");
String menu_goods = context.getInitParameter("menu_goods");
// getInitParameter() 메서드로 web.xml의 메뉴 정보를 읽어 들인다
context.setAttribute("menu_member", menu_member);
context.setAttribute("menu_order", menu_order);
context.setAttribute("menu_goods", menu_goods);
// 메뉴 정보를 ServletContext 객체에 바인딩
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String menu_member = (String) context.getAttribute("menu_member");
String menu_order = (String) context.getAttribute("menu_order");
String menu_goods = (String) context.getAttribute("menu_goods");
// 브라우저에서 요청 시 ServletContext 객체에 바인딩된 메뉴 항목을 가져온다
out.print("<html><body>");
out.print("<table border=1 cellspacing=0><tr>메뉴 이름</tr>");
out.print("<tr><td>" + menu_member + "</td></tr>");
out.print("<tr><td>" + menu_order + "</td></tr>");
out.print("<tr><td>" + menu_goods + "</td></tr></table>");
out.print("</body></html>");
}
}
'게시판만들기기록 > 서블릿' 카테고리의 다른 글
서블릿의 필터와 리스너 (0) | 2021.09.22 |
---|---|
쿠키과 세션 (0) | 2021.09.21 |
서블릿 비즈니스 로직 처리 (0) | 2021.09.19 |
서블릿 기초 (0) | 2021.09.17 |
서블릿 (0) | 2021.09.17 |
Comments