2.[Struts2权威指南笔记]Servlet

简介:

Servlet是用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端。Servlet在初始化后驻留内存,因此没做请求时无需加载。

1.HTTP基础

用户的请求和Web应用通过Internet从一台计算机发送到另一个台计算机或服务器,使用超文本传输协议HTTP,HTTP是一个客户端和服务器请求和答应的标准。

Get和Post方法

HTTP请求消息使用Get和Post方法在Web上传输请求。

检索信息时用Get方法,要检索的信息作为字符序列传递,称为查询字符串,因此传递的数据对客户端是可见的,即将查询字符串附加到URL中,但查询字符串有长度限制,最多1024字节。

114640967.png

Post方法是HTTP定义的另一种请求方法,使用Post发送数据对客户端是不可见的,且对数据量没有限制。

比较Get与Post方法

Get方法是从服务器上获取数据,Post是向服务器传送数据;

在客户端,Get通过URL提交数据,数据在URL可见,Post把数据放在form数据体内提交;

Get提交的数据最多只有1024字节,Post没有数据量限制;

使用Get时,参数显示在地址栏,而Post不会,所以,如果数据是非敏感的,使用Get,反之使用Post。

2.Servlet简介

当使用交互式Web应用时,Web服务器接收会话请求,处理请求和访问数据,并生成结果返回显示,servlet就是用于该过程的。

Java Servlet是为响应Web应用程序上下文中的HTTP请求而设计的。在创建一个Java Servlet时,一般需要子类HttpServlet,当用户通过URL发送一个请求时,Java运行环境(JRE)将结果包装在一个HttpServletResponse中,然后将原HTTP响应送回给发处该请求的客户机。在与Web应用进行交互式,通常是多个请求并获得响应,所有这些都是在一个会话语境中,Java语言将之包装在一个HttpSession对象中。

容器(如Tomcat)将为Servlet容器管理运行时环境。通过容器中的各种配置文件,在URL与服务器端组件之间搭建了一座桥梁,这些组件处理URL请求。在运行时,容器将加载并初始化servlet,管理其生命周期。

3.一个简单的servlet

声明类

Servlet是一个类。

1
2
3
4
5
6
7
8
9
10
11
12
import  javax.servlet.ServletException;
import  javax.servlet.http.HttpServlet;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
public  class  HelloWorldServlet  extends  HttpServlet {
     public  void  service(HttpServletRequest request, HttpServletResponse response)
               throws  ServletException, IOException {
          PrintWriter writer = response.getWriter();
          writer.println( "Hello, World!" );
          writer.close();
     }
}

其中javax.servlet.*是存放与HTTP协议无关的一般性Servlet类;javax.servlet.http.*增加了与HTTP协议有关的功能。

所有Servlet必须实现javax.servlet.Servlet接口,但通常选择实现javax.servlet.GenericServlet或javax.servlet.http.HttpServlet,如果写的Servlet代码与HTTP协议无关,必须继承GenericServlet类;若有关,必须继承HttpServlet类。

javax.servlet.*里面的ServletRequest和ServletResponse接口提供存储一般的请求和响应;而javax.servlet.http.*里面的HttpServletRequest和HttpServletResponse接口提供HTTP请求及响应的存取服务。

配置web.xml

1
2
3
4
5
6
7
8
9
10
< web-app >
     < servlet >
         < servlet-name >hello</ servlet-name >
         < servlet-class >servlet.HelloWorldServlet</ servlet-class >
     </ servlet >
     < servlet-mapping >
         < servlet-name >hello</ servlet-name >
         < url-pattern >/hello</ url-pattern >
     </ servlet-mapping >
</ web-app >

Servlet的配置,需要配置两个标签<servlet>和<servlet-mapping>。

对于<servlet>,配置servlet的名字,所要调用的Java类,还有Servlet初始化时传入的参数。对于<servlet-mapping>,制订了Servlet名字,然后设置url连接,这里Servlet名字必须和上面的<servlet>标签中的<servlet-mapping>的值一致。

当在页面中设定的连接和<url-pattern>中设定的值一致时,则会通过<servlet-name>找到对应的Servlet类来运行。

114724423.png

4.Servlet体系结构

Servlet容器将Servlet动态加载到服务器,HTTP Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此Servlet容器支持请求和响应的HTTP协议。

114752922.png

客户端对Servlet的请求首先会被HTTP服务器接收,HTTP服务器将客户的HTTP请求提交Servlet容器,Servlet容器调用响应的Servlet,Servlet做出响应传递到Servlet容器,并进而有HTTP服务器将响应传给客户端。

Tomcat容器模型

Tomcat是一个小型的轻量级应用服务器,具有处理HTML的功能,同时它是一个Servlet和JSP容器,Tomcat就是HTTP服务器和Servlet容器的两个部分。

114800569.jpg

5.Servlet层次结构

Servlet是实现javax.servlet.Servlet接口的对象,大多数Servlet通过从GenericServlet或HttpServlet类来进行扩展实现,Servlet API包含两个包:javax.servlet和javax.servlet.http。

6.Servlet生命周期

114808144.png

Servlet运行在Servlet容器中,其生命周期由容器管理。Servlet的生命周期通过javax.servlet.Servlet接口的init()、service()和destroy()方法来表示。

Servlet生命周期包含4个阶段:

加载和实例化

Servlet容器负责加载和实例化Servlet。容器通过Java反射API来创建Servlet实例。

初始化

在Servlet实例化后,容器调用Servlet的init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化工作。对于每一个Servlet实例,init()方法只被调用一次。

处理请求

Servlet容器调用Servlet的service()方法对请求进行处理。在service()方法中,通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。对于HttpServlet类,该方法作为HTTP请求的分发器,这个方法在任何时候都不能被重载。在请求到来时,service()方法决定请求的类型(GET、POST,并发请求分发给相应的处理方法(doGet()、doPost())。

服务停止

当容器检测到一个Servlet实例应该从服务器中移除的时候,容器会调用实例的destroy()方法,以便让实力可以释放它所使用的资源。让需要释放容器或者容器被关闭时,容器就会调用Servlet实例的destroy()方法。在调用destroy()方法后,容器会释放这个Servlet实例,该实例随后被Java的垃圾收集器回收。











本文转自 LinkedKeeper 51CTO博客,原文链接:http://blog.51cto.com/sauron/1231616,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
JSON 前端开发 JavaScript
JAVA-JSP/Servlet 笔记(九)
JAVA-JSP/Servlet 笔记(九)
|
10月前
|
缓存 前端开发 JavaScript
JAVA-JSP/Servlet 笔记(八)
JAVA-JSP/Servlet 笔记(八)
|
10月前
|
Java 关系型数据库 MySQL
JAVA 笔记-JSP/Servlet(七)
JAVA 笔记-JSP/Servlet(七)
|
SQL 前端开发 Java
国庆复习mysql,html/css,jdbc,Servlet,Jsp,Struts2
国庆复习 国庆放了7天,回来之后对mysql,html/css,jdbc,Servlet,Jsp,Struts2进行了复习。
239 0
|
存储 Java 应用服务中间件
【笔记05】Java 小知识 —— Request、Servlet
Java Web 中往往通过定义属性的方式实现数据共享,共有 :three: 种方式(对象)可实现数据共享,但它们的共享范围不一样。下面总结一下:
114 0
【笔记05】Java 小知识 —— Request、Servlet
|
应用服务中间件
Tomcat&Servlet笔记
Tomcat&Servlet笔记
97 0
|
前端开发 Java 关系型数据库
国庆复习mysql,html/css,jdbc,Servlet,Jsp,Struts2
国庆放了7天,回来之后对mysql,html/css,jdbc,Servlet,Jsp,Struts2进行了复习。
|
API 存储
08 Struts2 访问Servlet API
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710008 Struts2 提供了三种方式访问本地Servlet API 1.
1328 0
|
容器 应用服务中间件 Java
Servlet笔记
servlet/jsp网络拓扑结构: 图1 开发servlet有三种方法: 1、实现servlet接口 2、继承GenericServet 3、继承HttpServlet (一)使用Servlet来编写一个serlve...
874 0