Tomcat 7을 사용한 @WebServlet 주석
내 응용 프로그램에서 web.xml에 다음 과 같이 정의 된 서블릿이 있습니다 .
<servlet>
<display-name>Notification Servlet</display-name>
<servlet-name>NotificationServlet</servlet-name>
<servlet-class>com.XXX.servlet.NotificationServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NotificationServlet</servlet-name>
<url-pattern>/notification/*</url-pattern>
</servlet-mapping>
Tomcat 7을 사용하기 위해 이동 한 후 @WebServlet
작업을 수행 할 주석 을 사용하고 싶습니다 .
내가 한 방법은 다음과 같습니다.
@WebServlet( name="NotificationServlet", displayName="Notification Servlet", urlPatterns = {"/notification"}, loadOnStartup=1)
public class NotificationServlet extends HttpServlet {
그리고 그것은 작동하지 않습니다. 누군가 내가 뭘 잘못했는지 말해 줄 수 있습니까?
Tomcat 7 이상을 사용하고 있다고 확신하는 web.xml
경우 Tomcat이 주석을 스캔하고 처리하도록 하려면 webapp이 Servlet 3.0 사양을 준수하도록 선언해야합니다. 그렇지 않으면 Tomcat은 .NET의 Servlet 버전과 일치하는 대체 모드에서 계속 실행됩니다 web.xml
. 서블릿 API 주석에 대한 지원은 서블릿 3.0 (Tomcat 7)에서만 추가되었습니다.
그래서, 당신의 루트 선언 web.xml
다음과 같은 필수 모양은 (당신이 어떤 제거 할 DOCTYPE
에서 web.xml
그렇지 않으면도 Servlet 2.3으로 해석됩니다도를!).
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
또한 URL 패턴에 약간의 차이가 있습니다. URL 패턴 /notifications
을 사용하면 서블릿이 정확히 해당 경로의 요청 만 수신 할 수 있습니다. 추가 경로와 같은 요청을 시작하지 않습니다 /notifications/list
. URL 패턴 /notifications/*
을 사용하면 서블릿이 추가 경로 정보로 요청을 수신 할 수도 있습니다.
따라서 최소 @WebServlet
주석은 다음과 같아야합니다.
@WebServlet("/notifications/*")
나머지 속성은 선택 사항이므로 서블릿이 동일하게 작동하도록하기 위해 필수는 아닙니다.
또한보십시오:
같은 이름의 주석이있는 두 개의 클래스가 있는지 확인할 수도 있습니다.
@WebServlet(name = "Foo", urlPatterns = {"/foo"})
public class Foo extends HttpServlet {
//...
}
과:
@WebServlet(name = "Foo", urlPatterns = {"/bar"})
public class Bar extends HttpServlet {
//...
}
이 경우 서블릿 중 하나가 작동하지 않습니다. 이름을 사용하지 않는 경우 @BalusC가 제안하는 것처럼 생략하십시오. 서블릿 중 하나가 변경하고 컴파일 한 직후에만 작동하지만 변경없이 컴파일 한 후에는 작동하지 않는 이상한 동작이 발생했습니다.
또한 이러한 주석을 사용하고 코드를 컴파일하려면 pom.xml에서 해당 종속성을 가져와야하지만 제공된 원인에 따라 "Servlet 3.0"호환 서버에 이미이 항목이 있습니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
참고 URL : https://stackoverflow.com/questions/6535676/webservlet-annotation-with-tomcat-7
'code' 카테고리의 다른 글
Linux 정적 링크가 죽었습니까? (0) | 2020.12.04 |
---|---|
이름이 259 자보다 긴 파일을 처리하는 방법은 무엇입니까? (0) | 2020.12.04 |
주어진 문자열에 주어진 하위 문자열이 포함 된 경우 관용적 스칼라 검색 방법은 무엇입니까? (0) | 2020.12.04 |
자식 MSBuild.exe 프로세스를 성공적으로 시작하거나 연결하지 못했습니다. (0) | 2020.12.04 |
angularjs의 ng-bind에서 필터를 사용한 후 더 많은 텍스트 추가 (0) | 2020.12.04 |