程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java Web編程之Servlet技巧詳解

Java Web編程之Servlet技巧詳解

編輯:關於JAVA

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技巧章節

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved