打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
J2EE企业级开发学习笔记(7)

J2EE企业级开发学习笔记(7)

Servlet

 

1、Servlet:被设计成在Web服务器上而非客户机上可以处理Web客户端传来的HTTP请求,并发回一个合适的响应的Web组件。它能很好地执行这种功能,并只需要很少的资源就能发送这种功能。Web服务器通过Web容器来管理这些组件。

 

2、Servlet一般用途:简单的用作客户和服务器往返传递信息的通道,此外,允许客户端控制服务器添加或删除Web页面或文件(只要客户端有足够的清理权限,少见)

 

3、Servlet最利于处理小型任务:收集和验证用户输入,但几乎不进行实际处理;协调输出,但几乎不直接生成动态Web页面内容;最少量的业务逻辑。

 

4、Servlet生命周期:

HTTP工作方式:请求-响应型模型。

Servlet扩展了两个基本Servlet实现类中的一个:HttpServlet(常用)和GenericServlet.此2种Servlet都具有相同的生命周期。

生命周期使用了三种基本请求处理程序方法:init(初始化Servlet)、Service(为客户端请求服务)、destroy(销毁servlet)。Service是GenericServlet的核心,但永远不可以被重写,而init和destroy方法总是可以被重写,但很多情况下,Servlet不需要初始化或终止的特定对象或链接时,可能不会用到这两种方法。


 Servlet生命周期是顺序图:


5、多个线程可能同时调用通用的Servlet实例的Service方法,为避免这种情况可以执行SingleThreadModel接口,用于指示Web容器在任意给定时间内只允许一个线程调用服务方法。缺点:在Web服务器上部署Servlet时,对服务器上同一时间段内允许存在的Servlet实例的总数量有显著影响,因此在执行SingleThreadModel接口会对容器分配资源的方式产生重大影响。优点:在Servlet可能需要改变非线程安全的信息或访问资源时,执行该接口是合适的。最好不要试图连接任意数量的Servlet方法的做法。


6、处理请求:Web容器接收Servlet请求->封装接收数据到ServletRequest(javax.Servlet.ServletRequest)接口对象中->使用ServletRequest接口中的方法来查询请求的对象。

  ServletRequest接口方法(常用):

  •      getCharactorEncoding:获取请求的编码格式信息
  •      isSecure:确定请求是否是通过安全通过发出的
  •      getParameter:用于检索与命名参数类型关联的第一个参数的值。
  •      getParameterValues:用于检索与命名参数类型关联的多个参数的值。
  •      httpServletRequest:基于Servlet请求的http方法

用法:

    HttpSession session=request.getSession(true);

    ...

    String loginID=request.getparameter("USERID");

    String loginPassword=request.getparameter("PASSWORD");

 

7、产生响应:一个请求引发一条响应。Servlet请求用ServletResponse响应对象被提供给一个Servlet,同时请求对象被作为一个参数传递给服务方法。在分别获取了ServletOutputStream对象或PrintWriter对象的句柄后,可以分别采用二进制格式或字符编码格式编写输出的内容。其他生成响应的方法:在任何可能的地方使用JSP和JavaBeans技术,Servlet只负责转请求到JSP页面,为JSP页面成功完成页面动态数据加载而协调必要的项目。

   ServletResponse接口方法(常用):

  •    getOutputStream:获取ServletOutputStream对象用于二进制数据的句柄
  •    getWriter:获取PrintWriter对象用于字符数据的句柄。
  •    setBufferSize:为响应建立内存缓冲区的尺寸,以便更好地调整服务器的性能。
  •    flushBuffer:更新当前缓冲区中的内容。
  •    httpServletResponse:基于Servlet响应的HTTP方法。

用法:

    PrintWriter out;

    ...

    response.setContentType("text/html");

    ...

    out=response.getWriter();

    out.println("<HTML><HEAD><TITLE>");

    ...

    out.println("Login Unsuccessful");

    out.flush();

    out.close();

 

8、HTTP请求处理程序:

   HttpServlet类扩展了GernericServlet类,因此继承了所有标准的Servlet功能。除了基本的Servlet生命周期方法和便利方法外,还有最常用的两个处理程序:doGet()、doPost().

   doGet():处理HTTP Get(接收)请求

   doPost():处理HTTP Post(发送)请求

getLastModified()与HTTP GET 方法很像,但他只有在一段指定的时间内发生改变后才能返回内容。即只有doGet()方法被重写,并将要用于处理从请求到请求的变化不大的内容时才能使用getLastModified()方法。

此外,HttpServlet还包含两个方法:

· init(ServletConfig config): 创建Servlet 实例时,调用的初始化方法。
· destroy(): 销毁Servlet 实例时,自动调用的资源回收方法。

通常无须重写initO和destroyO两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init 方法。如果需要在销毁Servlet 之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy 方法。

【注意】如果重写了init(ServletConfig config)方法,则应在重写该方法第一行调用super.init(config)。该方法将调用HttpServlet的init方法。

 

9、高级处理程序方法:

   doPut():处理HTTP PUT(提交)请求。

   doDelete():处理HTTP DELETE(删除)请求。

   doTrace():处理HTTP TRACE(跟踪)请求。

HttpServlet类区别与GenericServlet类,它不可以重写Service方法,却可以重写这些请求处理程序。HttpServlet方法必须被重写成至少一种方法(即指某个生命周期方法或请求处理程序)。

 

10、HTTP请求指南:

    GET调用:用于获取服务器信息,并将其作为响应返回给客户端,没有副作用,可以安全地反复调用此方法。离开HTML页面或表单时直接访问Servlet的URL,但这样做并不安全。

    POST调用:允许客户端传送数据给服务器端,会引发副作用,如更新服务器上数据。但转发html或JSP页面上的表单时,可以使用POST来代替GET调用,POST调用会隐藏传送给Servlet的任何数据。开发人员不想支持特定的调用时,可以忽略其中的一个。

    PUT调用:与POST调用类似,但允许客户端把真正的文件存放在服务器上,而不仅限于传输数据。不常用。

    DELETE调用:与PUT调用类似,允许客户端删除服务器端文件或Web页面。不常用。

    HTTP HEAD调用:doGet()被重写,在调用doGet()时内部处理,只返回处理doGet()方法时产生的响应的标题,而不返回任何实际的响应数据。

 

11、RequestDispatcher(接口) 重定向转移 和 包含:

  forward()方法:允许Servlet把一个请求转移到另一个Web组件上。在转移请求时,会在转移之前对该请求做某些方面的处理。转移可以有效完成Servlet链式输出输入(即与原始请求数据合并起来输入到下一个Servlet中)。【注意】与sendRedirect()区分:sendRedirect()在转到一个新页面时不能保证一定会保存请求的数据。

  include()方法:允许在调用Servlet的响应中包含另一个Web组件的内容。这与服务器端包含SSI的概念相似。

 

12、关于Servlet的建模:

转移<<forward>>:



包含<<include>>:

 

13、ServletContext:

    提供了Servlet所运行环境的信息。一种Servlet可以属于由管理员确定的唯一的ServletContext。一种ServletContext是与容器中部署的每一种Web应用相关联。对于分布式容器,则是与每台虚拟机上的一种Web应用相关联。Servlet可以用ServletContext接口来存储和检索信息,以及与其他Servlet共享信息。Servelt还可以使用getServletContext()方法来获取它所运行的ServletContext.

    ServletContext接口所提供的一些基本的服务:

  •    setAttribute:在环境中存储信息。
  •    getAttribute:检索存储在ServletContext中的信息。
  •    getAttributeName:获取环境中属性的名字。
  •    removeAttribute:删除环境中的一个属性。

 

14、Servlet会话管理:

隐藏字段:隐藏的字段嵌入到要显示给客户端的页面中。每发出一次新的请求,就会把这些字段发回给客户端。

动态URL重写:对客户端点击的每一个URL,都会添加一些额外的信息(在会话期间独特地标识每一个客户,如:URL?session=97859,即发出请求的客户端会话编号是97859)。

cookies:已存储的信息可能会在往后重复传送回客户端。Web服务器为浏览器提供了Cookie.

服务器端会话对象:cookies和URL编码受到对每一次请求而发送回客户端信息量多少的限制,在服务器会话管理中,会话信息是在服务器上的会话对象中进行维护的,能根据需要进行访问。注意:使用服务器对象很昂贵尽量少使用它们。

http会话(Servlet API): HttpSession更容易的处理来自同一个用户的多个请求。
 HttpSession theSession=request.getSession(true);

 theSession.putValue("Session.id","98579");

 sessionId=theSession.getValue("Session.ID");

 

15、Servlet部署和Web归档文件(*.war):

 



16、企业级应用中标识Servlet:

  将控制对象一分为二:外部交互和内部交互。一般来说:Servlet的作用是作为一个边界对象和系统的其余部分之间的协调器(只承担很小的职责,可能包含启动某些业务逻辑)。边界对象和复合控制类之间的所有交互都属于新的Servlet。而分割显示在控制对象和实体对象之间的交互关系就有些棘手了。


该图中有一小部分是由若干个动作组成的一个完整的交易。我们决定把这一部分分割开,由内部关注他的控制对象对它进行处理,其余部分则由Servlet负责。下图则显示了这种职责划分后的结果:



HttpServlet 理想地适合执行外部交互作用。





17、Servlet 和JSP的区别在于:
a. Servlet中没有内置对象,原来JSP中的内置对象都必须通过HttpServletRequest对象,或由HttpServletResponse 对象生成:
b. 对于静态的HTML标签, Servlet 都必须使用页面输出流逐行输出。即“JSP是Servlet的一种简化”,使用JSP只需要完成程序员需要输出到客户端的内容,至于JSP中的Java 脚本如何镶嵌到一个类中,由JSP 容器
完成。而Servlet则是个完整的Java 类,这个类的service方法用于生成对客户端的响应。

 

18、为了让Servlet 能响应用户请求,还必须将Servlet 配置在Web 应用中。配置Servlet
时,需要修改web.xrnl 文件。
配置Servlet 需要配置两个部分:
·配置Servlet 的名字:对应web.xml 文件中的<servlet/>元素。
·配置Servlet 的URL: 对应web.xml 文件中的<servlet-mapping/>元素。
因此,配置一个能响应客户请求的Servlet ,至少需要配置两个元素,关于上面FirstServlet 的配置如下:
<!--配置Servlet 的名字-->
<servlet>
<!-- 指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet 的实现类--〉
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<!-- 配置Servlet 的URL-->
<servlet-mapping>

<!--指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!--指定Servlet 映射的URL地址>
<url-pattern>/firstServlet</url-pattern>
</servlet-rnapping>

 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java编程中Servlet简介与常用方法_Servlet_Java中文网
花了20天的时间给粉丝整理的一套"最全"的Java求职笔记(二)
Servlet技术(上)
通过源码详解 Servlet
Servlet请求转发 RequestDispatcher与sendRedirect - ...
J2EE 探索者: 隐式对象的多种用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服