前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet技术

Servlet技术

作者头像
海盗船长
发布2020-08-27 17:50:14
4910
发布2020-08-27 17:50:14
举报
文章被收录于专栏:基础知识文章基础知识文章

1.Servlet基础

Servlet是一种独立于平台和协议的服务器端的Java技术,他使用Java语言编写,可以用来生成动态的Web页面。

1.Servlet体系结构
在这里插入图片描述
在这里插入图片描述

Servlet对象、ServletConfig对象与Serializable对象是接口对象,其中Serializable是java.io包中的序列化接口,Servlet对象、ServletConfig对象是javax.servlet包中定义的对象,这两个对象定义了Servlet的基本方法并封装了Servlet的相关配置信息GenericServlet对象是一个抽象类,他分别实现了上述的3个接口,此对象为Servlet接口及ServletConfig接口提供了部分实现,但他并没有对HTTP请求处理进行实现,这一操作由它的子类HttpServlet进行实现。这个对象为HTTP请求中的POST\GET等类型提供了具体的操作方法,所以通常情况下,我们所编写的Servlet对象都继承于HttpServlet,在开发之中所使用的具体的Servlet对象就是HttpServlet对象,因为HttpServlet对Servlet做出了实现,并提供了HTTP请求的处理方法。

2.Servlet技术特点
  • 功能强大
  • 可移植
  • 性能高效
  • 安全性高
  • 可扩展
3.Servlet与JSP的区别
  • 角色不同 JSP页面可以存在HTTP代码与Java代码并存的情况,而Servlet需要承担客户请求与业务处理的中间角色,只有调用固定的方法才能将动态内容输出为静态的HTML,所以JSP更具现实层的角色。
  • 编程方法不同 Servlet与JSP在编程方法上存在很大的区别,使用Servlet开发Web应用程序需要遵循Java的标准,而JSP需要遵循一定的脚本语言规范。
    • 在Servlet代码中,需要调用Servlet提供的相关API接口方法,才可以对HTTP请求及业务进行处理,对业务逻辑方面的处理能力更加强大。
    • 在JSP页面中,可以通过HTTP代码与JSP内置对象实现对HTTP请求及页面的处理,其显示界面的能力更加强大。
  • Servlet需要编译后执行
    • Servlet需要在Java编译器编译后才可以运行,如果Servlet在编写完成或修改后没有被重新编译,则不能运行在Web容器中。
    • JSP由JSP容器对其进行管理,他的编辑过程也有JSP容器对JSP进行自动编辑。所以,无论JSP文件是被创建还是修改,都不需要对其进行编译就可以执行。
  • 速度不同 JSP在每次执行不同的内容时,JSP都要对其进行编译,所以,他的效率低于Servlet的效率。

2.Servlet开发

Servlet主要应用于B/S接口的开发中,B/S结构指浏览器与服务器的网络开发模式。在这一模式中,Servlet充当一个请求控制处理的角色,当浏览器发送一个请求时,由Servlet进行接收并对其进行相应的业务逻辑处理,最后对浏览器做出回应,可见Servlet的重要性。

1.Servlet配置

配置的目的是将创建的Servlet注册到Servlet容器之中,以方便Servlet容器对Servlet的调用。在Servlet3.0之后,除了可以在web.xml文件中配置外,还可以利用注解来配置Servlet。 (1)在web.xml文件中配置com.mingrisoft包中的FirstServlet。 具体代码如下:

<!--注册Servlet-->
<servlet>
	<!--Servlet描述信息-->
	<description>This is my first Servlet</description>
	<!--Servlet的名称-->
	<servlet-name>FirstServlet</servlet>
	<!--Servlet类的完整名称-->
	<servlet-class>com.mingrisoft.FirstServlet</servlet-class>
</servlet>
<!--Servlet映射-->
<servlet-mapping>
	<!--Servlet名称-->
	<servlet-name>FirstServlet</servlet-name>
	<!--访问URL地址-->
	<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
在这里插入图片描述
在这里插入图片描述

(2)采用注解配置Servlet 采用注解的方式配置com.mingrisoft包中的FirstServlet。 具体代码如下:

import javax.servlet.annotation.WebServlet;
@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet{
......
}
3.在Servlet中实现页面转发

在Servlet中实现页面转发主要是利用RequestDispatcher接口实现的。RequestDispatcher接口可以把一个请求转发到另一个JSP页面。该接口包括以下两个方法。

  • forward()方法 forward()方法用于把请求转发到服务器上的另一个资源,可以是Servlet、JSP或HTML。 其语法格式如下:
requestDispather.forward(HttpServletRequest request,
					HttpServletResponse response);
  • include()方法 include()方法用于把服务器上的另一个资源(Servlet、JSP、HTML)包含到响应中。 其语法格式如下:
requestDispatcher.include(HttpServletRequest request,
					HttpServletResponse response);
4.Servlet处理表单信息

例:应用Servlet处理表单提交的数据。 (1)编写index.jsp页面,在该页面中添加用于收集留言信息的表单集表单元素。 具体代码如下:

<%@ page language="java" contentType="text/html;charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>处理表单信息页面</title>

<body>
	<form id="form1" name="form1" method="post" action="MessageServlet">
	留&nbsp;言&nbsp;人:
	<input name="person" type="text" id="person"/><br/><br/>
	留言内容:
	<textarea name="content" cols="30" rows="5" id="content"></textarea><br/><br/>
	<input type="submit" name="Submit" value="提交"/>&nbsp;
	<input type="reset" name="Submit2" value="重置"/>
	</form>
</body>
</html>

(2)编写一个名称为MessageServlet的Servlet,在该Servlet的doPost()方法中获取表单数据并输出。 其具体代码如下:

package com.wgh;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MessageServlet
 */
@WebServlet("/MessageServlet")
public class MessageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MessageServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		String person=request.getParameter("person");
		String content=request.getParameter("content");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		out.println("<html><head><title>获取留言信息</title></head><body>");
		out.println("留言人:"+person+"<br>");
		out.println("留言内容:"+content+"<br>");
		out.println("<a href='index1.jsp'>返回</a>");
		out.println("</body></html>");
		out.close();
	}

}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.Servlet过滤器

1.什么是过滤器

过滤器的实质是在web应用服务器上的一个web应用组件,用于拦截客户端与目标文件的请求,并对这些请求进行一定的过滤处理再发送给目标资源。过滤器的处理方式如下图所示:

在这里插入图片描述
在这里插入图片描述
2.过滤器的核心对象

过滤器对象放置在javax.servlet包中,其名称为Filter,它是一个接口。除这个接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象。这两个对象也同样是接口对象,位于javax.servlet包中,分别是过滤器的配置对象和过滤器的传递工具。

  • Filter接口 每一个过滤器都要直接或间接地实现Filter接口,在Filter接口中定义了3个方法。

方法声明

说明

public void init(FilterConfig filterConfig) throws ServletException

过滤器初始化方法,此方法在过滤器初始化时调用

public void doFilter(ServletRequest request,ServletResponse reponse,FilterChain chain)throws IOException,ServletException

对请求进行过滤处理

public void destroy()

销毁方法,以便释放资源

  • FilterConfig接口 FilterConfig接口由Servlet容器实现,主要用于获取过滤器中的配置信息,其方法说明如下:

方法声明

说明

public String getFilterName()

用于获取过滤器的名字

public ServletContext getServletContext()

获取Servlet上下文

public String getInitParameter(String name)

获取过滤器的初始化参数值

public Enumeration getInitParameterName()

获取过滤器的所有初始化参数

  • FilterChain接口 FilterChain接口仍然由Servlet容器实现,这个接口只有一个方法,其语法声明如下:
public void doFilter(ServletRequest request,
ServletResponse response)
throws IOException,ServletException

该方法用于将过滤后的请求传递给下一个过滤器,如果此过滤器已经是过滤器链中的最后一个过滤器,那么请求将传递给目标资源。

3.过滤器创建与配置

过滤器与Servlet十分相似,在创建之后同样需要对其进行配置。Servlet3.0中提供了采用注解的方式配置过滤器,其具体实现方法比较简单,只需要在创建类的代码上方采用以下语法格式进行配置就可以。

import javax.servlet.Eilter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

@WebFilter(filterName="DemoFilter",
urlPatters={"/*"},
initParans={
@WebInitParam(name="mood",value="awake")})
public class DemoFilter implements Filter{
...
}
  • filterName属性:用于指定Servlet过滤器名。
  • urlPatterns属性:用于指定哪些URL应用该过滤器。如果指定所有页面均应用该过滤器,可以设置该属性值为“ * ”。
  • initParams属性:用于指定初始化参数。

4.Servlet监听器

1.Servlet监听器简介

监听器的作用是监听Web容器的有效期事件,因此它是有容器管理的。利用Listener接口监听在容器中的某个执行程序,并根据其应用程序的需求做出适当的适应。

Listener接口

Event类

ServletContextListener

ServletContextEvent

ServletContextAttributeListener

ServletContextAttributeEvent

HttpSessionListener

HttpSessionEvent

HttpSessionActivationListener

HttpSessionEvent

HttpSessionAttributeListener

HttpSessionBindingEvent

HttpSessionBindingListener

HttpSessionBindingEvent

ServletRequestListener

ServletRequestEvent

ServletRequestAttributeListener

ServletRequestAttributeEvent

2.Servlet监听器的原理

Servlet监听器的功能比较接近Java的GUI程序的监听器,可以监听由于Web应用中状态改变而引起的Servlet容器产生的相应事件,然后接受并处理这些事件。

3.Servlet上下文监听

Servlet上下文监听可以监听ServletContext对象的创建、删除以及属性添加、删除和修改操作。该监听器需要用到以下两个接口: 1.ServletContextListener接口 该接口存放在javax.servlet包内,主要监听ServletContext的创建和删除。其有两个方法:

  • contextInitialized(ServletContextEvent event)方法:通知正在收听的对象应用程序已经被加载及初始化。
  • contextDestroyed(ServletContextEvent event)方法:通知正在收听的对象应用程序已经被卸载即关闭。

2.ServletAttributeListener接口 该接口存放在javax.servlet包内,主要监听ServletContext属性的增加、删除、修改。其有三个方法:

  • attributeAdded(ServletContextAttributeEvent event)方法:当有对象加入Application的范围时,通知正在收听的对象。
  • attributeReplaced(ServletContextAttributeEvent event)方法:当在Application的范围有对象取代另一个对象时,通知正在收听的对象。
  • attributeRemoved(ServletContextAttributeEvent event)方法:当有对象从Application的范围移除时,通知正在收听的对象。
4.HTTP会话监听

HTTP会话监听(HttpSession)主要用于监听信息,有4个接口可以进行监听。

1.HttpSessionListener接口

HttpSessionListener接口用于监听HTTP会话的创建、销毁,他提供了以下两个方法:

  • sessionCreated(HttpSessionEvent event)方法:通知正在收听的对象session已经被加载及初始化。
  • sessionDestroyed(HttpSessionEvent event)方法:通知正在收听的对象session已经被载出。

说明:HttpSessionEvent类的主要方法是getSession(),可以使用该方法回传一个session对象。

2.HttpSessionActivationListener接口

HttpSessionActivationListener接口用于监听HTTP会话active、passivate的情况,他提供了以下3个方法:

  • attributeAdded(HttpSessionBindingEvent event)方法:当有对象加入到session的范围时通知正在收听的对象。
  • attributeReplaced(HttpSessionBindingEvent event)方法:当在session的范围有对象取代另一个对象时,通知正在收听的对象。
  • attributeRemoved(HttpSessionBindingEvent event)方法:当有对象从session的范围移除时,通知正在收听的对象。

说明:HttpSessionBindingEvent类主要有3个方法:getName()、getSession()、getValues()

3.HttpBindingListener接口

HttpBindingListener接口用于指定监听HTTP会话中对象的绑定信息。他是唯一一个不需要再web.xml中设定的Listener的。HttpBindingListener接口提供以下两个方法:

  • valueBound(HttpSessionBindingEvent event)方法:当有对象加入session的范围时会被自动调用。
  • valueUnBound(HttpSessionBindingEvent event)方法:当有对象从session的范围内移除时会被自动调用。
4.HttpSessionAttributeListener接口

HttpSessionAttributeListener接口用于监听HTTP会话中属性的设置请求,他提供了以下两种方法。

  • sessionDidActivate(HttpSessionEvent event)方法:通知正在收听的对象,它的session已经变为有效状态。
  • sessionWillPassivate(HttpSessionEvent event)方法:通知正在收听的对象,它的session已经变为无效状态。
5.Servlet请求监听
1.ServletRequestListener接口

ServletRequestListener接口提供以下两种方法。

  • requestInitalized(ServletRequestEvent event)方法:通知正在收听的对象,ServletRequest已经被加载及初始化。
  • requestDestroyed(ServletRequestEvent event)方法:通知正在收听的对象,ServletRequest已经被载出,即关闭。
2.ServletRequestAttributeListener接口

ServletRequestAttributeListener接口提供了以下3个方法:

  • attributeAdded(ServletRequestAttributeEvent event)方法:当有对象加入request的范围时通知正在收听的对象。
  • attributeReplaced(ServletRequestAttributeEvent event)方法:当在request的范围内有对象取代另一个对象时通知正在收听的对象。
  • attributeRemoved(ServletRequestAttributeEvent event)方法:当有对象从request的范围移除时通知正在收听的对象。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Servlet基础
    • 1.Servlet体系结构
      • 2.Servlet技术特点
        • 3.Servlet与JSP的区别
        • 2.Servlet开发
          • 1.Servlet配置
            • 3.在Servlet中实现页面转发
              • 4.Servlet处理表单信息
              • 3.Servlet过滤器
                • 1.什么是过滤器
                  • 2.过滤器的核心对象
                    • 3.过滤器创建与配置
                    • 4.Servlet监听器
                      • 1.Servlet监听器简介
                        • 2.Servlet监听器的原理
                          • 3.Servlet上下文监听
                            • 4.HTTP会话监听
                              • 5.Servlet请求监听
                              相关产品与服务
                              容器服务
                              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档