Servlet3.0下配置Servlet
生活随笔
收集整理的這篇文章主要介紹了
Servlet3.0下配置Servlet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從Servlet3.0開始,配置的Servlet的支持注解方式,但還是保留了配置的web.xml文件方式,所有使用的Servlet的有兩種方式:
第一種:Servlet的的類使用@WebServlet注解進行配置
@WebServlet常用屬性
| asyncSupported | 布爾 | 否 | 指定的Servlet的是否支持異步操作模式 |
| 顯示名稱 | 串 | 否 | 指定的Servlet的顯示名稱 |
| initParams在在 | WebInitParam [] | 否 | 配置初始化參數 |
| loadOnStartup | INT | 否 | 標記容器是否在應用啟動時就加載這個Servlet的的 |
| 名稱 | 串 | 否 | 指定的Servlet的名稱 |
| URL模式/值 | 串[] | 否 | 這兩個屬性作用相同,指定的Servlet的處理的URL |
1.測試代碼:
import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;// 通過@WebServlet注解配置 @WebServlet( name = "myUserServlet",? ?urlPatterns = "/user/test",? ?// url映射loadOnStartup = 1,? ??initParams = {? // 參數初始化@WebInitParam(name="name", value="小明"),? ?@WebInitParam(name="pwd", value="123456")??}?? )??public class UserServlet extends HttpServlet {??private static final long serialVersionUID = 7109220574468622594L;??// 覆蓋重寫含參init(ServletConfig config)方法@Override??public void init(ServletConfig config) throws ServletException {??// 調用父類init(ServletConfig config)方法初始化,web容器同時創建內部ServletConfig對象 super.init(config);??System.out.println("servlet初始化...");??}??@Override??protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {??response.setContentType("text/html");??response.setCharacterEncoding("utf-8");??PrintWriter out = response.getWriter();??out.append("Hello Servlet!<br>" );??// 獲取初始化時的 servletName??out.append("servletName:" + getServletName() + "<br>");??// 獲取初始化時設置的參數 initParamServletConfig servletConfig = this.getServletConfig();??Enumeration<String> paramNames = servletConfig.getInitParameterNames();??while (paramNames.hasMoreElements()) {??String paramName = paramNames.nextElement();??out.append(paramName + ":" + servletConfig.getInitParameter(paramName) + "<br>");??}??out.close();??}??@Override??protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {??doGet(request, response);??}?? }?2.測試結果
????2.1應用啟動時,小服務程序就會初始化,因為配置了loadOnStartup = 1
????2.2訪問/用戶/測試,頁面上顯示結果;表名參數正確初始化以及自定義的小服務程序名稱
3.注
(1).loadOnStartup屬性:標記容器是否在啟動應用時就加載Servlet中,默認不配置或數值為負數時表示客戶端第一次請求的Servlet時再加載; 0或正數表示啟動應用就加載,正數情況下,數值越小,加載該Servlet的的優先級越高; (2)。名稱屬性:可以指定也可以不指定,通過getServletName()可以獲取到,若不指定,則為的Servlet的完整類名,如:cn.edu.njit.servlet.UserServlet (3).urlPatterns / value屬性:String []類型,可以配置多個映射,如:urlPatterns = {“/ user / test”,“/ user / example”} (4)在使用注解方式時,需要注意:- <web-app> </web-app>根元素中不能配置屬性metadata-complete="true",否則無法加載Servlet。metadata-complete屬性表示通知Web容器是否尋找注解,默認不寫或者設置false,容器會掃描注解和Web分片,為Web應用程序構建有效的元數據;設置true,表示將由部署描述符為Web程序提供所有的配置信息
- web.xml中不能再配置該Servlet
- /*或者/:攔截所有
- *.do:攔截指定后綴
- /user/test:攔截路徑
- /user/*.do、/*.do、test*.do都是非法的,啟動時候會報錯
第二種:使用WEB-INF/web.xml進行配置
web.xml以 Tomcat安裝目錄下的conf/web.xml為母版生成:
tomcat/conf/web.xml大致內容如下(中間省去大量注釋和MIME配置信息):
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1">// servlet配置<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>// 參數初始化<init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param>// 啟動加載(0-n, 越小優先級越高)<load-on-startup>1</load-on-startup></servlet><servlet><servlet-name>jsp</servlet-name><servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class><init-param><param-name>fork</param-name><param-value>false</param-value></init-param><init-param><param-name>xpoweredBy</param-name><param-value>false</param-value></init-param><load-on-startup>3</load-on-startup></servlet>// servlet訪問url映射<servlet-mapping><servlet-name>default</servlet-name><url-pattern>/</url-pattern></servlet-mapping><servlet-mapping><servlet-name>jsp</servlet-name><url-pattern>*.jsp</url-pattern><url-pattern>*.jspx</url-pattern></servlet-mapping>// 會話配置,更多詳細參數,參考源文件注釋部分<session-config><session-timeout>30</session-timeout> //30 minutes</session-config>// 剩下的近4000多行都為 <!-- ===================== Default MIME Type Mappings =================== --><!-- When serving static resources, Tomcat will automatically generate --><!-- a "Content-Type" header based on the resource's filename extension, --><!-- based on these mappings. Additional mappings can be added here (to --><!-- apply to all web applications), or in your own application's web.xml --><!-- deployment descriptor. --><!-- Note: Extensions are always matched in a case-insensitive manner. --><mime-mapping><extension>123</extension><mime-type>application/vnd.lotus-1-2-3</mime-type></mime-mapping>*****************4000多行// web默認首頁配置<!-- ==================== Default Welcome File List ===================== --><!-- When a request URI refers to a directory, the default servlet looks --><!-- for a "welcome file" within that directory and, if present, to the --><!-- corresponding resource URI for display. --><!-- If no welcome files are present, the default servlet either serves a --><!-- directory listing (see default servlet configuration on how to --><!-- customize) or returns a 404 status, depending on the value of the --><!-- listings setting. --><!-- --><!-- If you define welcome files in your own application's web.xml --><!-- deployment descriptor, that list *replaces* the list configured --> ? <!-- here, so be sure to include any of the default values that you wish? --><!-- to use within your application.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>兩種方式優先級問題:
?使用的web.xml中配置的優先級要高于使用注解@WebServlet。
Servlet的的名稱的默認為創建時的類名,但當要給名稱屬性重新賦值時,要想使的web.xml文件中關于該Servlet的的配置的信息有效,需要明確指定@WebServlet中的名稱值,否則的web.xml文件中的配置將變得無效。
即web.xml文件中就是已通過的Servlet的名字來確定與之對應的Servlet的的類。
總結
以上是生活随笔為你收集整理的Servlet3.0下配置Servlet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java计算一个字符串的HashCode
- 下一篇: CAS教程-第一篇-CAS单点登录原理解