欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Servlet的forward与include方法

程序员文章站 2022-09-01 17:46:06
原文链接:http://www.yiidian.com/servlet/servlet dispatcher.html 使用Servlet请求转发与包含 RequestDispatcher接口提供了将请求转发到另一个资源的功能,该资源可能是Html,Servlet或Jsp。该接口还可以用于包含其他资 ......

原文链接:http://www.yiidian.com/servlet/servlet-dispatcher.html

使用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文件)的内容。

Servlet的forward与include方法

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

Servlet的forward与include方法

如上图所示,第二个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的配置信息。

Servlet的forward与include方法

3.2 编写inde.jsp页面

<%@ page contenttype="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <meta charset="utf-8">
    <title>一点教程网-请求转发与包含</title>
    <meta http-equiv="content-type" content="text/html" charset="utf-8">
</head>
<body>
<form action="servlet1" method="post">
    用户名:<input type="text" name="username"/><br/>
    密码:<input type="password" name="userpass"/><br/>
    <input type="submit" value="登录"/>
</form>
</body>
</html>

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

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         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">

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>loginservlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>welcomeservlet</servlet-name>
        <servlet-class>welcomeservlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>welcomeservlet</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>

</web-app>

3.6 运行测试

Servlet的forward与include方法

输入yiidian密码,正确的情况

Servlet的forward与include方法!

输入错误密码的情况

Servlet的forward与include方法

Servlet的forward与include方法

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站: