how2j.cn


工具版本兼容问题
页面跳转是开发一个web应用经常会发生的事情。

比如登录成功或是失败后,分别会跳转到不同的页面。

跳转的方式有两种,服务端跳转和客户端跳转


步骤 1 : 首先准备两个页面 success.html fail.html   
步骤 2 : 服务端跳转   
步骤 3 : 客户端跳转   
步骤 4 : 服务端跳转与客户端跳转图示   

步骤 1 :

首先准备两个页面 success.html fail.html

edit
首先在web目录下准备两个页面 success.html,fail.html
分别用于显示登录成功 或者登录失败

如果登录成功了,就服务端跳转到success.html

如果登录失败了,就客户端跳转到fail.html
首先准备两个页面 success.html fail.html
<div style="color:green">login success</div>
<div style="color:green">login success</div>
<div style="color:red">login fail</div>

<div style="color:red">login fail</div>
在Servlet中进行服务端跳转的方式:


request.getRequestDispatcher("success.html").forward(request, response);


服务端跳转可以看到浏览器的地址依然是/login 路径,并不会变成success.html
服务端跳转
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); if ("admin".equals(name) && "123".equals(password)) { request.getRequestDispatcher("success.html").forward(request, response); } } }
在Servlet中进行客户端跳转的方式:

response.sendRedirect("fail.html");


可以观察到,浏览器地址发生了变化
客户端跳转
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); if ("admin".equals(name) && "123".equals(password)) { request.getRequestDispatcher("success.html").forward(request, response); } else{ response.sendRedirect("fail.html"); } } }
步骤 4 :

服务端跳转与客户端跳转图示

edit
服务端跳转与客户端跳转图示


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2021-05-22 request.getRequestDispatcher方式好像不行了
up-bear

关于 J2EE-Servlet-跳转 的提问



我用request.getRequestDispatcher("success.html").forward(request, response);进行跳转并没有显示success.html但是“进入”和“完成”两个字符串成功的打印 了,于是我把request.getRequestDispatcher("success.html").forward(request, response);换成了response.sendRedirect("success.html")结果成功的跳转到了 success.html,这是不是说明request.getRequestDispatcher("success.html").forward(request, response)这个方法已经不能用了。 如果有误,还请大佬指正。
public class LoginServlet extends HttpServlet {
	
	protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
        String name = request.getParameter("name");
        String password = request.getParameter("password");
 
        String html = null;
 
        if ("admin".equals(name) && "123".equals(password)) {
        	System.out.println("进入");
        	request.getRequestDispatcher("success.html").forward(request, response);
        	System.out.println("完成");
            html = "<div style='color:green'>登陆成功</div>";
        }
        else {
            html = "<div style='color:red'>登陆失败</div>";
        }
        PrintWriter pw = response.getWriter();
        pw.println(html);
 
    }
}

							


1 个答案

橘子西瓜
答案时间:2021-08-13
看仔细点,request.getRequestDispatcher 会显示内容,但是浏览器地址栏不变 response.sendRedirect 浏览器地址栏改变



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-02-07 HTTP状态405-此URL不支持HTTP方法GET
fql

关于 J2EE-Servlet-跳转 的提问
HTTP状态405-此URL不支持HTTP方法GET 类型状态报告 此URL不支持消息HTTP方法GET 说明 所请求的资源不允许使用指定的HTTP方法。 Apache Tomcat / 7.0.64




1 个答案

文玉
答案时间:2021-05-29
得加上 .html 不能直接输入http://127.0.0.1/login,而应该输入http://127.0.0.1/login.html



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-09-07 虽然讲得很简单,但这个教程重在一步步深入
2020-04-16 不清楚的朋友们可以看看这个
2020-03-10 名词应该是转发和重定向吧


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 30 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 J2EE-Servlet-跳转 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图