Servlet重定向

HttpServletResponse接口的sendRedirect()方法可以用于将响应重定向到另一个资源,资源可能是servletjsphtml文件。

它接受相对和绝对URL。

它在客户端工作,因为它使用浏览器的URL栏来发出另一个请求。 所以,它可以在服务器内部和外部工作。

forward()和sendRedirect()方法的区别

RequestDispatcherforward()方法和HttpServletResponse接口的sendRedirect()方法之间存在很多差异。如下面给出:

forward()方法 sendRedirect()方法
forward()方法在服务器端工作。 sendRedirect()方法在客户端工作。
它将相同的请求和响应对象发送到另一个servlet。 它总是发送一个新的请求。
它只能在服务器内工作。 它可以在服务器内外使用。
示例: request.getRequestDispacher("servlet2").forward(request,response); 示例: response.sendRedirect("servlet2");

sendRedirect()方法的语法

public void sendRedirect(String URL)throws IOException;
Java

sendRedirect()方法的示例

response.sendRedirect("http://www.yiibai.com");

ServletRequest接口的getHeaderNames()方法返回一个包含所有头名称的Enumeration对象。ServletRequest接口的getHeader()方法返回给定头名称的头值。 在这个例子中,我们在servlet页面中显示一个请求的所有头信息。

getHeaderNames()方法的语法

public Enumeration getHeaderNames()
Java

getHeader()方法的语法

public String getHeader(String headerName)

ServletConfig对象是由每个servlet的Web容器创建的。这个对象可用于从web.xml文件获取配置信息。

如果从web.xml文件修改配置信息,就不需要更改servlet中的代码。因此,对于有特定配置内容需要不定时修改,这样会更容易管理Web应用程序。

ServletConfig的优点

ServletConfig的核心优点是,如果可以修改web.xml文件中的信息,则不需要编辑servlet代码文件。

ServletConfig接口的方法

编号 方法 描述
1 public String getInitParameter(String name) 返回指定参数名称的参数值。
2 public Enumeration getInitParameterNames() 返回所有初始化参数名称的枚举。
3 public String getServletName() 返回servlet的名称。
4 public ServletContext getServletContext() 返回ServletContext的对象。

如何获取ServletConfig的对象?

  • 可通过调用Servlet接口的getServletConfig()方法来返回ServletConfig对象。

getServletConfig()方法的语法

public ServletConfig getServletConfig();
Java

getServletConfig()方法的示例

ServletConfig config=getServletConfig();
//Now we can call the methods of ServletConfig interface
Java

为servlet提供初始化参数的语法

servlet的init-param子元素用于指定servlet的初始化参数。

<web-app>
<servlet>
......
<init-param>
<param-name>parameter_name</param-name>
<param-value>parameter_value</param-value>
</init-param>
......
</servlet>
</web-app>

ServletContext的对象由Web容器在部署项目时创建。 该对象可用于从web.xml文件获取配置信息。 每个Web应用程序只有一个ServletContext对象。

如果有信息要共享给多个servlet使用,最好在web.xml文件中使用<context-param>元素提供它。

ServletContext的优点

如果有任何信息要共享给所有的servlet使用,并且要让它容易维护,最好的办法就是在web.xml文件中提供这些信息,所以如果信息要更改直接在web.xml中修改,而不需要修改servlet代码。

ServletContext接口的使用

有很多ServletContext对象可以使用。 其中一些如下:

  • ServletContext对象提供容器和servlet之间的接口。
  • 使用ServletContext对象在web.xml文件获取配置信息。
  • ServletContext对象可用于设置,获取或删除web.xml文件中属性。
  • ServletContext对象可用于提供应用程序间通信。

参考以下示意图 -

常用的ServletContext接口方法

给出了一些常用的ServletContext接口方法。

序号 方法 描述
1 public String getInitParameter(String name) 返回指定参数名称的参数值。
2 public Enumeration getInitParameterNames() 返回上下文的初始化参数的名称。
3 public void setAttribute(String name,Object object) 在应用程序范围内设置给定的对象。
4 public Object getAttribute(String name) 返回指定名称的属性。
5 public Enumeration getInitParameterNames() 返回上下文的初始化参数的名称,作为String对象的枚举。
6 public void removeAttribute(String name) 从servlet上下文中删除给定名称的属性。

如何获取ServletContext接口的对象?

  • 通过ServletConfig接口的getServletContext()方法返回ServletContext对象。
  • 通过GenericServlet类的getServletContext()方法返回ServletContext对象。

getServletContext()方法的语法

public ServletContext getServletContext()
Java

getServletContext()方法的示例

//We can get the ServletContext object from ServletConfig object
ServletContext application=getServletConfig().getServletContext(); //Another convenient way to get the ServletContext object
ServletContext application=getServletContext();
Java

在Context范围内提供初始化参数的语法

Web应用程序的context-param元素的子元素用于定义应用程序范围中的初始化参数。 参数名称和参数值是context-param的子元素。param-name元素定义参数名称,param-value定义其值。参考以下配置代码片段 -

<web-app>
......
<context-param>
<param-name>parameter_name</param-name>
<param-value>parameter_value</param-value>
</context-param>
......
</web-app>

Servlet中的属性是可以从以下范围之一设置,获取或删除的对象:

  • 请求范围
  • 会话范围
  • 应用范围

Servlet程序员可以使用属性将信息从一个servlet传递给另一个servlet。它就像将对象从一个类传递给另一个类一样,以便我们可以一次又一次地重用同一个对象。

ServletRequest,HttpSession和ServletContext接口的属性特定方法

Servlet中有以下4种属性方法,它们具体如下:

序号 方法 描述
1 public void setAttribute(String name,Object object) 在应用程序范围内设置给定的对象。
2 public Object getAttribute(String name) 返回指定名称的属性。
3 public Enumeration getInitParameterNames() 返回上下文的初始化参数的名称,转为String对象的枚举。
4 public void removeAttribute(String name) 从servlet上下文中删除具有给定名称的属性。
GET POST
数据以报头发送,所以只能发送有限数据的数据量。 可以发送大量的数据,因为数据是以正文的形式发送的。
GET请求不受保护,因为GET数据是直接在URL栏中显示的。 POST请求相对安全一些,因为数据没有在URL栏中公开。
GET请求可以加入浏览器书签栏。 POST请求不可以加入浏览器书签栏。
GET请求是幂等的。这意味着直到第一个请求的响应前,第二个请求将被忽略。 POST请求不是幂等的。
GET请求比POST请求更有效率,以及使用频率更高。 POST请求比GET请求效率更低一些,以及使用频率更低。

过滤器是在请求的预处理和后处理时调用的对象。

主要用于执行转换,日志记录,压缩,加解密,输入验证等过滤任务。

servlet过滤器是可插拔的,即它在web.xml文件中定义,如果从web.xml文件中删除过滤项,则过滤器将被自动删除,因此不需要手动更改Servlet。所以过滤器维护成本会比较低。

参考模型图 -

注意:与Servlet不同,一个过滤器不依赖于另一个过滤器。

过滤器的使用

  • 记录所有传入的请求
  • 记录来自标计算机的IP地址的请求
  • 转变/转换
  • 数据压缩
  • 加密和解密
  • 输入验证等

过滤器的优点

  • 过滤器是可插拔的。
  • 一个过滤器不依赖于另一个资源。
  • 维护少,比较容易维护。

过滤器API

像Servlet一样,过滤器也有自己的API。 javax.servlet包中包含Filter API的三个接口,它们分别如下所示 -

  • Filter
  • FilterChain
  • FilterConfig

Filter接口

要创建一个过滤器,必须要实现Filter接口。Filter接口为过滤器提供了生命周期方法。

方法 描述
public void init(FilterConfig config) init()方法只被调用一次,用于初始化过滤器。
public void doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain) 当用户请求过滤器所映射到资源时,会调用doFilter()方法,它用于执行过滤任务。
public void destroy() 当过滤器从服务中取出时,调用此方法(仅一次)。

FilterChain接口

FilterChain对象负责调用链中的下一个过滤器或资源。对象在Filter接口的doFilter方法中传递。FilterChain接口只包含一个方法:

  • public void doFilter(HttpServletRequest request,HttpServletResponse response):它将控件传递给下一个过滤器或资源。

如何定义过滤器

我们可以使用与servlet相同方式来定义过滤器。下面来看看过滤器和过滤器映射的元素。在web.xml文件配置如下 -

<web-app>  

<filter>
<filter-name>...</filter-name>
<filter-class>...</filter-class>
</filter> <filter-mapping>
<filter-name>...</filter-name>
<url-pattern>...</url-pattern>
</filter-mapping> </web-app>
XML

对于映射过滤器,可以使用url-patternservlet-name。 url-pattern元素比servlet-name元素具有优势,即它可以应用于servletJSPHTML资源。

JAVA-Servlet内容的更多相关文章

  1. Java Servlet与Web容器之间的关系

    自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...

  2. java servlet+mysql全过程(原创)

    前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...

  3. Java Servlet完全教程

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

  4. Java Servlet——改进的CGI

    一.关于Servlet 在上一篇随笔中,我们看到了CGI存在的不足,其每次请求都需加载和运行一个CGI程序.若使用Java编写CGI程序,需要为每个请求都启动一个系统进程以及JVM,其执行效率大大降低 ...

  5. Java Servlet 技术简介

    Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...

  6. Java Servlet与Applet、CGI、JSP的比较

    Java Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面. Java Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启 ...

  7. Java Servlet 工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...

  8. 【Java】Java Servlet 技术简介

    Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...

  9. JavaWeb之Java Servlet完全教程(转)

    Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...

  10. Java Servlet API中文说明文档

    Java Servlet API中文说明文档 目 录 1.... Servet资料 1.1      绪言 1.2      谁需要读这份文档 1.3      Java Servlet API的组成 ...

随机推荐

  1. 程序员大佬推荐的java学习路线

    作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...

  2. centos 7部署ELK

    一.ELK介绍 Elasticsearch 是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展.高可用和管理便捷性而设计.Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与 ...

  3. cocos2d-x学习之路(三)——精灵与动作

    这里我们来看看所有游戏引擎中都会出现的一个重要的概念——精灵

  4. DICOM 协议学习笔记之 How Does DICOM Work ?

    How Does DICOM Work ? DICOM有一套自己自己的模型体系,在进行具体介绍之前,首先讲解下DICOM模型: 在DICOM世界当中,所有的包括患者.检查.医学设备等都可以被视为具有不 ...

  5. CentOS7使用winbind加入AD

    https://ishm.idv.tw/?p=336 CentOS 7 使用 winbind 加入 AD 需求:已經熟悉 CentOS 6 的 AD 加入方式,CentOS 7 已將 winbind ...

  6. 基于skip-gram做推荐系统的想法

    一.人工智能之自然语言处理 自然语言处理(Natural Language Processing, NLP),是人工智能的分支科学,意图是使计算机具备处理人类语言的能力. “处理人类语言的能力”要达到 ...

  7. pytorch 对变长序列的处理

    一开始写这篇随笔的时候还没有了解到 Dateloader有一个 collate_fn 的参数,通过定义一个collate_fn 函数,其实很多batch补齐到当前batch最长的操作可以放在colla ...

  8. PAT甲题题解-1037. Magic Coupon (25)-贪心,水

    题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积. 将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可. #include ...

  9. linux内核分析第二次实验

    http://blog.sina.com.cn/s/blog_78e559950102wnqp.html

  10. 关于github的使用心得

    https://github.com/JavaLizheng/test git常用命令: git config :配置git git add:更新working directory中的文件至stagi ...