Servlet中转发和重定向的路径问题以及表单提交路径问题
一、请求转发与响应重定向的种类
有两种方式获得Servlet转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获得,一种是通过ServletContext的getRequestDispatcher()方法获得。
Servlet重定向的方法只有一种:HttpServletResponse的sendRedirect()方法。
这三个方法的参数都是一个URL形式的字符串,但在使用相对路径或绝对路径上有所区别。
二、请求转发与响应重定向中路径参数区别
假设通过http://localhost/myApp/cool/bar.do请求到达该方法所属的Servlet。
1、响应重定向 ◆ HttpServletResponse.sendRedirect(String)
参数可以指定为相对路径、绝对路径或其它Web应用。
i:相对路径:response.sendRedirect("foo/stuff.do"),容器相对于原来请求URL的目录加参数来生成完整的URL——http://localhost/myApp/cool/foo/stuff.do。
ii:绝对路径:response.sendRedirect("/foo/stuff.do"),容器相对于Web应用本身加参数建立完整的URL,这是因为 重定向response.sendRedirect("")是服务器向客户端发送一个请求头信息,由客户端再请求一次服务器,请求是在服务器外进行的,即完整的url是——http://localhost/foo/stuff.do。
iii:其它Web应用:response.sendRedirect("http://www.xxx.com")容器直接定向到该URL。
2、请求转发 ◆HttpServletRequest.getRequestDispatcher(String)
参数可以指定为相对路径或绝对路径。
i:相对路径情况下生成的完整URL与重定向方法相同。
ii:绝对路径与Servlet重定向不同,容器将相对于Web应用的根目录加参数生成完整的URL(即“/”根路径就是相对于虚拟路径)这是因为转发是在服务器内部进行的,写绝对路径/开头指的是当前的Web应用程序
。即:
request.getRequestDispatcher("/foo/stuff.do")生成的URL是http://localhost/myApp/foo/stuff.do。
3、 ◆ServletContext.getRequestDispatcher(String)
参数只能指定为绝对路径,生成的完整URL与HttpServletRequest.getRequestDispatcher(String)相同。
##################################
同理:
JSP 提交表单给 Servlet 路径问题
例如在web.xml中注册如下的servlet:
<servlet>
<servlet-name>addStudent</servlet-name>
<servlet-class>org.mytest.addStudent</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addStudent</servlet-name>
<url-pattern>/servlet/addStudent</url-pattern>
</servlet-mapping>
假如说,你工程名字为HibernateApp3,JSP页面提交表单给servlet时有两种写法:
1.相对路径: <formaction=servlet/addStudent method=post>...</form>
2. 绝对路径: <formaction="/HibernateApp3/servlet/addStudent" method=post>...</form>
或者 <formaction="<%=request.getContextPath()%>/servlet/addStudent" method=post>...</form>
注意:/代表根目录,如果路径是使用/开头,Tomcat就是webApp那个目录,如果你不是/开头代表你从当前工程的目录开始,例如:webApp/HibernateApp3/
这一点非常重要,很多提交表单时发生的错误都是因为提交路径出错造成的。
附、<ahref>的路径如果是"/"开头,则表示相对于主机,如果不是则表示相对于当前请求
综上所述:这里最最关键的要能清楚发出请求目的资源的请求是在服务器内部还是服务器外部:内部时,“/”就是项目的虚拟目录;外部时,“/”就是代表主机的根目录
Servlet中转发和重定向的路径问题以及表单提交路径问题的更多相关文章
- Servlet中转发和重定向的路径问题【转】
转发和重定向的路径问题 Servlet中有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获 ...
- Servlet中转发和重定向的区别
Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...
- [Java][Web] Servlet中转发和重定向比较
Servlet中页面跳转的两种方式 请求转发 使用requestDispatcher对象 request.getRequestDispatcher("path").forward( ...
- php中max_input_vars默认值为1000导致多表单提交失败
公司内一个php的后台管理系统,之前运行在apache上,后来我给转到nginx+php上后,其他功能运行正常,有一个修改功能提交表单后没有提交成功,查了代码没查出来什么问题,后来看了下php err ...
- 请求转发和重定向实现与Ajax实现表单登陆
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException ...
- form表单提交路径action="" 时的一种特殊情况
一.说明: 当页面的form表达的action=""时,表示表单会提交到当前页面,但是如果当前页面的URL里已经带有一个参数了,每次提交表达时这个参数依然存在,不管form表单里有 ...
- JSP怎么将表单提交到对应的servlet
昨天学习了这些内容,今天做一下分享吧,个人感觉挺乱的....呵呵,其实没事,慢慢就好了.难的不会,会的不难嘛!努力+认真就可以了,相信大家都可以的!加油!!! 下面的图是我用myeclipse建立的项 ...
- SERVLET API中转发与重定向的区别?
SERVLET API中转发与重定向的区别? 1.转发(forward方法) 转发仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址. 转发是服务器请求资源,服务器直接访问目标地址的 ...
- Servlet--超链接,表单提交,重定向,转发4种情况的路径
实际编码中我们经常写路径,写路径既可以写相对路径,也可以写绝对路径.我2年以前我就养成了习惯,只要是写路径我从来都是写绝对路径,因为万一将来我们的项目的目录发生变化,原来要是写相对路径的话就会有路径依 ...
随机推荐
- ansible shell 之运行后台程序
最近在使用ansible shell模块启动一个shell编写的脚本,该脚本主要功能式加载java的classpath并在后台运行这个java程序. 该脚本在linux shell中可以正常启动和停止 ...
- SAP_BASIS常用事务代码
1.SM66:监控当前系统的所有进程: 2.SM50/SM51:监视当前客户端的所有进程: 3.AL08:查看系统当前用户登录情况: 4.ST22:查看系统发生的DUMP: 5.ST03:查看系统当前 ...
- 启动运行python3时 UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 170: illegal multibyte sequence
重现 在cmd中输入Python,运行后,出现以下错误: Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(二)
本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(一)>,不清楚的请到我的博客空间查看后再看本篇博客 1)先创建一个Eureka服务注册中心模块,用来作为服务的 ...
- 7. react 基础 - React Developer Tools 的安装 及 使用
1. 安装 react 开发调试工具 React Developer Tools 打开 chrome 浏览器访问 chrome://extensions/ 点击右上角的 拓展程序 -> 打开 c ...
- 【收藏】免费开源好看的bootstrap后台模板
1.ace admin github:https://github.com/bopoda/acedemo:http://ace.jeka.by/ 2.CoreUI jQuery.Angular.Rea ...
- zabbix添加主机步骤
创建主机 配置基本信息 配置好后点击添加即可: [root@localhost opt]# systemctl start zabbix-agent [root@localhost opt]# net ...
- scrapy练习1
1.建立项目: #建立名为tuto的项目 scrapy startproject tuto 2.进入项目目录: cd tuto 3.建立域名任务: #minyan任务名:后面是任务对应的域名 scra ...
- 学习SEO之7天精通SEO
这本书大致看了一下,对于SEO基本上有了一个初步的认识,附上链接以供学习之用. 百度网盘:https://pan.baidu.com/s/1Bntzh2YF4tBd2AYAL1Q8vQ 心得:1.SE ...
- 关于自动化打包部署Jenkins的使用和配置
(未写完整,待续...) 名词解释: 1.Jenkins中对svn进行操作,可通过插件和脚本两种方式进行. 插件方式 在插件管理中安装"Subversion Plug-in",即可 ...