1.一个案例具体分析:request.getparameter()方法的用法及请求乱码处理
packagecom.request;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.util.Enumeration;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass Request3 extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
/*超链接乱码问题:如果是jsp文件中的超链接可以直接用java中的URLEncoder.eccoding()类解决,
* 但是html中的职能用解决get请求方式的方法解决。
*/
System.out.println(newString(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"));
}
public void test2(HttpServletRequest request)
throws UnsupportedEncodingException {
/*请求方式是get的乱码解决,请求方式为get方法的比较麻烦,需要手动解决,
* tomact服务器默认的编码是ISO-8859-1,所以需要手动修改编码。你也可以去修改tomcat安装路径中的conf中的server.xml文件
*/
String name =request.getParameter("name");
name = newString(name.getBytes("ISO-8859-1"),"UTF-8");
String password = newString(request.getParameter("password").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(name+"----"+password);
}
//表单中form的请求方式是post
public void test1(HttpServletRequest request){
//post请求方式的乱码解决,只对post起作用
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String name =request.getParameter("username");
String password =request.getParameter("password");
String sex =request.getParameter("sex");
String city =request.getParameter("city");
String[] likes =request.getParameterValues("likes");
String l = "";
for(inti=0;l!=null&&i<likes.length;i++){
String like = likes[i];
l = l+" "+like;
}
String mome =request.getParameter("mome");
System.out.println("用户名:"+name);
System.out.println("密 码:"+password);
System.out.println("性 别:"+sex);
System.out.println("城 市:"+city);
System.out.println("简 历:"+mome);
System.out.println("爱 好:"+l);
}
public void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2. 防盗链技术案例分析
packagecom.request;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass Request4 extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
//解决响应的乱码,其实响应乱码就是从这个servlet类获取的汉字,请求乱码是从html或jsp界面请求过来的汉字
response.setContentType("text/html;charset=UTF-8");
//获取请求头中的referer(参照,即防盗参数)
String referer =request.getHeader("referer");
//进行判断,如果查到的referer参数是空值或不是我要求的格式就重定向到我指定的界面,这里或者一定要是非。
if(referer==null ||!referer.startsWith("http://localhost")){
response.sendRedirect("/WebDemo/index.jsp");
return;
}
String value = "秘密!!!";
response.getWriter().write(value);
}
public void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3.Servlet API中定义了一个RequestDispatcher接口,俗称请求分派器。它定义了如下两个方法:
• public voidforward(ServletRequest request, ServletResponse response)
• public void include(ServletRequest request, ServletResponseresponse)
获取RequestDispatcher实例的方式主要有两种:
• 调用ServletContext接口提供的getRequestDispatcher(Stringurl)方法。
• 调用ServletRequest接口提供的getRequestDispatcher(Stringurl)方法。
• include方法:
RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能。被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略。
l 请求转发的应用场景:MVC设计模式(下篇具体介绍)
l request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
l request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。
ü setAttribute方法
ü getAttribute方法
ü removeAttribute方法
ü getAttributeNames方法
例子:
packagecom.request;
importjava.io.IOException;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclass Request5 extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/header.html").include(request,response);
response.getOutputStream().write("aaaaaaaaaa".getBytes());
request.getRequestDispatcher("/fooder.html").include(request,response);
}
public void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}