[JAVA/Servlet]Servlet에서 URL맵핑하는 2가지 방법
안녕하세요 미나라이입니다.
이번에는 지난 포스팅에 이어서 서블릿에서 URL을 맵핑하는 방법에 대해서 알아보겠습니다.
프로젝트 환경
OS : Windows 10
IDE : Eclipse 2020-06 (4.16.0)
Java : 8
Jdk Version : 1.8.0_161
WAS : Tomcat 8.5.73
해당 포스팅의 프로젝트 생성에 대한 정보는
아래 포스팅을 참고해 주세요
브라우저에서 URL로 웹 페이지를 접속할 때 주소를 적어야 하죠
이때 맵핑을 하지 않으면 기존의 주소는 이렇게 되어있는 상태가 됩니다.
서버:포트/프로젝트명/servlet/패키지를포함한클래스명
http://localhost:8081/ServletTest1/servlet/com.test.HelloWorld
이렇게 표시가 됩니다.
이렇게 하면 보안에 노출되기 쉽고 너무 길어서 알아보기 불편한 점 등이 생깁니다.
이러한 부분을 보완하기 위해 맵핑 처리를 해줍니다.
어노테이션을 이용한 방법
어노테이션을 이용하는 방법은 서블릿 파일을 생성할 때 디폴트로 설정이 됩니다.
HelloWorld.java
중간에 @ WebServlet("/HWorld")로 정의한 부분이 보이실겁니다.
이렇게 선언 하고 실행을 해 봅시다.
package com.test;
import java.io.IOException;
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 HelloWorld
*/
// 어노테이션 맵핑 방식
@WebServlet("/HWorld")
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello World!");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
실행 후에 어노테이션에 설정한 이름으로 주소를 쳐 보면 아래와 같이 페이지 에러가 안뜬 것을 확인 할 수 있습니다.
브라우저에 아무것도 뜨지 않는 이유는 아무것도 표시하지 않았기 때문입니다.
대신 콘솔창에는 메세지를 띄웠기 때문에 콘솔창을 확인하면 나오는 것을 확인 할 수 있습니다.
web.xml을 이용한 방법
어노테이션을 이용하는 방법 대신에 web.xml에 별도로 정의를 해서 이용하는 방법도 있습니다.
이 경우엔 어노테이션 부분을 주석을 쳐 줍시다.
HelloWorld.java
package com.test;
import java.io.IOException;
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 HelloWorld
*/
// 어노테이션 맵핑 방식(XML에서 설정했을 경우 주석처리)
//@WebServlet("/HWorld")
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Hello World!");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
web.xml
아래와 같이 선언 해 줘봅시다.
먼저 맵핑 대상 클래스를 찾아서 이름을 만들어주고
이름을 변환 해 주면 됩니다.
저는 /hw로 일단 변환 해 보았습니다.
변환 후 프로그램을 실행하고 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_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ServletTest1</display-name>
<!-- 해당 부분은 디폴트로 생성되니 무시 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 서블릿 문서 설정 -->
<servlet>
<!-- 임의의 이름 -->
<servlet-name>helloworld</servlet-name>
<!-- 서블릿 문서 위치 -->
<servlet-class>com.test.HelloWorld</servlet-class>
</servlet>
<!-- 맵핑 작업 -->
<servlet-mapping>
<!-- 서블릿 문서 작성시 설정한 서블릿 이름 -->
<servlet-name>helloworld</servlet-name>
<!-- 맵핑을 할 주소 -->
<url-pattern>/hw</url-pattern>
</servlet-mapping>
</web-app>
해당 주소로 이동하니 페이지 에러가 없이 잘 뜨는 것을 확인 할 수 있습니다.
콘솔창에 출력된 값을 보면 해당 클래스를 잘 접근한 것을 볼 수 있습니다.
이상으로 간단하게 서블릿에서 URL을 맵핑하는 방법에 대해서 알아보았습니다.
'Java&JSP&Spring > JSP&Servlet' 카테고리의 다른 글
[JAVA/Servlet]Servlet의 작동 순서 (0) | 2022.01.22 |
---|---|
[WAS/Tomcat]컨텍스트 패스(Context Path)란 무엇인가? (0) | 2022.01.22 |
[JAVA/Servlet]Servlet간단하게 만들고 실행해보기 (0) | 2022.01.16 |
[JAVA/JSP]JSP파일의 아키텍처 (0) | 2022.01.16 |
[JAVA/JSP]JSP간단하게 만들고 실행해보기 (1) | 2022.01.16 |