Eclipse新建Servlet時候,不會自動生成mapping到web.xml,而是在代碼中加入注解@WebServlet


現象:

用Eclipse新版本新建servlet時候,發現創建Servlet后,Eclipse不會自動在web.xml中生成該Servlet對應的mapping信息,而是在Servlet代碼中加入注解@WebServlet,如下

 

 

分析:

查找文檔發現,這是Servlet3.0新特性(得Tomcat7.0版本及以上),@WebServlet 用於將一個類聲明為 Servlet,該注解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為 Servlet。該注解具有下表給出的一些常用屬性(以下所有屬性均為可選屬性,但是 value 或者 urlPatterns 通常是必需的,且二者不能共存,如果同時指定,通常是忽略 value 的取值)

 

 

解決方法:

在@WebServlet 中定義Servlet的name、urlPatterns等信息

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

@WebServlet(
displayName = "This is Login Action", //描述
name = "LoginAction", //servlet名稱
urlPatterns = { "/servlet/LoginAction" },//url
loadOnStartup = 1, //啟動項
initParams = { @WebInitParam(name = "username", value = "張三") }//初始化參數
)
public class LoginAction extends HttpServlet {
/**
* Constructor of the object.
*/
public LoginAction() {
super();
}
}

Servlet的訪問URL是Servlet的必選屬性,可以選擇使用urlPatterns或者value定義。
  像上面的LoginAction可以描述成@WebServlet(name="LoginAction",value="/LoginAction")。
  也定義多個URL訪問:
  如@WebServlet(name="LoginAction",urlPatterns={"/LoginAction","/LoginAction2"})
  或者@WebServlet(name="LoginAction",value={"/LoginAction","/LoginAction2"})

這樣的簡化形式也可以,相當於設置了name和urlPattern

@WebServlet("/servlet/LoginAction")

在新建Servlet時候在URL mapping中可以直接輸入

 

但是,我要是非要使用web.xml呢?

沒錯,我確實有病

如果你一定這么做的話,你就會發現你的eclipse在建項目的時候八成就沒給你建web.xml文件

一般來說想要這個文件就要在建項目的時候勾選,generate web.xml deployment descriptor

 

 但是,我已經建好項目了總不能重建吧,沒問題

在eclipse中創建Web項目中沒有web.xml的解決方法其實也很簡單

右鍵點擊項目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件

雖然這樣做確實會建立web.xml,但是她在我這里卻出了一些問題,我控制台中運行項目的Server消失了,新建的時候卻不能使用相同的名字。

我只好先將原來的Sever move掉 ,在add一個新的進來,不清楚是不是我新加web.xml的原因。

 

感謝:https://www.cnblogs.com/xww115/p/10813946.html

  https://www.cnblogs.com/Dearmyh/p/10989656.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM