`

URL与RequestDispatcher

阅读更多
        今天照例继续自己的网站建设之旅,原本以为可以大有进展,结果又是被一个问题弄得很郁闷。通常在一个表单元素(form)中,action属性值定义了接收及处理表单元素的URL,而这个URL是会被显示在IE的地址栏中的。特别的,在WebWork中是由.action去处理用户提交表单,如<form action="register.action" method="post">,那么当用户点击submit按钮提交了表单之后,register.action 也就出现在IE 的地址栏中了,尽管处理业务逻辑的代码会将request分发(dispatch)到新的页面,但是IE的地址栏并没有因此而改变,并没有出现新的页面对应的URL。正是因为这一点,如果用户在register.action执行成功之后,再次刷新页面的话,就会重新发送对register.action的请求。但是这个时候,用户先前注册的动作已经成功了,这样一个新的请求相当于将相同的id重复注册了两次,这样我的程序也就会不留情面的抛出一个“此ID已经被注册”的信息了。说到这个问题,可以分成两个方面去讨论了。一个就是如何将URL进行屏蔽,第二个就是RequestDispatcher本身存在的问题。
        面对这个问题的时候,我能够想到的第一个办法就是将URL屏蔽,也就是说不让.action出现在URL中,用户如果还想执行一次register.action的话就不得不再次回到注册的页面,并且点击submit按钮去实现了。尽管这样做是不可能防止用户直接在地址栏输入URL去执行register.action的,但是,至少防止了误操作。然而这样的想法,我现在还没有找到实现的方式。
        另外的一个方面就是RequestDispatcher本身实现的问题。在xwork.xml文件中的result节点,type的属性通常有以下几种:dispatcher,redirect,velocity,xslt和chain。从文档上可以看到,dispatcher和redirect都是重定位到一个新的URL,其最大的区别在于redirect并不会将form的数据传递至目标URL,而dispatcher则是可以的。其实从WebWork的源码也可以看出,dispatcher类型对应了RequestDispatcher.forward方法,而redirect类型则是HttpServletResponse.sendRedirect方法。事实上,forward方法确实是不会使得其参数中包含的URL在IE地址栏中显示出来的。这样做也是可以理解的,毕竟如果将URL显示出来的话,一旦用户刷新了页面,那么原先dispatch的request也就随之消失了,这也是程序设计者不想看到的。那么有没有两者之间的平衡点呢?这个问题,只能留待你我共思索了。
分享到:
评论

相关推荐

    转发与重定向区别

    尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的...

    JSP中5种跳转foward,request等等的详细区别

    JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...

    C-ATM.zip jsp+servlet 项目【练手/总结/巩固】

    5. 使用转发时,需要使用`RequestDispatcher`对象获取转发器,并使用`forward()`方法执行转发操作。 6. 根据具体的业务需求,选择适合的方式进行页面跳转,注意考虑URL路径是否需要变化。 *************************...

    java-servlet-api.doc

    通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果...

    jsp跳转的五种方式

     它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。  如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意...

    Struts_config.xml详解

    forward="" //如果当前 Action 映射路径匹配,则指定一个要转发到的相对于模块的 URL,使用 RequestDispatcher.forward()执行转发 &gt; 注意:如上属性中,forward/include相斥,即二者在同一Action配置中只能存在一...

    java五种jsp页面跳转方法详解

    1. RequestDispatcher.forward()  是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到 另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward...

    jsp servlet面试题总结

    1. RequestDispatcher.forward() 方法:仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,不会改变 Request 的值。 2. HttpServletResponse.sendRedirect() 方法:完全的跳转,浏览器将会...

    JSP页面的跳转方式汇总

    1、使用超级链接跳转,2、使用表单提交的方式跳转页面,3、修改HTTP header的Location属性来重定向,4、JSP中实现在某页面停留若干秒后,自动重定向到另一页面,5、jsp标签跳转:“url” />,6、RequestDispatcher....

    用word书签替换的方式将网页内容导出到word

    首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date... RequestDispatcher rd = sc.getRequestDispatcher(newUrl); //定向的页面 rd.forward(request, response); } }

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JSP100选择题 JSP100选择题 适合考前练习

    关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期 C.在禁用Cookie时可以使用URL重写技术跟踪会话 D.隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示 …………

    Servlet查询数据库案例--Query(java源码)

    String url = config.getInitParameter("url"); String username = config.getInitParameter("username"); String password = config.getInitParameter("password"); // Use those init params to establish ...

    java web技术开发大全(最全最新)

    4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的中文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出中文乱码问题 4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX技术...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 ...&lt;intercept-url...

    JavaWeb知识点.docx

    JavaWeb 中有多种页面跳转方式,例如使用 response.sendRedirect() 方法、使用 RequestDispatcher 的 forward() 方法、使用 JavaScript 进行页面跳转等。 3. Session 跳转 Session 是 JavaWeb 中的一个重要概念,...

    java web开发技术大全

    4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的中文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出中文乱码问题 4.7.3 实例:解决服务端程序读取中文请求消息的乱码问题 4.7.4 实例:用AJAX...

Global site tag (gtag.js) - Google Analytics