servlet中的跳转和重定向
例如:访问一个servlet,需要让servlet把一个html页面返回,我们之前的方式需要这样做 request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String realPath = getServletContext().getRealPath("/hello.html");
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(realPath)));
String line = null;
while((line=in.readLine())!=null){
out.println(line);
}
out.flush();
in.close();
out.close();
这样可以实现效果,但是太麻烦了,而且很多都是固定的代码,所以可以进行封装.那么服务器内部跳转或者是客户端重定向都可以帮我们很容易的完成这个功能
4.1 服务器内部跳转
第一种情况:
服务器内部跳转到一个页面中
例如:
String url = "/hello.html";
//获得一个指向url的跳转对象
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
//进行跳转 跳转的同时把request和response转发给要跳转到的url
dispatcher.forward(request, response);
或者:
String url = "/hello.html";
request.getRequestDispatcher(url).forward(request, response);
第二种情况:
服务器内部跳转到一个servlet中
String url = "/TestServlet";
request.getRequestDispatcher(url).forward(request, response);
服务器内部跳转的特点:
1.需要使用request对象来完成
2.服务器内部跳转期间,其实就是把请求request和响应response转发到下一个资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。(我们可以利用这个特点将来在多个资源之间进行数据的传递)
3.服务器内部跳转,【不会】改变浏览器地址栏中的地址
4.2 客户端重定向
第一种情况:
客户端重定向到一个页面中
String url = "hello.html";
response.sendRedirect(url);
第二种情况:
客户端重定向到一个servlet中
String url = "TestServlet";
response.sendRedirect(url);
客户端重定向的特点:
1.需要使用response对象来完成
2.每一个客户端重定向,浏览器都会发出新请求,也就意味着在服务器内部会产生新的request对象和response对象
3.客户端重定向,【会】改变浏览器地址栏中的地址