2017-07-08 72 views
0

使用@WebServlet標註我試圖與本地Java不使用框架如春才起作用,支撐件等在外部Java項目

我建立使用servlet和JSP的Web應用程序。

我的項目佈局,項目資源管理器(在Eclipse): MyApp的(Java項目), MyAppWEB(動態Web項目), MyAppWEBEAR(EAR項目),

Servlet是MyApp項目內。 Jsp位於MyAppWEB項目中。

兩個項目都添加到了EAR。 MyApp作爲部署程序集中的jar添加到MyAppWEB的清單中。

而現在的問題是: 當我使用@WebServlet(「/ HI」)servlet類的名字,我得到錯誤404

上述但是,如果我定義web.xml中該servlet然後一切正常罰款(沒有註釋)。

此外,如果將MyApp項目導出爲jar並將其放入WEB-INF/lib文件夾 而不使用web.xml,那麼它也可以正常工作。

所以問題是,是否有可能在java項目中使用此批註(無需手動導出到jar並放入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> 

回答

0

OK,得到這個想通了。 似乎還需要將MyApp.jar添加到MyAppWEB項目的部署程序集,而不僅僅是在清單條目中。這反過來會將MyApp.jar放在WEB-INF/lib上,並自動部署到服務器上。 現在註釋工作得很好。