java servlet请求转发_使用Servlet请求转发与包含

使用Servlet请求转发与包含

RequestDispatcher接口提供了将请求转发到另一个资源的功能,该资源可能是Html,Servlet或Jsp。该接口还可以用于包含其他资源的内容。

1 RequestDispatcher接口的方法

RequestDispatcher接口提供两种方法。他们是:

public void forward(ServletRequest request,ServletResponse response)thorws ServletException,java.io.IOException:将请求从Servlet转发到服务器上的另一个资源(Servlet,JSP文件或HTML文件)。

public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException:在响应中包含资源(servlet,JSP页面或HTML文件)的内容。

ffae8a211e8db4b76e5d5c53c558cac8.png

如上图所示,第二个Servlet的响应被发送到客户端。第一个Servlet的响应不会显示给用户。

0745714f3ad31d792155ec2502313c72.png

如上图所示,第二个Servlet的响应包含在第一个Servlet的响应中,最终才发送回用户。

2 获取RequestDispatcher的对象

ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象。语法是:

public RequestDispatcher getRequestDispatcher(String resource);

getRequestDispatcher方法示例:

RequestDispatcher rd=request.getRequestDispatcher("servlet2");

//servlet2是第二个Servlet的url-pattern

rd.forward(request, response);//这里可以是forward或者include方法

3 RequestDispatcher的案例

3.1 案例涉及元素及流程说明

在本案例中,我们需要验证用户输入的密码。如果密码是yiidian,将转发请求到WelcomeServlet,否则将显示错误消息:“抱歉,用户名或密码错误!”本案例,我们的用户名和密码都是采用硬编码方式,当然您也可以将其改为从数据库中查询,可以参考后面的开发案例《使用Servlet完成用户登录》。以下文件是本案例需要的文件:

index.jsp文件:用于从用户获取输入。

LoginServlet.java文件:用于处理响应的Servlet类。如果用户输入了正确的密码,它将把请求转发到WelcomeServlet。

WelcomeServlet.java文件:用于显示欢迎消息的Servlet类。

web.xml文件:Web部署描述符文件,其中包含所有Servlet的配置信息。

42c2a13fa032e16ecdb2c33a25aae1d3.png

3.2 编写inde.jsp页面

一点教程网-请求转发与包含

用户名:

密码:

3.3 编写LoginServlet

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

/**

* 一点教程网 - http://www.yiidian.com

* 验证密码是否正确

*/

public class LoginServlet extends HttpServlet{

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

String n=request.getParameter("userName");

String p=request.getParameter("userPass");

if(p.equals("yiidian")){

RequestDispatcher rd=request.getRequestDispatcher("servlet2");

rd.forward(request, response);

}else{

out.print("抱歉,用户名或密码错误!");

RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");

rd.include(request, response);

}

}

}

3.4 编写WelcomeServlet

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.PrintWriter;

/**

* 一点教程网 - http://www.yiidian.com

* 欢迎页面

*/

public class WelcomeServlet extends HttpServlet{

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

String n=request.getParameter("userName");

out.print("欢迎你,"+n);

}

}

3.5 配置web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

Login

LoginServlet

WelcomeServlet

WelcomeServlet

Login

/servlet1

WelcomeServlet

/servlet2

3.6 运行测试

24a4a4aa4ea4c78a95b6157496ac57ab.png

输入yiidian密码,正确的情况

7b34d8f1784312794fb433c08857050d.png

输入错误密码的情况

57aebcf70bea1a7662a72600d82db8de.png

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页