JAVA记录-Servlet介绍

1.什么是Servlet

Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。

Servlet可以通过多种方式进行描述,具体取决于上下文。

  • Servlet是一种用于创建Web应用程序的技术。
  • Servlet是一个API,它提供了许多接口和类,包括文档。
  • Servlet是一个必须实现的接口,用于创建任何servlet。
  • Servlet是一个扩展服务器功能并响应传入请求的类。它可以响应任何类型的请求。
  • Servlet是部署在服务器上的Web组件,用于创建动态网页。

2.Servlet运行过程

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象。 
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。 

Web容器维护servlet实例的生命周期。下面来看看servlet的生命周期,主要分为以下几个步骤:

  1. 加载Servlet类,如前面小节中的示例代码:MyServlet.java
  2. 创建Servlet实例。
  3. 调用Servlet类的init方法。
  4. 调用Servlet类的service方法。
  5. 调用Servlet类的destroy方法。

模型流程图如下所示 -

如上图所示,servlet有三种状态:新,就绪和结束。 如果servlet实例被创建,则servlet处于新状态。 调用init()方法后,Servlet进入就绪状态。 在就绪状态下,servlet执行所有任务。当web容器调用destroy()方法时,它转移到结束状态。

1.加载Servlet类

类加载器负责加载servlet类。 当Web容器接收到servlet的第一个请求时,将加载servlet类。

2.创建Servlet实例

Web容器在加载servlet类之后创建一个servlet的实例。servlet实例在servlet生命周期中只创建一次。

3.调用init方法

Web容器在创建servlet实例后调用init方法一次。 init方法用于初始化servlet。 它是javax.servlet.Servlet接口的生命周期方法。init方法的语法如下:

public void init(ServletConfig config) throws ServletException

4.调用service方法

每当接收到servlet的请求时,Web容器都会调用service方法。如果servlet未初始化,则遵循上述前三个步骤,然后调用service方法。 如果servlet被初始化,它调用service方法。 请注意,servlet仅初始化一次。 Servlet接口的service方法的语法如下:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException 
Java

5.调用destroy方法

从服务中删除servlet实例之前,Web容器调用destroy方法。它使servlet有机会清理所有资源,例如内存,线程等。Servlet接口的destroy方法的语法如下:

public void destroy() 
Java

架构图

下图描述了一个典型的servlet生命周期场景。

  • 首先将来到服务器的HTTP请求委托给servlet容器。
  • servlet容器在调用service()方法之前加载servlet。
  • 然后,servlet容器通过产生多个线程来处理多个请求,每个线程执行servlet的单个实例的service()方法。

要创建war文件,需要使用JDK的jar工具,可使用jar 和-c选项来创建war文件。

进入项目的目录(WEB-INF外部),然后写入以下命令:

jar -cvf projectname.war *
Shell

这里,-c用于创建文件-v生成详细输出,-f用于指定war文件名。

*(星号)符号表示此目录的所有文件(包括子目录)。

使用Eclipse导出War文件

在项目名称上点击右键,选择:Export->War File

在web.xml文件中指定启动时加载

如果load-on-startup元素值为正,则会在Web应用程序部署或服务器启动时加载servlet。 它也被称为servlet的预初始化。

可以指定传递servlet的值(load-on-startup元素指定的值)为正或为负。

load-on-startup元素的优点

servlet在第一个请求时被加载。这意味着它会在第一次请求时消耗更多的时间。 如果在web.xml中指定启动加载,则servlet将在项目部署时间或服务器启动时加载。 所以,响应第一个请求需要较少的时间。

下面来看一个简单的web.xml配置load-on-startup元素的示例代码 -

<?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>helloworld</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>home.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>com.yiibai.MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>com.yiibai.BServlet</servlet-name> <servlet-class>BServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/index</url-pattern> </servlet-mapping> </web-app> 
XML

定义了2个servlet,这两个servlet将在项目部署或服务器启动时加载。但是,首先将MyServlet加载,然后再加载BServlet

传递负值

如果传递load-on-startup元素为负值,则此servlet将请求时第一个加载

ServletRequest接口

ServletRequest的对象用于向Servlet提供客户端请求信息,如内容类型,内容长度,参数名称和值,标题信息,属性等。

ServletRequest接口的方法

ServletRequest接口中定义了很多方法。 其中一些如下:

编号方法描述
1public String getParameter(String name)用于通过名称获取参数的值。
2public String[] getParameterValues(String name)返回一个包含给定参数名称的所有值的String数组。它主要用于获取多选列表框的值。
3java.util.Enumeration getParameterNames()返回所有请求参数名称的枚举。
4public int getContentLength()返回请求实体数据的大小,如果未知则返回-1
5public String getCharacterEncoding()返回此请求输入的字符集编码。
6public String getContentType()返回请求实体数据的网络媒体类型,如果未知则返回null
7public ServletInputStream getInputStream() throws IOException返回用于读取请求正文中二进制数据的输入流。
8public abstract String getServerName()返回接收请求的服务器的主机名。
9public int getServerPort()返回接收到此请求的端口号。

ServletRequest显示用户名称的示例

在这个例子中,在servlet中显示用户提交上来的名字。这里使用getParameter()方法返回指定请求参数名称的值。

打开Eclipse,创建一个名称为:ServletRequest 的动态Web网站项目,项目的目录结构如下 -

关键代码如下 -

ServletRequest.java -

package com.yiibai;import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletRequest */ public class ServletRequest extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // response.getWriter().append("Served at: ").append(request.getContextPath()); response.setContentType("text/html"); PrintWriter pw = response.getWriter(); String name = request.getParameter("name");// will return value if (name == null || name == "") { name = ""; } pw.println("Welcome " + name); pw.close(); } } 
Java

index.html 

<!DOCTYPE html>
<html> <head> <meta charset="UTF-8"> <title>Welcome - ServletRequest</title> </head> <body> <div style="text-align: center;"> <form action="/ServletRequest/welcome"> 名字:<input type="text" name="name"><input type="submit" value="提交"> </form> </div> </body> </html> 
HTML

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>ServletRequest</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ServletRequest</servlet-name> <servlet-class>com.yiibai.ServletRequest</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletRequest</servlet-name> <url-pattern>/welcome</url-pattern> </servlet-mapping> </web-app>

3.Web.xml配置

  <servlet><!-- 声明Servlet对象 --><servlet-name>FirstServlet</servlet-name><!-- 上面一句指定Servlet对象的名称 --><servlet-class>com.net.xinfang.servlet.FirstServlet</servlet-class><!-- 上面一句指定Servlet对象的完整位置,包含包名和类名 --></servlet><servlet-mapping><!-- 映射Servlet --><servlet-name>FirstServlet</servlet-name><!--<servlet-name>与上面<Servlet>标签的<servlet-name>元素相对应,不可以随便起名  --><url-pattern>/FirsetServlet</url-pattern><!-- 上面一句话用于映射访问URL --></servlet-mapping>

4.Servlet常用方法

  • init():初始化方法
  • getServletConfig():可以得到一个ServletConfig对象,利用这个参数可以得到初始化参数
  • service():servlet对于请求的一个响应
  • getServletInfo():返回servlet的相关信息
  • destroy():销毁Servlet。

5.实例

import java.io.IOException;
import java.io.PrintWriter;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("/FirstServlet")
public class FirstServlet extends HttpServlet {private static final long serialVersionUID = 1L;public FirstServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");response.setCharacterEncoding("GBK");PrintWriter out=response.getWriter();out.print("<HTML>");out.println("<HEAD><TITLE>Servlet实例</TITLE></HEAD>");out.println("<BODY>");out.println("servlet实例");out.println(this.getClass());out.println("</BODY>");out.println("</HTML>");out.flush();out.close();response.getWriter().append("Served at: ").append(request.getContextPath());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

6.访问  

http://192.168.66.66:8089/xinfang/FirstServlet

 

一、javax.servlet.Servlet接口 
servlet抽象集是javax.servlet.Servlet接口,它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。 
Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。 
servlet接口中的方法        
void init(ServletConfit config)throws ServletException     在servlet被载入后和实施服务前由servlet引擎进行?次性调用。如果init()产生溢出UnavailableException,则servle退出服务。        
ServletConfig getServletConfig()     返回传递到servlet的init()方法的ServletConfig对象        
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException     处理request对象中描述的请求,使用response对象返回请求结果        
String getServletInfo()         返回描述servlet的一个字符串        
void destory()         当servlet将要卸载时由servlet引擎调用      
二、javax.servlet.GenericServlet类(协议无关版本) 
GenericServlet是一种与协议无关的servlet,是一种跟本不对请求提供服务的servlet,而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。 
servlet API提供了Servlet接口的直接实现,称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。 
除了Servlet接口外,GenericServlet也实现了ServletConfig接口,处理初始化参数和servlet上下文,提供对授权传递到init()方法中的ServletConfig对象的方法。 
GenericServlet类中的方法        
void destory()     编飞组成单词“destory”的一个注册入口        
String getInitParameter(String name)     返回具有指定名称的初始化参数值。通过凋用config.getInitParameter(name)实现。        
Enumeration getInitParameterNames()     返回此serv]et已编码的所有初始化参数的?个枚举类型值。调用config.getInitParameterNames()获得列表。如果未提供初始化参数,则返回?个空的枚举类型值(但不是null)        
ServletConfig getServletConfig()     返回传递到init()方法的ServletConfig对象        
ServletContext getServletContext()     返回在config对象中引用的ServletContext        
String getServletInfo()     返回空字符串        
void init(ServletConfig config)throws ServletException     在一实例变量中保存config对象。编写组成单词“init”的注册入口,然后调用方法init()        
void init()throws ServletException     可以被跳过以处理servlet初始化.在config对象被保存后init(ServletConfig config)的结尾处自动被调用.servlet作者经常会忘记调用super.init(config)         
void log(String msg)     编写注册servlet的入口.为此调用servlet上下文的log()方法.servlet的名字被加到消息文本的开头。        
void log(String msg,Throwable t)     编写一个入口和servlet注册的栈轨迹。此方法也是ServletContext中相应方法的一个副本。        
abstract void service(Request request,Response response)throws ServletException,IOException     由servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法。        
String getServletName()     返回在Web应用发布描述器(web.xml)中指定的servlet的名字。      
三、javax.servlet.http.HttpServlet类(HTTP版本) 
虽然servlet API允许扩展到其它协议,但最终所有的servlet均在Web环境下实施操作,只有几种servlet直接扩展了GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet。 
HttpServlet类通过调用指定到HTTP请求方法的方法实现service(),亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和TRACE,分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和doTrace()方法,将请求和响应对象置入其HTTP指定子类。 

  
HttpServlet类中的方法        
Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。        
Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和response对象的输出流中获得。        
Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP PUT请求。本方法中请求URI指出被载入的文件位置。        
Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP DELETE请求。请求URI指出资源被删除。        
Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现规范所需的功能。        
Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     由servlet引擎调用用处理一个HTTP TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法,因为HttpServlet方法已经实现HTTP规范所需的功能。        
Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException     Service(Request request,Response response)调用的一个立即方法,带有指定HTTP请求和响应。此方法实际上将请求导向doGet()、doPost()等等。不应该覆盖此方法。        
Void service(Request request,Response response)throws ServletException,IOException     将请求和响应对象置入其指定的HTTP子类,并调用指定HTTP的service()方法。      
四、javax.servlet.ServletRequest类(协议无关版本) 
ServletRequest接口封装了客户端请求的细节。它与协议无关,并有一个指定HTTP的子接口。 
ServletRequest主要处理: 
1.找到客户端的主机名和IP地址 
2.检索请求参数 
3.取得和设置属性 
4.取得输入和输出流 

ServletRequest类中的方法        
Object getAttribute(String name)     返回具有指定名字的请求属性,如果不存在则返回null。属性可由servlet引擎设置或使用setAttribute()显式加入。        
Enumeration getAttributeName()     返回请求中所有属性名的枚举。如果不存在属性,则返回一个空的枚举。        
String getCharacteEncoding()     返回请求所用的字符编码。        
Int getContentLength()     指定输入流的长度,如果未知则返回-1。        
ServletInputStream getInputStream()throws IOException     返回与请求相关的(二进制)输入流。可以调用getInputStream()或getReader()方法之一。        
String getParameter(String name)     返回指定输入参数,如果不存在,返回null。        
Enumeration getParameterName()     返回请求中所有参数名的一个可能为空的枚举。        
String[] getParameterValues(String name)     返回指定输入参数名的取值数组,如果取值不存在则返回null。它在参数具有多个取值的情况下十分有用。        
String get Protocol()     返回请求使用协议的名称和版本。        
String getScheme()     返回请求URI的子串,但不包含第一个冒号前的内容。        
String getServerName()     返回处理请求的服务器的主机名。        
String getServerPort()     返回接收主机正在侦听的端口号。        
BufferedReader getReader()throws IOException     返回与请求相关输入数据的一个字符解读器。此方法与getInputStream()只可分别调用,不能同时使用。        
String getRemoteAddr()     返回客户端主机的数字型IP地址。        
String getRemoteHost()     如果知道,返回客户端主机名。        
void setAttribute(String name,Object obj)     以指定名称保存请求中指定对象的引用。        
void removeAttribute(String name)     从请求中删除指定属性        
Locale getLocale()     如果已知,返回客户端的第一现场或者为null。        
Enumeration getLocales()     如果已知,返回客户端的第一现场的一个枚举,否则返回服务器第一现场。        
boolean isSecure()     如果请求使用了如HTTPS安全隧道,返回true        
RequestDispatcher getRequestDispatcher(String name)     返回指定源名称的RequsetDispatcher对象。      
五、javax.servlet.http.HttpServletRequest接口(HTTP版本) 
HttpServletRequest类主要处理: 
1.读取和写入HTTP头标 
2.取得和设置cookies 
3.取得路径信息 
4.标识HTTP会话。 

HttpServletRequest接口中的方法        
String getAuthType()     如果servlet由一个鉴定方案所保护,如HTTP基本鉴定,则返回方案名称。        
String getContextPath()     返回指定servlet上下文(web应用)的URL的前缀。        
Cookie[] getCookies()     返回与请求相关cookie的一个数组。        
Long getDateHeader(String name)     将输出转换成适合构建Date对象的long类型取值的getHeader()的简化版。        
String getHeader(String name)     返回指定的HTTP头标指。如果其由请求给出,则名字应为大小写不敏感。        
Enumeration getHeaderNames()     返回请求给出的所有HTTP头标名称的权举值。        
Enumeration getHeaders(String name)     返回请求给出的指定类型的所有HTTP头标的名称的枚举值,它对具有多取值的头标非常有用。        
int getIntHeader(String name)     将输出转换为int取值的getHeader()的简化版。        
String getMethod()     返回HTTP请求方法(例如GET、POST等等)        
String getPathInfo()     返回在URL中指定的任意附加路径信息。        
String getPathTranslated()     返回在URL中指定的任意附加路径信息,被子转换成一个实际路径。        
String getQueryString()     返回查询字符串,即URL中?后面的部份。        
String getRemoteUser()     如果用户通过鉴定,返回远程用户名,否则为null。        
String getRequestedSessionId()     返回客户端的会话ID        
String getRequestURI()     返回URL中一部分,从“/”开始,包括上下文,但不包括任意查询字符串。        
String getServletPath()     返回请求URI上下文后的子串        
HttpSession getSession()     调用getSession(true)的简化版。        
HttpSession getSession(boolean create)     返回当前HTTP会话,如果不存在,则创建一个新的会话,create参数为true。        
Principal getPrincipal()     如果用户通过鉴定,返回代表当前用户的java.security.Principal对象,否则为null。        

boolean isRequestedSessionIdFromCookie()     如果请求的会话ID由一个Cookie对象提供,则返回true,否则为false。        
boolean isRequestedSessionIdFromURL()     如果请求的会话ID在请求URL中解码,返回true,否则为false        
boolean isRequestedSessionIdValid()     如果客户端返回的会话ID仍然有效,则返回true。        
Boolean isUserInRole(String role)     如果当前已通过鉴定用户与指定角色相关,则返回true,如果不是或用户未通过鉴定,则返回false。      
六、javax.servlet.ServletResponse接口(协议无关版本) 
ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器,它由servlet引擎创建. 

ServletResponse接口中的方法        
void flushBuffer()throws IOException     发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送,调用此方法发送状态行和响应头标,以确认请求。        
int getBufferSize()     返回响应使用的缓存大小。如果缓存无效则返加0。        
String getCharacterEncoding()     返回响应使用字符解码的名字。除非显式设置,否则为ISO-8859-1        
Locale getLocale()     返回响应使用的现场。除非用setLocale()修改,否则缺省为服务器现场。        
OutputStream getOutputStream()throws IOException     返回用于将返回的二进制输出写入客户端的流,此方法和getWrite()方法二者只能调用其一。        
Writer getWriter()throws IOException     返回用于将返回的文本输出写入客户端的一个字符写入器,此方法和getOutputStream()二者只能调用其一。        
boolean isCommitted()     如果状态和响应头标已经被发回客户端,则返回true,在响应被确认后发送响应头标毫无作用。        
void reset()     清除输出缓存及任何响应头标。如果响应已得到确认,则引发事件IllegalStateException。        
void setBufferSize(int nBytes)     设置响应的最小缓存大小。实际缓存大小可以更大,可以通过调用getBufferSize()得到。如果输出已被写入,则产生IllegalStateException。        
void setContentLength(int length)     设置内容体的长度。        
void setContentType(String type)     设置内容类型。在HTTP servlet中即设置Content-Type头标。        
void setLocale(Locale locale)     设置响应使用的现场。在HTTP servlet中,将对Content-Type头标取值产生影响。      
七、javax.servlet.http.HttpServletResponse接口(HTTP版本) 
HttpServletResponse加入表示状态码、状态信息和响应头标的方法,它还负责对URL中写入一Web页面的HTTP会话ID进行解码。 

HttpServletResponse接口中的方法        
void addCookie(Cookie cookie)     将一个Set-Cookie头标加入到响应。        
void addDateHeader(String name,long date)     使用指定日期值加入带有指定名字(或代换所有此名字头标)的响应头标的方法。        
void setHeader(String name,String value)     设置具有指定名字和取值的一个响应头标。        
void addIntHeader(String name,int value)     使用指定整型值加入带有指定名字的响应头标(或代换此名字的所有头标)。        
boolean containsHeader(String name)     如果响应已包含此名字的头标,则返回true。        
String encodeRedirectURL(String url)     如果客户端不知道接受cookid,则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其他被编码的URLs应被传递到encodeURL()        
String encodeURL(String url)            
void sendError(int status)     设置响应状态码为指定值(可选的状态信息)。HttpServleetResponse定义了一个完整的整数常量集合表示有效状态值。        
void sendError(int status,String msg)            
void setStatus(int status)     设置响应状态码为指定指。只应用于不产生错误的响应,而错误响应使用sendError()。      
八、javax.servlet.ServletContext接口 
一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字(它属于Web应用的名字)唯一映射到文件系统的一个目录。 
一个servlet可以通过ServletConfig对象的getServletContext()方法得到servlet上下文的引用,如果servlet直接或间接调用子类GenericServlet,则可以使用getServletContext()方法。 
Web应用中servlet可以使用servlet上下文得到: 
1.在调用期间保存和检索属性的功能,并与其他servlet共享这些属性。 
2.读取Web应用中文件内容和其他静态资源的功能。 
3.互相发送请求的方式。 
4.记录错误和信息化消息的功能。 

ServletContext接口中的方法        
Object getAttribute(String name)     返回servlet上下文中具有指定名字的对象,或使用已指定名捆绑一个对象。从Web应用的标准观点看,这样的对象是全局对象,因为它们可以被同一servlet在另一时刻访问。或上下文中任意其他servlet访问。        
void setAttribute(String name,Object obj)     设置servlet上下文中具有指定名字的对象。        
Enumeration getAttributeNames()     返回保存在servlet上下文中所有属性名字的枚举。        
ServletContext getContext(String uripath)     返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以“/”开头的绝对路径。        
String getInitParameter(String name)     返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一样,后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。        
Enumeration getInitParameterNames()     返回(可能为空)指定上下文范围的初始化参数值名字的枚举值。        
int getMajorVersion()     返回此上下文中支持servlet API级别的最大和最小版本号。        
int getMinorVersion()            
String getMimeType(String fileName)     返回指定文件名的MIME类型。典型情况是基于文件扩展名,而不是文件本身的内容(它可以不必存在)。如果MIME类型未知,可以返回null。        
RequestDispatcher getNameDispatcher(String name)     返回具有指定名字或路径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatch,返回null。如果指定路径,必须心“/”开头,并且是相对于servlet上下文的顶部。        
RequestDispatcher getNameDispatcher(String path)            
String getRealPath(String path)     给定一个URI,返回文件系统中URI对应的绝对路径。如果不能进行映射,返回null。        
URL getResource(String path)     返回相对于servlet上下文或读取URL的输入流的指定绝对路径相对应的URL,如果资源不存在则返回null。        
InputStream getResourceAsStream(String path)            
String getServerInfo()     返顺servlet引擎的名称和版本号。        
void log(String message) 
void log(String message,Throwable t)     将一个消息写入servlet注册,如果给出Throwable参数,则包含栈轨迹。        
void removeAttribute(String name)     从servlet上下文中删除指定属性。      
九、javax.servlet.http.HttpSession接口 
HttpSession类似于哈希表的接口,它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了一个会话ID关键字,一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象,并使之对当前请求可用。 

HttpSession接口中的方法        
Object getAttribute(String name)     将会话中一个对象保存为指定名字,返回或删除前面保存的此名称对象。 void setAttribute(String name,Object value)            
void removeAttribute(String name)            
Enumeration getAttributeName()     返回捆绑到当前会话的所有属性名的枚举值。        
long getCreationTime()     返回表示会话创建和最后访问日期和时间的一个长整型,该整型形式为java.util.Date()构造器中使用的形式。        
long getLastAccessedTime()            
String getId()     返回会话ID,servlet引擎设置的一个唯一关键字。        
ing getMaxInactiveInterval()     如果没有与客户端发生交互,设置和返回会话存活的最大秒数。        
void setMasInactiveInterval(int seconds)            
void invalidate()     使得会话被终止,释放其中任意对象。        
boolean isNew()     如果客户端仍未加入到会话,返回true。当会话首次被创建,会话ID被传入客户端,但客户端仍未进行包含此会话ID的第二次请示时,返回true。

转载于:https://www.cnblogs.com/xinfang520/p/7692747.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端jenkins打包编译发布项目流程

如今的前端项目已不像之前直接写完代码&#xff0c;扔到服务器直接运行了。免不了安装依赖&#xff0c;执行build过程&#xff0c;然后再将打包后的代码上传到服务器&#xff0c;可能还需要更改配置文件啥的。如此多的步骤严重影响开发的日常划水时间。所以jenkins自动化部署少…

OpenMap教程4 –图层

1.简介 在第一个教程中&#xff0c;我们创建了一个基本的OpenMap GIS应用程序&#xff0c;该应用程序在JFrame中显示一个从文件系统加载的具有一个形状图层的地图。 该教程基于com.bbn.openmap.app.example.SimpleMap 。 在第二篇教程中&#xff0c;我们扩展了基本应用程序以使…

Vue.js实战之Vuex的入门教程

在 Vue.js 的项目中&#xff0c;如果项目结构简单&#xff0c; 父子组件之间的数据传递可以使用 props 或者 $emit 等方式。 但是如果是大型项目&#xff0c;很多时候都需要在子组件之间传递数据&#xff0c;使用之前的方式就不太方便。Vue 的状态管理工具 Vuex 完美的解决了这…

为什么写公众号,为什么改名字

这是一篇水果文&#xff0c;啥叫水果文&#xff1f;比水文稍微有点内容&#xff0c;我暂时这么解释吧。最近刚刚开始决定写公众号&#xff0c;其实这个订阅号申请的还蛮早的&#xff0c;当时是为了学习开发公众号而创建的&#xff0c;所以中间有过一段空档期&#xff08;呸&…

chrome浏览器解决ajax跨域问题

方法一 1、右键谷歌快捷方式&#xff0c;选择“属性”。 2、打开属性窗口&#xff0c;切换到“快捷方式”选项卡。 3、在目标路径的后面添加【 --disable-web-security】&#xff0c;其中chrome.exe与--disable之间有一个空格 4、点击应用&#xff0c;然后点击确定关闭窗口。 5…

前端的使命来了

最近国家工信部发布了一则关于重大App进行适老化改造的政策目的在于随着互联网的普及&#xff0c;有一部分群体在互联网应用的使用上存在着一定的障碍&#xff0c;为了保证这部分人能够顺利的使用手机中的App&#xff0c;国家出手了&#xff01;现在人们的生活越来越离不开互联…

第二章 Burp Suite代理和浏览器设置

Burp Suite代理工具是以拦截代理的方式&#xff0c;拦截所有通过代理的网络流量&#xff0c;如客户端的请求数据、服务器端的返回信息等。Burp Suite主要拦截http和https协议的流量&#xff0c;通过拦截&#xff0c;Burp Suite以中间人的方式&#xff0c;可以对客户端请求数据、…

Multiavatar头像生成,要多少有多少

还在为选一个个性十足&#xff0c;不同于别人的头像而烦恼吗&#xff1f;12,230,590,464个头像够你选择够不够&#xff1f;Multiavatar一款集多文化头像生成器&#xff0c;它可以根据不同的种族&#xff0c;不同的文化&#xff0c;不同的年龄&#xff0c;不同的世界观&#xff…

将Java 8流解析为SQL

当Java 8发行并且人们开始流式处理各种东西时&#xff0c;很快他们就开始想象如果可以以相同的方式使用数据库将有多大的潜力。 本质上&#xff0c;关系数据库由以表状结构组织的巨大数据块组成。 这些结构非常适合进行过滤和映射操作&#xff0c;如SQL语言的SELECT&#xff0c…

TCP Congestion Control

TCP Congestion Control Congestion occurs when total arrival rate from all packet flows exceeds R over a sustained(维持) period of timeBuffers(缓冲) at multiplexer will fill and packets will be lostPhases of Congestion Behavior Light traffic Arrival Rate &l…

SVG格式的Icon,用了你就知道有多香

继阿里的iconfont之后&#xff0c;字节跳动也出品了自己的矢量图标库&#xff0c;可以实现根据单一SVG源文件变换出多种主题&#xff0c; 具备丰富的分类、更轻量的代码和更灵活的使用场景。矢量SVG图标的出现&#xff0c;完全改变了前端的开发方式&#xff0c;之前总是通过设计…

sql server2016里面的json功能 - 转

测试一下基本的&#xff0c;从查询结果里面构造一个json 的格式 create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int)insert into t1 values (张三,90,80),(李四,75,90),(王五,68,100) select * from t1select * from t1 for json auto--查询结果 ID …

CSS实现TikTok文字抖动效果

前端同学在日常开发中精彩会因为一些动效和设计争的面红耳赤&#xff0c;设计希望用代码实现&#xff0c;前端要设计出gif图&#xff0c;最后谁也不让谁&#xff0c;设计走了&#xff0c;留下了前端独自加班......CSS技术是前端必须掌握的一项技能&#xff0c;不仅要掌握&#…

当心findFirst()和findAny()

过滤Java 8 Stream &#xff0c;通常使用findFirst()或findAny()来获取在过滤器中幸存的元素。 但这可能并不能真正实现您的意思&#xff0c;并且可能会出现一些细微的错误。 那么 从我们的Javadoc&#xff08; 此处和此处 &#xff09;可以看出&#xff0c;这两个方法都从流中…

Intellij新建Spring项目引入用户目录下的Spring jar包

首先&#xff0c;在IntelliJ IDEA中新建module&#xff0c;选择Spring应用&#xff1a; 在初次使用时&#xff0c;如果IDE检测到本地没有spring核心库&#xff0c;则会在新建过程中下载对应库文件&#xff0c;在使用spring框架时&#xff0c;可以细分多种不同应用场景&#xff…

如何在typescript中使用axios来封装一个HttpClient类

我们通常开始直接在代码中使用像axios这样的第三方库。这没有错。但是&#xff0c;在不断变化的库&#xff0c;软件包&#xff0c;版本等世界中&#xff0c;直接使用这些库API可能会导致代码不一致。一个好的做法是创建自己的抽象并将对库API的调用包装到包装器中。这将使您保持…

gRPC Web使用指南

gRPC 是一个高性能、通用的开源 RPC 框架&#xff0c;其由 Google 主要面向移动应用开发并基于 HTTP/2 协议标准而设计&#xff0c;基于 ProtoBuf (Protocol Buffers) 序列化协议开发&#xff0c;且支持众多开发语言&#xff08;&#xff09;。gRPC 提供了一种简单的方法来精确…

C# 发送email邮件!

利用C#邮件发送邮箱使用到两个类SmtpClient和MailMessage。可以把SmtpClient看做发送邮件信息的客户端&#xff0c;而把MailMessage看做需要发送的消息。 下面是我写的发送邮件的公共方法&#xff1a; 1 /// <summary>2 /// 3 /// </summary>4 …

JUnit 5 –扩展模型

我们已经对Java最普遍的测试框架的下一个版本了解很多。 现在让我们看一下JUnit 5扩展模型&#xff0c;该模型将允许库和框架将自己的实现添加到JUnit中。 总览 设定 基本 建筑 扩展模型 条件 注射 … 在新兴的《 JUnit 5用户指南》中可以找到您将在此处阅读的更多内容…

软件工程实验5

SA17225400 哪来的妖精 《软件工程&#xff08;C编码实践篇&#xff09;》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 GitHub &#xff1a;https://github.com/littlewulei/Software-Engineering-Lab.git 实验要求&#xff08;参照视频中的具体实验过程&…