JSP 页面跳转求高手解惑

zhang_yugang 2015-09-10 05:07:47
先说问题吧:
第一种跳转方式:OK
RequestDispatcher rd=request.getRequestDispatcher("WEB-INF/jsp1/success.jsp");
rd.forward(request, response);

第二种跳转方式 NG
response.sendRedirect(request.getContextPath()+"/WEB-INF/jsp1/success.jsp");

错误信息’‘HTTPステータス 404 - The requested resource is not available.


具体代码参照如下'

1 我有一个项目工程 结构如下
项目名称为:Webest
--Webest
--WebContent
--WEB-INF
-- jsp1
--success.jsp
  ---index.jsp
注:WEB-INF和index.jsp为同级目录

2 我现在要做的是从index.jsp页面跳转到 success.jsp 页面
index.jsp代码如下
<div align="center">
<form action="login_process" name="form1" method="post">
用户名:<input type="text" name="username" value=""><br>
   密码:<input type="password" name="userpass" value=""><br>
<input type="submit" value="登陆">
<input type="reset" value="重置">
</form>
</div>


WEB.XML配置为:
<servlet>
<servlet-name>login_process</servlet-name>
<servlet-class>com.test.LoginProcessServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login_process</servlet-name>
<url-pattern>/login_process</url-pattern>
</servlet-mapping>


LoginProcessServlet跳转部分代码如下’'
if(username.equals("zhang")&&userpass.equals("123"))
{
//RequestDispatcher rd=request.getRequestDispatcher("WEB-INF/jsp1/success.jsp");
//rd.forward(request, response);
response.sendRedirect(request.getContextPath()+"/WEB-INF/jsp1/success.jsp");
}
else
{
RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}







...全文
157 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
oMadison 2015-09-15
web-inf下的jsp不能重定向过去吧?受保护的,转发到控制器是可以
回复
zhang_yugang 2015-09-10
引用 4 楼 shijing266 的回复:
reDirect后面加个return; 试试,能成功我在告诉你原因
是下面这样吗?如果是 不可以 if(username.equals("zhang")&&userpass.equals("123")) { response.sendRedirect(request.getContextPath()+"/WEB-INF/jsp1/success.jsp"); return; }
回复
reDirect后面加个return; 试试,能成功我在告诉你原因
回复
zhang_yugang 2015-09-10
引用 1 楼 shijing266 的回复:
重定向最好重定向到servlet吧 转发到页面,重定向到控制器
就字面意思而已: Redirect 翻译成重定向, forward翻译成转发。 两者的区别是: 重定向是客户端行为,转发是服务器行为 重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。 有个例子说明两者的区别很生动: 假设你去办理某个执照 重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。 转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来
回复
zhang_yugang 2015-09-10
引用 1 楼 shijing266 的回复:
重定向最好重定向到servlet吧 转发到页面,重定向到控制器
不清楚我这么写为什么不可以 原因请告知下
回复
重定向最好重定向到servlet吧 转发到页面,重定向到控制器
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-09-10 05:07
社区公告
暂无公告