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. JS基础内容小结(event 鼠标键盘事件)(三)

    var ev=ev||event 兼容性处理 得到焦点为 onfocus 失去焦点 onblur return false能阻止部分函数的执行 obj.select 选择指定元素里的文本内容 ———— ...

  2. k8s之使用secret获取私有仓库镜像

    一.前言 其实这次实践算不上特别复杂,只是在实践过程中遇到了一些坑,以及填坑的方法是非常值得在以后的学习过程中参考借鉴的 二.知识准备 1.harbor是一个企业级的镜像仓库,它比起docker re ...

  3. 微软职位内部推荐-Sr. SW Engineer for Privacy Id

    微软近期Open的职位: Job posting title: Senior Software Engineer for Privacy Identification Profession: Engi ...

  4. PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题

    题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...

  5. 2017-2018-2 1723《程序设计与数据结构》第三周作业 & 实验一 总结

    作业地址 第三周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1667 提交情况如图: 实验一:https://edu.c ...

  6. 配置HugePage

    翻译自https://www.thegeekdiary.com/centos-rhel-67-how-to-configure-hugepages/ 什么是HugePage HugePages是Lin ...

  7. ns3的输入输出奥秘(三) Tracing系统

    Tracing系统 (1)ASCII Tracing 还是以myfirst.cc为例子 可以在Simulator::Run()前面加上 AsciiTraceHelper ascii; pointToP ...

  8. php实现文件上传,下载的常见文件配置

    配置文件,php.ini uploadfile  post_max_size 规定表单上传的最大文件:

  9. Alpha冲刺——day7

    Alpha冲刺--day7 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  10. Docker(二十五)-Docker Machine

    Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在 ...