99网
您的当前位置:首页Servlet之间的跳转

Servlet之间的跳转

来源:99网
Servlet之间的跳转

1.转向(Forward)

转向(forward)是通过RequestDispatcher对象的forward(HttpServletRequestrequest,HttpServletResponseresponse)来实现的。示例如下:RequestDispatcherdispatcher(“/servlet/LifeCycleServlet”);

=

request.getRequestDispatcher

dispatcher.forward(request,response);

getRequestDispatcher()方法的参数必须以“/”开始,“/”表示本Web应用程序的根目录。如上例中,表示要跳转的地址为http://localhost:8080/servlet/Servlet/LifeCycleServlet。

forward是最常用的方式,在Structs等MVC框架中,都是用Servlet来处理用户请求,把结果通过request.setAttribute()放到request中,然后forward到JSP中显示。当执行forward方法时,不能有任何输出到达客户端,否则会抛出异常,也就是说,在forward之前,不要使用out.println()语句向客户端输出。

2.重定向(Redirect)

重定向是通过服务器端返回状态码来实现的。301,302都表示重定向,区别是301表示永久性重定向,302表示临时性重定向。通过sendRedirect(Stringlocation)就可以实现重定向,下面是例子。本例子主要实现了Servlet来实现文件下载并统计下载次数。要下载的文件以及下载次数都保存在一个Map中。

publicclassRedictServletextendsHttpServlet{

Mapmap=newHashMap();//new一个Mappublicvoidinit()throwsServletException{时运行此方法,把文件内容放到map中去

map.put(“/download/setup.exe”,0);map.put(“/download/application.zip”,0);map.put(“/download/01.mp3”,0);

//放在init中,加载servlet

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

Stringfilename=request.getParameter(“filename”);if(filename!=null){

inthit=map.get(filename);map.put(filename,++hit);

//取下载次数//下载次数加1后保存

//重定向到

response.sendRedirect(request.getContextPath()+filename);文件

}else{

response.setCharacterEncoding(“UTF-8”);PrintWriterout=response.getWriter();response.setContentType(“text/html”);out.println(“”);

out.println(“”);

out.println(“文件下载”);out.println(“href='/css/style.css'>”);

rel='stylesheet'

HTML

PUBLIC

\\”-//W3C//DTD

HTML4.01

type='text/css'

out.println(“
”);

out.println(“文件下载”);//绘制页面表单

out.println(“”);out.println(“”);

out.println(“文件名”+“”);out.println(“下载次数”);out.println(“下载”);out.println(“”);

for(Entryentry:map.entrySet()){out.println(“”);

out.println(“”+entry.getKey()+“”);out.println(“”+entry.getValue()+“”);

out.println(“下载”);//target='_blank’目标地址在无标题的新页面中打开。onclick='location=location;‘页面刷新

out.println(“”);}

out.println(“”);out.println(“”);out.println(“”);out.println(“”);out.flush();out.close();}}

publicvoiddestroy(){

super.destroy();//Justputs“destroy”stringinlog

//遍历map的方法

//Putyourcodeheremap=null;}}

本文由西安白癜风医院(http://www.jkbdf120.com/)网站负责人阿牧整理分享,转载请注明!

因篇幅问题不能全部显示,请点此查看更多更全内容