2017-07-08 3 views
0

Je suis en train de travailler uniquement avec Java natif sans utiliser des cadres tels que ressort, renforts métalliques etc.utilisant l'annotation @WebServlet dans le projet java externe

Je construis une application Web en utilisant des servlets et des JSP.

Ma mise en page de projet dans l'explorateur de projet (dans Eclipse): MyApp (projet java), MyAppWEB (projet Web dynamique), MyAppWEBEAR (projet de l'oreille),

Servlet est à l'intérieur du projet MyApp. Jsp est dans le projet MyAppWEB.

Les deux projets ont été ajoutés à EAR. MyApp a été ajouté au manifeste de MyAppWEB en tant que jar dans l'assembly de déploiement.

Et est maintenant le problème: Quand j'utilise @WebServlet («/salut ») au-dessus du nom de la classe de servlet je reçois d'erreur 404.

Mais, si je le servlet à l'intérieur définir web.xml puis tout fonctionne bien (sans l'annotation).

Également si exporter le projet MyApp en tant que jar et le placer dans le dossier WEB-INF/lib sans utiliser web.xml, cela fonctionne également.

Donc, la question est, est-il possible d'utiliser cette annotation dans le projet java (sans exporter manuellement dans jar et mettre dans WEB-INF/lib)?

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>MyAppWEB</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> --> 
<!--  <description></description> --> 
<!--  <display-name>HelloWorldServlet</display-name> --> 
<!--  <servlet-name>HelloWorldServlet</servlet-name> --> 
<!--  <servlet-class>com.MyCom.MyApp.Servlets.HelloWorldServlet</servlet-class> --> 
<!-- </servlet> --> 
<!-- <servlet-mapping> --> 
<!--  <servlet-name>HelloWorldServlet</servlet-name> --> 
<!--  <url-pattern>/Hello</url-pattern> --> 
<!-- </servlet-mapping> --> 
</web-app> 

HelloWorldServlet:

package com.MyCom.MyApp.Servlets; 

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; 

@WebServlet("/hi") 
public class HelloWorldServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public HelloWorldServlet() { 
     super(); 
    } 

    /** 
    * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     request.getRequestDispatcher("/WEB-INF/jsp/HelloWorld.jsp").forward(request, response); 
    } 

} 

HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>MyApp</title> 
</head> 
<body> 
    <h1>Hello World !!</h1> 
</body> 
</html> 

Répondre

0

OK, a obtenu ce cernées. Il semble qu'il soit également nécessaire d'ajouter l'assemblage MyApp.jar au projet de déploiement MyAppWEB, et pas seulement dans les entrées de manifeste. Ceci à son tour mettra le MyApp.jar à WEB-INF/lib automatiquement au déploiement sur le serveur. Maintenant, les annotations fonctionnent très bien.