Servlet个人学习总结

Servlet个人学习总结

  • 什么是Servlet?为什么要学习Servlet?
    • Servlet API
    • Servlet使用前提
    • 自定义Servlet、HttpServlet的继承关系
    • Servlet的优势
  • Servlet软件包
  • Servlet的应用
  • 目录
    • Servlet-生命周期
    • Servlet-示例
    • Servlet-表单数据
    • Servlet-客户端请求
    • Servlet-Http代码
    • Servlet-编写过滤器
    • Servlet-异常
    • Servlet-Cookies处理
    • Servlet-Session跟踪
    • Servlet-文件上传
    • Servlet-页面重定向和请求转发的区别
    • Servlet-点击计数器
    • Servlet-注释
    • 结语

Servlet提供了一种基于组件的、平台无关的方法来构建基于Web的应用程序,而没有CGI( Common Gateway Interface,译作“通用网关接口”)程序的性能限制。Servlet可以访问整个Java API系列,包括用于访问企业数据库的JDBC API。

什么是Servlet?为什么要学习Servlet?

Java Servlet是在Web端或应用程序服务器上运行的程序,并充当来自Web浏览器或其他HTTP客户端的请求与HTTP服务器上的数据库或应用程序之间的中间层。

使用Servlet,我们可以通过网页表单收集来自用户的输入,显示来自数据库或其他来源的记录,并动态创建网页。

下图显示了Servlet在Web应用程序中的位置,其中HttpServlet通过Http协议为客户端提供服务,目前,Servlet也只有通过Http协议为我们提供服务,即GenericServlet只有HttpServlet这一个子类:
Servlet个人学习总结_第1张图片

Servlet API

Servlet API由两个软件包构成,对应于HTTP协议的软件包以及对应于除了HTTP协议以外的其他软件包,因此Servlet API可以适用于任何通信协议。

笔者所学习的Servlet,是位于javax.servlet.http.HttpServlet包中的类和接口,是基于HTTP协议的。

一般在我们实际的编程中,Servlet必须符合一定的规则:

  1. 必须继承javax.servlet.http.HttpServlet;
  2. 重写其中的都Get()或doPost()方法。
    doGet():接受并处理所有的get提交方式的请求;doPost():接受并处理所有的post提交方式的请求。

Servlet使用前提

Servlet要想使用,必须对其进行配置:在Servlet3.0版本之前,使用web.xml编写映射关系进行配置,在Servlet3.0之后,我们可以在类的定义之前用注释@WebServlet(value="url-pattern")对该Servlet添加映射关系,因为Servlet是向下兼容的,所以也可以使用web.xml进行配置。

  • web.xml方式:
    • Servlet的执行流程:请求对应的链接=》到web.xml找该链接相应的=》根据找到的对应的中的找到有对应的==》最后,Servlet容器将请求交给该对应的Servlet类进行处理。
  • 注释@WebServlet方式:
    • Servlet的执行流程:请求的地址与@WebServlet的value值进行匹配,如果请求成功,则说明请求的就是给注解所对应的类。

如果使用Eclipse编写Serlet,可以直接在package下直接新建一个Servlet,这样的话会自动完成继承HttpServlet的父类、重写相关的方法和web.xml或注释的相关映射编写操作。

我们编写的url-pattern的格式为“/URL”,其中的“/”代表的是一个根目录,对于一个html(包括后续使用的JSP)来说,“/”等同于服务器根目录,即http://ip.post;如果是在web.xml或Servlet注释,则等同于该项目的项目根路径,即ip:post/项目/。如果index.jsp中请求abc,则会去项目的src的根目录下寻找该Servlet,也会到该项目的WebContent下去寻找该html或jsp。

自定义Servlet、HttpServlet的继承关系

Servlet个人学习总结_第2张图片

  • ServletVonfig接口:
    • ServletContext getServletContext():获取Servlet上下文对象(可以先了解一下,相当于JSP九大内置对象的application);
    • String getInitParameter(String name):在当前的Servlet范围内,获取名为name的参数值(也就是获取名为name的初始化值)。
  • ServletContext(大致和JSP的application差不多)
    • getContextPath():获取相对路径
    • getRealPath():获取绝对路径
    • String getInitParameter(String name):在当前的Web容器范围内,获取名为name的参数值(也就是获取名为name的初始化值)。

例如在一个自定义的Servlet(servlet.exampleServlet)下编写以下的init()方法:

public void init() throws ServletExecption{
	//获取当前的Servlet的初始化参数,即ServletVonfig接口的String getInitParameter(String name)方法
	String value = super.getInitParameter("servletParam");
	System.out.println("当前Servlet的参数servletParam的值为:"+value );
	//获取当前的Web容器的初始化参数,即ServletContext接口的String getInitParameter(String name)方法
	ServletContext servletContext = super.getServletContext();
	String globeValue = servletContext .getInitParameter("globeParam");
	System.out.println("当前Web容器的参数servletParam的值为:"+globeValue );
}

在web.xml下:


<context-param>
	<param-name>globeParamparam-name>
	<param-value>globeValueparam-value>
context-param>

<servlet>
	<servlet-name>exampleServletservlet-name>
	<servlet-class>servlet.exampleServletservlet-class>
	<init-param>
		<param-name>servletParamparam-name>
		<param-value>servletParamValueparam-value>
	init-param>
servlet>
<servlet-mapping>
    <servlet-name>exampleServletservlet-name>
    <url-pattern>/exampleServleturl-pattern>
  servlet-mapping>

注意:不管是ServletVonfig接口的String getInitParameter(String name)方法还是ServletContext接口的String getInitParameter(String name)方法,都需要有该,并且name需要写对。

Servlet的优势

Java Servlet通常具有与使用通用网关接口(CGI)实现的程序相同的目的。但是,与CGI相比,Servlet具有许多优势:

  • 性能明显更好。
  • Servlet在Web服务器的地址空间内执行。不必创建单独的过程来处理每个客户端请求。
  • Servlet是平台无关的,因为它们是用Java编写的。
  • 服务器上的Java安全管理器强制执行一组限制,以保护服务器计算机上的资源。因此,servlet是可信任的。
  • servlet可使用Java类库的全部功能。它可以通过您已经看到的套接字和RMI机制与applet,数据库或其他软件进行通信。

Servlet软件包

Java Servlet是由Web服务器运行的Java类,该Web服务器具有支持Java Servlet规范的解释器。

就像任何其他Java类一样,Java servlet已经创建并编译好了。安装Servlet软件包并将其添加到计算机的Classpath之后,可以使用JDK的Java编译器或任何其他当前编译器来编译servlet。

Servlet的应用

  • 读取客户端(浏览器)发送的显式数据。这包括网页上的HTML表单,也可能来自applet或自定义HTTP客户端程序。
  • 读取客户端(浏览器)发送的隐式HTTP请求数据。这包括浏览器可以理解的cookie,媒体类型和压缩方案等。
  • 处理数据并生成结果。此过程可能需要与数据库对话,执行RMI(Remote Method Invocation,译作“远程方法调用”)或CORBA(Common ObjectRequest Broker Architecture,译作“公共对象请求代理体系结构”)调用,调用Web服务或直接计算响应。
  • 将显式数据(即文档)发送给客户端(浏览器)。该文档可以以多种格式发送,包括文本(HTML或XML),二进制(GIF图像),Excel等。
  • 将隐式HTTP响应发送到客户端(浏览器)。这包括告诉浏览器或其他客户端正在返回哪种类型的文档(例如HTML)、设置cookie和缓存参数以及其他此类任务。

目录

Servlet-生命周期

说明:Servlet的生命周期一共有5个阶段(注意,3个阶段是不正确的),这5个阶段分别是:

  • 加载:Servlet自动加载
  • 初始化init()方法:该方法会在Servlet被加载并实例化后执行
  • 服务:抽象方法service()——一般常用的是doGet()和doPost()方法
  • 销毁destroy()方法:Servlet被系统回收时执行。
  • 卸载:Servlet自动处理

Servlet-示例

Servlet-表单数据

Servlet-客户端请求

Servlet-Http代码

Servlet-编写过滤器

Servlet-异常

Servlet-Cookies处理

Servlet-Session跟踪

Servlet-文件上传

Servlet-页面重定向和请求转发的区别

Servlet-点击计数器

Servlet-注释

结语

Servlet一般应用在后台充当服务器进行对客户端请求的操作处理,然而也可以把他做成前端可展示的页面——jsp。jsp其实就是一种Servlet,然而,在学习jsp和Servlet过程中,我们一般推荐先学习Servlet,这样子在弄明白什么是客户端什么是服务器之后,再学习jsp就轻松许多了。

你可能感兴趣的:(JAVAweb基础,#,servlet)