1、解决request中参数为中文时,产生乱码【问题】[最常用的]
解决方案:中文字符编码集过滤器。
注意前提:过滤器只能处理post请求的参数。
get请求中提供的中文参数处理不了;
替补方案:new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”);
get请求中的参数:显示在地址栏,不安全;get请求传输的数量小,小于1k。
举例:
book.jsp
<body>
<form action="BookServlet" method="post">
<table>
<tr>
<td>编号</td>
<td><input type="text" name="isbn"></td>
</tr>
<tr>
<td>书名</td>
<td><input type="text" name="bookName"></td>
</tr>
<tr>
<td>作者</td>
<td><input type="text" name="author"></td>
</tr>
<tr>
<td>是否售出</td>
<td>是:<input type="radio" name="flag" value="是"></td>
<td>否:<input type="radio" name="flag" value="否"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
SetCharacterEncodingFilter.java
package com.hry.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter{
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("SetCharacterEncodingFilter类中的doFilter()方法");
String encoding=filterConfig.getInitParameter("encoding");
if(encoding!=null){
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void destroy() {
filterConfig=null;
}
}
BookServlet.java
package com.hry.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BookServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public BookServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String isbn=request.getParameter("isbn");
String bookName=request.getParameter("bookName");
String author=request.getParameter("author");
String flag=request.getParameter("flag");
System.out.println("isbn==="+isbn);
System.out.println("bookName==="+bookName);
System.out.println("author==="+author);
System.out.println("flag==="+flag);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
2、禁止某个网段的IP地址访问该网站
IpErrorFilter.java
package com.hry.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class IpErrorFilter implements Filter{
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("IpErrorFilter类中的doFilter()方法");
String ipError=filterConfig.getInitParameter("ipError");
String ip=request.getRemoteAddr();
if(ip.startsWith(ipError)){
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("这个网段禁止访问该网站!");
return;
}
chain.doFilter(request, response);
}
public void destroy() {
filterConfig=null;
}
}
3、清空缓存的过滤器:
ForceNocacheFilter.java
package com.hry.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForceNoCacheFilter implements Filter{
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setHeader("expires", "-1");
chain.doFilter(request, response);
}
public void destroy() {
filterConfig=null;
}
}