有关Servlet和JSP的梳理

有关Servlet和JSP的梳理
  • 作者:上海巨兽信息科技有限公司
  • 发表时间:2017-06-17

大二第一学期的时候有学JSP的课,但是因为在开学之前做过JSP的小项目,所以一个学期的课也没听,直到期末考试成绩出来了,才回想JSP的内容还有多少记得,没想到模模糊糊也记不起多少,赶紧回头学回来。接下来是关于Servlet和JSP的梳理。

-------------------------------------------------------------------------------------------------------------------------------------------------

  Servlet是一个Java程序,一个Servlet应用有一个或多个Servlet程序,而且JSP页面也会被转换和编译成Servlet程序。

  Servlet应用无法独立运行,必须运行在Servlet容器中。Servlet容器将用户的请求传递给Servlet应用,并将结果返回给用户。由于大部分Servlet应用都包含多个JSP页面,因此更准确地说是“Servlet/JSP应用”。

  其中,Servlet API是开发Servlet的主要技术。而Servlet API有以下4个Java包:

Java

包含的内容

javax.servlet

定义Servlet和Servlet容器之间契约的类和接口

javax.servlet.http

定义HTTP Servlet和Servlet容器之间契约的类和接口

javax.servlet.annotation

标注Servlet、Filter、Listener的标注。它还被标注原件定义元数据

javax.servlet.descriptor

包含提供程序化登陆web应用程序的配置信息的类型。

  Servlet技术的核心是Servlet,它是所有Servlet类必须直接或间接实现的一个接口,而Servlet接口定义了Servlet与Servlet容器之间的契约。这个契约归结起来就是,Servlet容器将Servlet类载入内存,并在Servlet实例上调用具体的方法。当用户的请求使得Servlet容器调用Servlet的Service方法,会传入一个ServletRequest实例和一个ServletResponse实例,其中,ServletRequest中封装了当前的HTTP请求,而ServletResponse表示当前用户的HTTP响应。对于每一个应用程序,Servlet容器还会创建一个ServletContext实例,这个对象中封装了上下文(应用程序)的环境详情。每个上下文只有一个ServletContext,而且每个Servlet实例都有一个配置的ServletConfig。

 

 Servlet的生命周期方法:

  

Servlet容器的生命周期方法

作用

init

该方法在Servlet第一次被请求的时候,Servlet就会调用这个方法,而后不再被调用,所以可以用这个方法进行初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig。

Service

每当请求Servlet时,Servlet容器就会调用这个方法。第一次请求Servlet时,Servlet容器调用init方法和Service方法。后续的请求将只调用Service方法。

destroy

当要销毁Servlet时,Servlet容器就会调用这个方法。一般会在这个方法中编写清除代码。

  在介绍一个Servlet中另外两个非生命周期的方法:

Servlet容器的非生命周期方法

作用

getServletInfo

这个方法会返回Servlet的描述

getServletConfig

这个方法会返回由Servlet容器传给init方法的ServletConfig。

但是为了让getServletConfig返回一个非null值,必须将传给init方法的ServletConfig赋给一个类级变量。

-------------------------------------------------------------------------------------------------------------------------------------------------

   接下来是Servlet的各类接口:

  ServletRequest

 

接口

说明

ServletRequest

对于每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的Service方法。ServletRequest封装了关于这个请求的信息。

  常用的方法有:

    

方法

说明

public int getContentLength()

返回请求主体的字节数。

public java.lang.String getContentType()

返回请求主体的MIME类型。

public java.lang.String getParameter(java.lang.String name)

返回指定请求参数的值

public java.lang.String getProtocol()

返回这个HTTP请求的协议名称和版本

  ServletResponse

接口

说明

ServletResponse

该接口表示一个Servlet响应。在调用Servlet的Service方法前,Servlet容器首先创建一个ServletResponse,并将它作为第二个参数传给Service方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

  常用的方法:

 

方法

说明

getWriter()

返回了一个可以向客户端发送文本的java.io.PrintWriter。默认情况下,PrintWriter对象使用ISO-8859-1编码。

setContentType(“type”)

设置响应的内容类型,并将”text/html”作为一个参数传入。如果没有设置相应内容类型,有些浏览器就会将HTML标签显示为普通文本。

  ServletConfig

  

接口

说明

ServletConfig

用于存储关于Servlet的配置信息。

当Servlet容器初始化Servlet时,Servlet容器会给Servlet的init()方法传入一个ServletConfig。ServletConfig封装可以通过@WebServlet或描述符传给Servlet的配置信息。

   常用的方法:

 

方法

说明

java.lang.String getInitParameter(java,lang.String name)

为了从Servlet内部获取到初始参数的值,要在Servlet容器传给Servlet的init方法的ServletConfig中调用getInitParameter方法。

java.util.Enumration<java.lang.String> getInitParameterNames()

返回所有初始参数名称的一个Enumeration。

String contactName = servletConfig.getInitParameter(“contactName”)

获取contactName参数值

  ServletContext

接口

说明

ServletContext

每个Web应用程序只有一个上下文,所以ServletContext可以存储这个上下文,并且ServletContext还可以共享从应用程序中的所有资料处访问到的信息,并且可以动态注册Web对象,而且是用ServletContext内部的Map保存。

  常用的方法:

 

方法

说明

getServletContext().getInitParameter(String name)

获取在项目下的web.xml中设置context的初始化参数

this.getServletContext().log(“测试”)

在web.xml文件中,使用logger元素来设置日志文件

getAttribute(String name)/get AttributeNames()

获取ServletContext中的属性

setAttribute(String name, Object object)

设置ServletContext中的属性

removeAttribute(String name)

移除ServletContext中的属性

  GenericServlet

接口

说明

GenericServlet

GenericServlet实现了Servlet和ServletConfig接口。将init方法中的ServletConfig赋给一个类级变量,以便可以通过getServletConfig获取,为Servlet接口中的所有方法提供默认的实现,而且提供包括ServletConfig中的方法。

  Http Servlets

    

接口

说明

HttpServlet

HttpServlet类覆盖了javax.servlet.GenericServlet类。使用HttpServlet时,还要借助分别代表Servlet请求和Servlet响应的HttpServletRequest和HttpServletResponse对象。而HttpServlet与GenericServlet的差别在于,HttpServlet覆盖的是doGet或者doPost方法,而不是Service方法,而且使用的是HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse。

HttpServletRequest

表示HTTP环境中的Servlet请求

HttpServletResponse

表示HTTP环境中的Servlet响应

  各个接口常用的方法如下:

  

接口

方法

说明

 HttpServletRequest

java.lang.String getContextPath()

返回表示请求上下文的请求URI部分。

 HttpServletRequest

Cookie[] getCookies()

返回一个Cookie对象的数组。

 HttpServletRequest

java.lang.String getHeader(java.lang.String name)

返回指定HTTP标题的值。

 HttpServletRequest

java.lang.String getMethod()

返回生成这个请求的HTTP方法名称

 HttpServletRequest

java.lang.String getQueryString()

返回请求URL中的查询字符串。

 HttpServletRequest

HttpSession getSession()

返回与这个请求相关的会话对象。如果没有,将创建一个新的会话对象。

 HttpServletRequest

HttpSession getSession(Boolean create)

返回与这个请求相关的绘画对象,如果有,并且create参数为True,将创建一个新的会话对象。

 HttpServletResponse

void addCookie(Cookie cookie)

给这个响应对象添加一个cookie。

 HttpServletResponse

void addHeader(java.lang.String name, java.lang.String value)

给这个响应对象添加一个header。

 HttpServletResponse

void sendRedirect(java.lang.String location)

发送一条响应码,将浏览器跳转到指定的位置。

-------------------------------------------------------------------------------------------------------------------------------------------------

  当用户提交HTML表单时,在表单元素中输入的值就会被当作请求参数发送到服务器。HTML输入域(文本域、隐藏域或者密码域)或者文本区的值,会被当作字符串发送到服务器。空的输入域或者文本区会发送空的字符串。

  包含多个值的select元素发出一个字符串数组,可以通过ServletRequest.getParameterValues进行处理。

  核查过的复选框会发送字符串"on"到服务器,未经核查的复选框则不向服务器发送任何内容,ServletRequest.getParameter(fieldName)返回null。

  单选框将被选中按钮的值发送到服务器。如果没有选择任何按钮,将没有任何内容被发送到服务器,并且ServletRequest.getParameter(fieldName)返会null。

  如果一个表单中包含多个输入同名的元素,那么所有值都会被提交,并且必须利用ServletRequest.getParameterValues来获取它们。ServletRequest.getParameter将只返回最后一个值。


上一条:传爱奇艺在美提交IPO申请 融资10亿美元
下一条:今天是1024程序员节