JAVA-Servlet内容
Servlet重定向
HttpServletResponse接口的sendRedirect()方法可以用于将响应重定向到另一个资源,资源可能是servlet,jsp或html文件。
它接受相对和绝对URL。
它在客户端工作,因为它使用浏览器的URL栏来发出另一个请求。 所以,它可以在服务器内部和外部工作。
forward()和sendRedirect()方法的区别
RequestDispatcher的forward()方法和HttpServletResponse接口的sendRedirect()方法之间存在很多差异。如下面给出:
| forward()方法 | sendRedirect()方法 | 
|---|---|
forward()方法在服务器端工作。 | 
sendRedirect()方法在客户端工作。 | 
| 它将相同的请求和响应对象发送到另一个servlet。 | 它总是发送一个新的请求。 | 
| 它只能在服务器内工作。 | 它可以在服务器内外使用。 | 
示例: request.getRequestDispacher("servlet2").forward(request,response); | 
示例: response.sendRedirect("servlet2"); | 
sendRedirect()方法的语法
public void sendRedirect(String URL)throws IOException;
sendRedirect()方法的示例
response.sendRedirect("http://www.yiibai.com");
ServletRequest接口的getHeaderNames()方法返回一个包含所有头名称的Enumeration对象。ServletRequest接口的getHeader()方法返回给定头名称的头值。 在这个例子中,我们在servlet页面中显示一个请求的所有头信息。
getHeaderNames()方法的语法
public Enumeration getHeaderNames()
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();
getServletConfig()方法的示例
ServletConfig config=getServletConfig();
//Now we can call the methods of ServletConfig interface
为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()
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();
在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的三个接口,它们分别如下所示 -
FilterFilterChainFilterConfig
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>
对于映射过滤器,可以使用url-pattern或servlet-name。 url-pattern元素比servlet-name元素具有优势,即它可以应用于servlet,JSP或HTML资源。
JAVA-Servlet内容的更多相关文章
- Java Servlet与Web容器之间的关系
		
自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...
 - java servlet+mysql全过程(原创)
		
前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...
 - Java Servlet完全教程
		
Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...
 - Java Servlet——改进的CGI
		
一.关于Servlet 在上一篇随笔中,我们看到了CGI存在的不足,其每次请求都需加载和运行一个CGI程序.若使用Java编写CGI程序,需要为每个请求都启动一个系统进程以及JVM,其执行效率大大降低 ...
 - Java Servlet 技术简介
		
Java Servlet 技术简介 Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么 ...
 - Java Servlet与Applet、CGI、JSP的比较
		
Java Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面. Java Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启 ...
 - Java Servlet 工作原理问答
		
导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...
 - 【Java】Java Servlet 技术简介
		
Java 开发人员兼培训师 Roy Miller 将我们现有的 servlet 介绍资料修改成了这篇易于学习的实用教程.Roy 将介绍并解释 servlet 是什么,它们是如何工作的,如何使用它们来创 ...
 - JavaWeb之Java Servlet完全教程(转)
		
Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servle ...
 - Java Servlet API中文说明文档
		
Java Servlet API中文说明文档 目 录 1.... Servet资料 1.1 绪言 1.2 谁需要读这份文档 1.3 Java Servlet API的组成 ...
 
随机推荐
- JS基础内容小结(event 鼠标键盘事件)(三)
			
var ev=ev||event 兼容性处理 得到焦点为 onfocus 失去焦点 onblur return false能阻止部分函数的执行 obj.select 选择指定元素里的文本内容 ———— ...
 - k8s之使用secret获取私有仓库镜像
			
一.前言 其实这次实践算不上特别复杂,只是在实践过程中遇到了一些坑,以及填坑的方法是非常值得在以后的学习过程中参考借鉴的 二.知识准备 1.harbor是一个企业级的镜像仓库,它比起docker re ...
 - 微软职位内部推荐-Sr. SW Engineer for Privacy Id
			
微软近期Open的职位: Job posting title: Senior Software Engineer for Privacy Identification Profession: Engi ...
 - PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题
			
题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...
 - 2017-2018-2 1723《程序设计与数据结构》第三周作业 & 实验一 总结
			
作业地址 第三周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1667 提交情况如图: 实验一:https://edu.c ...
 - 配置HugePage
			
翻译自https://www.thegeekdiary.com/centos-rhel-67-how-to-configure-hugepages/ 什么是HugePage HugePages是Lin ...
 - ns3的输入输出奥秘(三)  Tracing系统
			
Tracing系统 (1)ASCII Tracing 还是以myfirst.cc为例子 可以在Simulator::Run()前面加上 AsciiTraceHelper ascii; pointToP ...
 - php实现文件上传,下载的常见文件配置
			
配置文件,php.ini uploadfile post_max_size 规定表单上传的最大文件:
 - Alpha冲刺——day7
			
Alpha冲刺--day7 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...
 - Docker(二十五)-Docker Machine
			
Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在 ...