JSP

[JSP] 서블릿과 서블릿 맵핑

애플쩀 2022. 6. 19. 15:56

서블릿클래스 구현하기 

1.HttpServlet 클래스를 상속받기 

2.서블릿이 get방식의 요청을 처리해야한다면 doGet()메소드 정의 

doGet메소드는 HttpServletRequest와 HttpServletResponse의 두 파라미터를 가지며,

이 두 파라미터는 각각 jsp의 request 기본객체와 response 기본 객체에 해당

3.재정의한 메소드는 request를 이용해 웹 브라우저의 요청정보를 읽어오거나 response를 이용하여 응답을 전송할 수있다. 

응답을 전송하려면 response.setContentType()메소드를 이용하여 응답의 컨텐츠 타입을 지정해야한다. 

response.setContentType("text/html; charset=utf-8");

웹브라우저에 데이터를 전송하려면 19행과 같이 response, getWriter() 로 문자열 데이터를 출력할 수 있는 printWriter 를 구해야한다. PrinterWriter는 println()메소드를 제공하며 이를 이용하여 전송할 응답데이터를 전다라한ㄷ. 

 

 

web.xml로 매핑하기 ->web.xml파일에서 서블릿 클래스를 등록한다. 
  • 서블릿으로 사용할 클래스 
  • 서블릿과 url간의 매핑 

<servlet-name>=해당 서블릿을 참조할때 사용할 이름 

<servlet-class>=서블릿으로 사용할 클래스의 완전한 이름 

<servlet-mapping> =매핑정보 등록 

<servlet-name>= 매핑할 서블릿의 이름 
<url-pattern>=매핑할 url 패턴 지정 

 

 

예를들어 

이러한 web.xml이 있다면 NowSerbvlet클래스를 now라는 이름의 서블릿으로 등록했고, 

/now 라는 url을 NowServlet이 처리하게 된다. 

 

애노테이션으로 매핑 

@WebServlete 애노테이션을 이용하면 web.xml파일에 서블릿을 등록하지 않아도 된다. 

 

예를들어  @WebServlet("/ex01", "/ex02");  라고한다면 

/ex01, /ex02로 들어오는 url을 해당서블릿이 처리하도록 설정하는 것이다. 

 

ex01.jsp

<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Date" %>
<%@page import="java.time.LocalDateTime" %> 
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
String strDate=sdf.format(now);

int age=20;
String today=getNow();
%>
<%! //변수 선언문=> 변수, 메소드 
String name="홍길동";
public String getNow(){
	return LocalDateTime.now().toString();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 19.-오전 10:59:34</title>
</head>
<body>
<h3></h3>

날짜(now):<input type="text" value="<%=now.toLocaleString()%>"><br>
이름(name):<input type="name"  value="<%=name %>"><br>
나이:<input type="age" value="<%=age %>"><br>
날짜:<input type="date" value="<%=strDate%>"><br>
날짜:<input type="date" value="<%=today%>"><br>
날짜(today) : <span><%=today%></span><br>
<script>
$(document).ready(function(){
	
});
</script>
 </body>
</html>

 

 

이제 서블릿으로

ex01.java

package prac;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

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

/**
 * Servlet implementation class ex01
 */
@WebServlet("/ex01")
public class ex01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	
	String name="홍길동";
	public String getNow() {
		return LocalDateTime.now().toString();
	}
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html: charset=UTF-8");
		Date now=new Date();
		SimpleDateFormat sdf= new SimpleDateFormat("yyyy-mm-dd");
		String strDate=sdf.format(now);
		
		int age=20;
		String today=getNow();
		PrintWriter out=response.getWriter();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<meta charset=\"UTF-8\">");
		out.println("<title>Insert title here</title>");
		out.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">");
		out.println("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js\"></script>");
		out.println("<link rel=\"stylesheet\" type=\"text/css\" href=\"\">");
		out.println("<style>");
		out.println("</style>");
		out.println("<script>");
		out.println("$(document).ready(function (){     });");
		out.println("</script>");
		out.println("</head>");
		out.println("<body>");
		out.println("날짜(now) : <input type='text' value='"+ now.toLocaleString() +"'> <br>");
		out.println("이름(name) : <input type='text' value='"+ name +"'> <br>");
		out.println("나이(age) : <input type='text' value='"+age+"'> <br>");
		out.println("날짜(today) : <span>"+today+"</span><br>");
		out.println(strDate +"<br>");
		out.println("</body>");
		out.println("</html>");
		
	}


}

web.xml 을 수정

	 <servlet>
	  <description>현재 날짜 ,시간 응답하는 첫번째 서블릿</description>
	   <description>jsp Ex01</description>
	    <servlet-name>Ex01</servlet-name>
	     <servlet-class>prac/Ex01.java</servlet-class> 
		</servlet> 
		<servlet-mapping> 
		<servlet-name>Ex01</servlet-name> 
		<url-pattern>/now</url-pattern> 
		<url-pattern>/prac/Ex01 </url-pattern> 
		<url-pattern>/test/* </url-pattern> <!--폴더경로가 일치하는경우  -->
		<url-pattern>*.htm </url-pattern> <!--  확장자패턴이 일치하는경우 -->
		<url-pattern>/ex01.htm </url-pattern> 
		<url-pattern>*.ss</url-pattern>
		</servlet-mapping>

 

애노테이션 이용 

@WebServlet("/ex01")

 

ex02.jsp

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link rel="shortcut icon" type="image/x-icon" href="../images/SiSt.ico">
<title>2022. 6. 19.-오후 3:48:17</title>
</head>
<body>
<h3></h3>
<%
String contextPath=request.getContextPath();
%>
 <a href="http://localhost/jspPro/prac/now">NowServlet.java</a><br>
 <a href="<%= contextPath %>/prac/Ex01">days01/now</a><br>
 <a href="<%= contextPath %>/now">/now</a><br>
 <a href="<%= contextPath %>/servlet/sample.ss">/servlet/sample.ss</a><br>
</body>
</html>