Java Web編程之Servlet技巧詳解。本站提示廣大學習愛好者:(Java Web編程之Servlet技巧詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Web編程之Servlet技巧詳解正文
Java Web編程之Servlet技巧,知若干?
1、Servlet基本
針對Servlet技巧開辟,Sun公司供給了一些列接口和類,個中最主要的是javax.servlet.Servlet接口,兩個主要的包是javax.servlet和javax.servlet.http,Servlet就是一種完成了Servlet接口的類,它由Web容器(Tomcat/Jetty等)擔任挪用並創立,用於吸收和呼應用戶要求。Servlet接口中界說了5個籠統辦法:
Servlet頂層類構造以下所示:
2、第一個Servlet法式
新建一個Java Web工程,然後新建Hello類,Hello.java源碼以下:
package zzz; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("Hello World"); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
設置裝備擺設文件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>zzz</display-name> <servlet> <!-- 注冊Servlet --> <servlet-name>Hello</servlet-name> <!-- 指定Servlet稱號 --> <servlet-class>zzz.Hello</servlet-class> <!-- 指定Servlet完全類名 --> </servlet> <servlet-mapping> <!-- 映照Servlet對外拜訪途徑 --> <servlet-name>Hello</servlet-name> <!-- 指定Servlet稱號 --> <url-pattern>/hello</url-pattern> <!-- 指定拜訪Servlet的虛擬途徑 --> </servlet-mapping> </web-app>
啟動運轉閱讀器顯示以下:
3、Servlet性命周期
Servlet性命周期年夜致分為3個階段,初始化階段、運轉階段和燒毀階段。以下是各個階段具體解釋:
初始化階段:客戶端向Servlet容器收回要求拜訪Servlet時,容器起首解析要求,檢查內存中能否有該Servlet對象,假如有直接應用;不然創立該Servlet對象,然後挪用init()辦法,留意,Servlet全部聲明周期中,init()只會挪用一次
運轉階段:這個是Servlet最主要的階段,此階段容器會結構一個ServletRequest和ServletResponse對象作為參數傳遞到Servlet的service()辦法中。關於Servlet的每次拜訪,Servlet容器都邑挪用一次service()辦法,service()辦法在Servlet全部性命周期中會被挪用屢次
燒毀階段:當辦事器封閉或許Web運用被移除出容器時,會進入到此階段,此時會挪用destroy()辦法,全部性命周期中destroy()辦法只會被挪用一次
在客戶端初次拜訪Servlet時,容器會創立該Servlet對象,然則有時願望Servlet對象在Tomcat啟動時追隨啟動,這怎樣處置呢?此時,只須要在web.xml中應用<load-on-startup>元素便可,示例設置裝備擺設以下:
<servlet> <servlet-name>Hello</servlet-name> <servlet-class>zzz.Hello</servlet-class> <!-- 主動加載servlet法式 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
4、ServletConfig和ServletContext
ServletConfig接口
Servlet運轉時代,假如須要一些幫助信息,例如文件編碼、應用Servlet的公司等,這些信息可以在web.xml中應用<init-param>元素停止設置裝備擺設,當Tomcat初始化一個Servlet時,會將該Servlet設置裝備擺設信息封裝成一個ServletConfig對象經由過程init(ServletConfig config)傳遞到Servlet。ServletConfig界說了一系列獲得設置裝備擺設信息的辦法:
接上去以getInitParameter()為例,講授該辦法應用示例:
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>zzz</display-name> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>zzz.Hello</servlet-class> <init-param> <param-name>company</param-name> <param-value>dahua</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
Hello.java文件以下:
package zzz; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); ServletConfig config = this.getServletConfig(); String param = config.getInitParameter("company"); out.println("company: " + param); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
ServletContext接口
當Servlet容器啟動時,會為每個Web運用創立一個獨一的ServletContext對象代表以後Web運用,該對象不只封裝了該Web運用的一切信息,並且完成了多個Servlet對象間的數據同享。在web.xml中不只可以設置裝備擺設Servlet的初始化信息,還可以設置裝備擺設全部Web運用的初始化信息,設置裝備擺設方法以下所示:
<context-param> <param-name>name</param-name> <param-value>luoxn28</param-value> </context-param> <context-param> <param-name>company</param-name> <param-value>dahua</param-value> </context-param>
留意:一個<context-param>元素裡只能有一個<param-name>和<param-value>,下面的設置裝備擺設在web.xml中<web-app>下設置裝備擺設。Hello.java文件以下:
package zzz; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 設置呼應新聞編碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); ServletContext context = this.getServletContext(); Enumeration<String> paramNames = context.getInitParameterNames(); while (paramNames.hasMoreElements()) { String name = paramNames.nextElement(); String value = context.getInitParameter(name); out.println(name + ": " + value + "<br/>"); } } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { this.doGet(request, response); } }
因為一個Web運用中一切Servlet同享一個ServletContext對象,所以ServletContext對象的域屬性可以被Web運用中一切的Servlet拜訪。在ServletContext接口中界說了分離增長、刪除、設置ServletContext域屬性的4個辦法:
經由過程以上辦法便可以完成多個Servlet間同享數據,這個詳細實例就不貼代碼了,網上可參考的材料許多,好比可以點擊:
javaweb Servlet開辟總結(二)
以上就是本文的全體內容,願望對年夜家懂得Java Web的Servlet技巧有所贊助。
參考材料
1、《Java Web法式開辟入門》Servlet技巧章節