97超碰http://69.4.224.219/error/video_missing

您的邮箱:
请将您的邮箱作为登录账号
您的昵称:
4~30个字符,可以为中文
登陆密码:
6~30个半角字符
确认密码:
请再次输入密码
验 证 码 :
五种 JSP页面跳转方法详解
时间:  
作者:huhao; 
本文向您介绍Servlet页面跳转实现方法的几种区别,包括Servlet和JSP中的不同实现,比如Servlet中的redirect方式和forward方式得区别等。
1. RequestDispatcher.forward()
是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。
重定向后浏览器地址栏URL不变。
例:在servlet中进行重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
response.setContentType("text/ charset=gb2312");
ServletContext sc = getServletContext();
RequestDispatcher rd =
rd = sc.getRequestDispatcher("/index.jsp"); //定向的页面
rd.forward(request, response);
通常在servlet中使用,不在jsp中使用。
2. response.sendRedirect()
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
重定向后在浏览器地址栏上会出现重定向页面的URL
例:在servlet中重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
response.setContentType("text/ charset=gb2312");
response.sendRedirect("/index.jsp");
由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
(1) 使用response.sendRedirect时,前面不能有HTML输出;
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说 JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
(2) response.sendRedirect之后,应该紧跟一句return。
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
(1) Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法。
注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。
3. <jsp:forward page="" />
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
4. 修改HTTP header的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。
jsp文件代码如下:
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
5. JSP中实现在某页面停留若干秒后,自动重定向到另一页面
在html文件中,下面的代码:
<meta http-equiv="refresh" content="300; url=target.jsp">
它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
关键代码:
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
我要留言/评论
CopyRight ©
 京ICP备号背景:& & & &自己经手的一个java项目要实现带参页面跳转和页面跳转,完成任务后,总结一下自己知道了的几种方式。
实现:& & & &&
& & & &首先我们有两大种方式来实现页面跳转:1、JS(javascript);2、jsp跳转
我们先来说一下简单的js实现页面跳转:好几种,这里简单介绍3个
& & & & 1、window.location.href="URL";& & & & 2、window.navigate("URL")& & & & 3、window.location.replace("URL")& & & &还有一些什么self.location和parent.location什么的,自己去探索;相信对于第一种 & & & & & window.location.href="URL"大家都不陌生,这里就不多做介绍。第二种window.navigate("URL")这种方式只兼容于IE浏览器,不支持火狐啊、谷歌什么的。这里面需要说一下的是window.location.replace(&URL&),我们举例说明一下:
& & & 假如我们有三个界面,1.2.3.jsp,当我们设置好从1.jsp用herf跳转到2.jsp(前提2上面用了window.location.replace(&3.jsp&),那我们会直接到界面3,貌似看上去和window.location.herf=&URL&差不多,但是当我们点击上一步时,也就是调用window.history.go(-1); wondow.history.back();方法的时候就会知道,我们直接回到界面1了而不是界面2;
&&&&&&&&&function&Location()&{&&&
&&&&&&&&&&&&&&&window.location.href&=&"http://localhost:2416/Test/Index";&&&
&&&&&&&&&}&&&
&&&&&&&&&function&Navigate()&{&&&
&&&&&&&&&&&&&&&window.navigate("http://blog.csdn.net/liweizhong193516");&&&
&&&&&&&&&}//只兼容与IE浏览器&&&
&&&&&&&&&function&Replace()&{&&&
&&&&&&&&&&&&&&&window.replace("http://blog.csdn.net/liweizhong193516");&&
&&&&&&&&&}&&
Test/index界面代码:
&&&&function&Location()&{&&
&&&&&&&&window.location.href&=&"http://blog.csdn.net/liweizhong193516";&&
&&&&window.onload&=&function&()&{&&
&&&&&&&&window.replace("http://blog.csdn.net/liweizhong193516");&&
& & & &拿段代码来说,当我点击按钮,会跳转到Test/index界面,但是因为执行了window.onload方法,会跳转到我的博客界面,当我点击返回是,跳转到的是第一个界面,而不是Test/indes界面
下面说一下jsp实现界面跳转,我们学过的转发和重定向
JSP 跳转方式大约有三种:
&span&style="font-size:18"&request.getRequestDispatcher("1.jsp").forward(request,response);&/span&&&
在服务器组件收到用户请求后。经过它的处理后有传递给了另一个组件。不修改用户的请求码。各组件处理完之后在返回给用户,例如主页面的框架。
&用户请求&&&服务器&&&组件1&&&组件2&&&服务器&&&用户
这里发出的请求不变
2、重定向:
response.sendRedirect("success.jsp");&&
在服务器组件收到用户请求后。经过处理修改用户请求。在返回给用户。这样用户再次使用这个请求就会被动的使用新的请求了。重定向一般是为了防止用户提交完数据后点浏览器刷新或点后退之后产生重复提交)
& 用户请求-----》服务器-------》组件------&服务器-------》用户-------》新的请求
这里的请求不再是最初的请求,已经被改变了,url地址更换会很明显
注意事项:
1、此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException:&Can't&sendRedirect()&after&data&has&committed&to&the&client&&
at&com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)&&
2、这里跳转后,浏览器地址栏会发生变化,意味着url发生变化
3、要是跳到别的主机上,那语句后面的代码会继续执行,相当于开了一个新的线程,但是对于response就没有意义了,因为你看不到了。
3、&jsp:forward page="URL"/&
注意事项:
1、此语句前也不允许有out.flush(),如果有,会有异常:
2、跳转后浏览器地址栏不变,但是只能跳到当前主机下
3、此语句后面的语句执行完成后才会跳转&&
4、跳转后得路径变为当前路径,图片不是绝对路径将无法显示
4、在网上,还看到一个:
response.setStatus(302);&&
response.setHeader("location","newurl");&&&
这种setHeader要结合setStatus(302)使用,302是一个状态吗,标注浏览器要进行重定向了,同时渔具铅也不允许有out.flush(),如果有,不会报异常,只是不跳转页面;跳转后地址栏发生变化
总结: 通过以上的总结,重要一点的是我们必须要知道的转发和重定向,转发是什么:就是用户通过浏览器发送了http请求,而web服务器接受此请求后调用一个内部方法完成请求处理并来一个转发动作将目标资源发送给用户。在这里转发的路径必须是在同一个web容器下的url,不能转到其他的web路径上去,中间传递是自己容器内部的requeset,所以,可以共享request;浏览器地址栏的url地址不会变化,我们也就感受不出来服务器做了转发。
而重定向:是用户通过浏览器发送了http请求,web服务器接受请求后发送302状态码响应(重定向)并且回应客户浏览器一个新的location,当客户浏览器发现时302响应,自动在发送一个新的http请求,请求的url就是新给的location,服务器再根据这个请求寻找相应资源并发送给用户。这里的回应的location可以是任意的url,同时因为浏览器重新发送了http请求,也就不存在request传递的概念。这时候,客户浏览器上的地址栏显示的新的url(重定向后的路径),用户可以看到地址的变化。所以,重定向行为中,浏览器至少做出了两次访问请求。
阅读(...) 评论()你可能感兴趣的文章
扫描二维码用手机看文章一个关于Javaweb网页跳转的问题
一下是我的代码
Insert.java
package com.S
import java.io.IOE
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import com.bean.SqlB
import com.bean.JavaB
public class Insert extends HttpServlet {
private static final long serialVersionUID = 1L;
* The doDelete method of the servlet. &br&
* This method is called when a HTTP delete request is received.
* @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 doDelete(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 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 {
response.setContentType("text/html");
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 {
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取前台页面数据
String name =request.getParameter("name");
String password =request.getParameter("password");
String sex =request.getParameter("sex");
String sage = request.getParameter("age");
=Integer.parseInt(sage);
//封装到JavaBean对象中去
JavaBean jBean = new JavaBean();
jBean.setName(name);
jBean.setPassword(password);
jBean.setSex(sex);
jBean.setAge(age);
//调用模型层
String sql = "insert into TestNXSC(Name,Password,Sex,Age) values(?,?,?,?)";
sBean = new SqlBean();
int count =sBean.getInsert(sql,jBean);
String url="";
if(count&0)
url="SearchList.jsp";
url ="error.jsp";
request.setAttribute("error", "???");
request.getRequestDispatcher("SearchList.jsp").forward(request, response);
javax.servlet.ServletException: Error instantiating servlet class com.servlet.Insert
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
java.lang.ClassNotFoundException: com.servlet.Insert
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
web.xml中配置如下信息了吗
&servlet-name&名字&/servlet-name&
&servlet-class&类的完整路径&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&名字&/servlet-name&
&url-pattern&在浏览器显示的路径,也就是通过浏览器访问的时候的路径&/url-pattern&
&/servlet-mapping&
引用来自“cafelication”的评论web.xml中配置如下信息了吗
&servlet-name&名字&/servlet-name&
&servlet-class&类的完整路径&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&名字&/servlet-name&
&url-pattern&在浏览器显示的路径,也就是通过浏览器访问的时候的路径&/url-pattern&
&/servlet-mapping&&?xml version="1.0" encoding="UTF-8"?&
&web-app version="2.5" xmlns="/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_2_5.xsd"&
&servlet-name&Update&/servlet-name&
&servlet-class&com.servlet.Update&/servlet-class&
&/servlet&
&servlet-name&SearchById&/servlet-name&
&servlet-class&com.servlet.SearchById&/servlet-class&
&/servlet&
&servlet-name&Insert&/servlet-name&
&servlet-class&com.servlet.Insert&/servlet-class&
&/servlet&
&servlet-name&Delete&/servlet-name&
&servlet-class&com.servlet.Delete&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&Update&/servlet-name&
&url-pattern&/Update&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&SearchById&/servlet-name&
&url-pattern&/SearchById&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&Insert&/servlet-name&
&url-pattern&/Insert&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&Delete&/servlet-name&
&url-pattern&/Delete&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.jsp&/welcome-file&
&/welcome-file-list&
&/web-app&
servlet-api.jar这个有没有
--- 共有 1 条评论 ---
可还是报错

我要回帖

 

随机推荐