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 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找该链接相应的<url-pattern>=》根据找到的<url-pattern>对应的<servlet-mapping>中的<servlet-name>找到有对应的<servlet-name><servlet><servlet-class>==》最后,Servlet容器将请求交给该<servlet-class>对应的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中请求<a href="abc">abc</a>,则会去项目的src的根目录下寻找该Servlet,也会到该项目的WebContent下去寻找该html或jsp。

自定义Servlet、HttpServlet的继承关系

在这里插图片描述

  • 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下:

<!--在整个web容器下设置初始化参数-->
<context-param>
	<param-name>globeParam</param-name>
	<param-value>globeValue</param-value>
</context-param>
<!--在指定的Servlet下设置初始化参数-->
<servlet>
	<servlet-name>exampleServlet</servlet-name>
	<servlet-class>servlet.exampleServlet</servlet-class>
	<init-param>
		<param-name>servletParam</param-name>
		<param-value>servletParamValue</param-value>
	</init-param>
</servlet>
<servlet-mapping>
    <servlet-name>exampleServlet</servlet-name>
    <url-pattern>/exampleServlet</url-pattern>
  </servlet-mapping>

注意:不管是ServletVonfig接口的String getInitParameter(String name)方法还是ServletContext接口的String getInitParameter(String name)方法,都需要有该<param-name><param-value>,并且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就轻松许多了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值