JAVA/공부

서블릿 매핑

GaeGim 2022. 9. 15. 19:08
반응형
  • 서블릿 매핑

작성한 서블릿에 접근하기 위해선 해당 서블릿에 패키지명부터 클래스명까지 모두 기재해야 한다. 이런 구조는 접근의 불편함과 디렉터리 구조 노출을 야기해 보안 취약을 유발한다.

이럴 때 개발자는 간단한 URL을 접목시켜 위의 취약점을 보완할 수 있는데, 이를 서블릿 매핑이라고 한다.

 

 

 

 

 

  • 매핑 방법

1. web.xml 파일 이용

 

1-1. C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\WEB-INF 폴더에 들어가서 web.xml 파일 복사

 

 

1-2. ServletTest 폴더 안의 WEB-INF 폴더에 붙여넣기

 

 

1-3. 코드 추가

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

//추가해 줄 코드
<servlet>
 <servlet-name>ServletTest</servlet-name>
 <servlet-class>ServletTest</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>ServletTest</servlet-name>
 <url-pattern>/test</url-pattern>
 </servlet-mapping>

</web-app>

 

**web.xml 파일 : 웹 컨터이너에게 사용자가 지금 접근한 주소가 어떤 서블릿이고 그 서블릿 클래스의 위치는 어떻다고 알려주기 위해 필요한 정보들이 적혀있는 파일

 

 

 

1-4. 파일 수정

프로젝트 파일의 src파일에 실행할 코드를 저장한다.

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.Calendar;

public class ServletTest extends HttpServlet{
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
      response.setContentType("text/html");
      response.setCharacterEncoding("euc-kr");
      Calendar c = Calendar.getInstance();
      int hour = c.get(Calendar.HOUR_OF_DAY);
      int minute = c.get(Calendar.MINUTE);
      int second = c.get(Calendar.SECOND);
      PrintWriter out = response.getWriter();
      out.write("<HTML><HEAD><TITLE>ServlerTest</TITLE></HEAD>");
      out.write("<BODY><H1>");
      out.write("현재 시각은 ");
      out.write(Integer.toString(hour));
      out.write("시 ");
      out.write(Integer.toString(minute));
      out.write("분 ");
      out.write(Integer.toString(second));
      out.write("초입니다.");
      out.write("</H1></BODY></HTML>");
      out.close();
   }
}

 

 

 

1-5. 실행

http://localhost/ServletTest/test을 브라우저에 입력해 f5를 누를 때마다 시간이 바뀌는 것을 확인할 수 있다.

**localhost 옆에 톰캣에 입력한 포트번호를 :의 뒤에 함께 입력해 준다.

 

 

 

 

서블릿 소스를 살펴보면 <html>,<body>등 html 태그를 사용자의 브라우저에 전송하기 위해 response.getWrite()를 사용해 printWriter객체를 얻어와서 일일 이 write메소드를 사용해 보내야 하는데, 만약 HTML 코드 길이가 수백, 수천줄이면 코드를 파악하기 매우 힘들 것이다.

 

이런 단점을 보완한 것이 바로 JSP이다.

 

 

 

 

2. Java Annotation 이용

//URL 입력
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="UTF-8" %>
    <%@page import="java.util.Calendar" %>

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>

        <head>
            <% Calendar c=Calendar.getInstance(); int hour=c.get(Calendar.HOUR_OF_DAY); int
                minute=c.get(Calendar.MINUTE); int second=c.get(Calendar.SECOND); %>
                <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
                <title>Servlet Test</title>
        </head>

        <body>
            <h1>현재시간은 <%=hour %>시 <%=minute %>분 <%=second %>초 입니다.</h1>
        </body>

        </html>

 

코드 실행 : http://localhost/ServletTest/ServletTest.jsp

 

 

반응형

'JAVA > 공부' 카테고리의 다른 글

HTTP와 HTTPS의 차이점  (0) 2022.09.16
인코딩 해결법  (0) 2022.09.15
HttpServlet 클래스  (0) 2022.09.15
HTTP 에러 코드  (0) 2022.09.15
JS 비/정규식 유효성 검사 예제  (0) 2022.09.13