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的三个接口,它们分别如下所示 -
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>
对于映射过滤器,可以使用url-pattern
或servlet-name
。 url-pattern
元素比servlet-name
元素具有优势,即它可以应用于servlet
,JSP
或HTML
资源。