在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ Servlet RequestDispatcher請求轉發(fā)
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫讀取記錄性能優(yōu)化
Servlet URL重寫帶參數(shù)
War文件
Web技術基礎
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會話
Servlet HttpServlet類
Servlet注冊表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗證過濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實例
Servlet啟動時加載
Servlet事件和監(jiān)聽器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計在線用戶數(shù)實例
Servlet RequestDispatcher請求轉發(fā)
Servlet使用注釋
Servlet過濾器示例
Servlet過慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實例
Servlet工作流程
Servlet會話跟蹤
Servlet登錄實例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應用示例
Servlet顯示所有頭信息
Servlet屬性設置
使用NetBeans創(chuàng)建Servlet
Servlet接口實現(xiàn)
Servlet上傳文件

Servlet RequestDispatcher請求轉發(fā)

RequestDispatcher接口提供將請求轉發(fā)送到另一個資源的功能,它可能是html,servletjsp等。 此接口也可用于包括另一資源的內容。它是servlet協(xié)作的一種方式。

RequestDispatcher接口中定義了兩種方法。它們分別是 -

編號 方法 描述
1 public void forward(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException servlet的請求轉發(fā)到服務器上的另一個資源(servlet,JSP文件或HTML文件)。
2 public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException 在響應中包含資源的內容(servletJSP頁面或HTML文件)。

如上圖所示,第一個servlet轉發(fā)請求到第二個servlet的響應發(fā)送給客戶端。 第一個servlet的響應不會顯示給用戶。

如上圖所示,第二個servlet的響應將包含在發(fā)送給客戶端的第一個servlet的響應中。

如何獲取RequestDispatcher的對象?

ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的對象。

getRequestDispatcher方法的語法如下 -

public RequestDispatcher getRequestDispatcher(String resource);

使用getRequestDispatcher方法的示例

RequestDispatcher rd=request.getRequestDispatcher("servlet2");  
//servlet2 is the url-pattern of the second servlet  
rd.forward(request, response);//method may be include or forward

RequestDispatcher接口示例

在這個例子中,驗證用戶輸入的密碼。如果密碼是:mypasswd,它會將請求轉發(fā)到WelcomeServlet,否則會顯示一條錯誤消息:sorry username or password error! 在這個程序中,使用的是硬編碼(即:直接在代碼中指定密碼)。大部分應用中都是在數(shù)據(jù)庫中存儲用戶信息和密碼的,在接下來的教程文章我們也會介紹和學習。在這個例子中,創(chuàng)建了以下幾個文件:

  • index.html:用于從用戶處獲取輸入。
  • Login.java:用于處理響應的servlet類。如果用戶輸入的密碼是mypasswd,它會將請求轉發(fā)給WelcomeServlet。
  • WelcomeServlet.java:用于顯示歡迎消息的servlet類。
  • web.xml:包含有關servlet信息的部署描述符文件。

工作流程,請參考下圖 -

打開Eclipse,創(chuàng)建一個名稱為:ReqDispatcher 的動態(tài)Web項目,其完整的項目結構如下圖所示 -

下面是這個項目中相關文件的代碼實現(xiàn) -

文件:index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登錄</title>
</head>
<body>
<div style="text-align:center;">
    <form action="/ReqDispatcher/login" method="post">
        用戶名:<input type="text" name="userName" /><br /> 
        密碼:<input type="password" name="userPass" /><br /> 
        <input type="submit" value="登錄" />
    </form>
</div>
</body>
</html>

文件:Login.java -

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Login
 */
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setCharacterEncoding("utf-8");//設置服務器端編碼
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        String name = request.getParameter("userName");
        String passwd = request.getParameter("userPass");

        // 用戶輸入的密碼是否為:mypasswd
        if (passwd.equals("mypasswd") && name.equals("admin")) {
            RequestDispatcher rd = request.getRequestDispatcher("welcome");
            System.out.println("Username is : "+name);
            rd.forward(request, response);
        } else {
            out.print("Sorry UserName or Password Error!");
            RequestDispatcher rd = request.getRequestDispatcher("/index.html");
            rd.include(request, response);
        }
    }

}

文件:WelcomeServlet.java -

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class WelcomeServlet
 */
public class WelcomeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");//設置服務器端編碼
        response.setContentType("text/html;charset=utf-8");
        String name = request.getParameter("userName");
        if(name==null || name=="") {
            name = "";
        }
        PrintWriter out = response.getWriter();
        //String chset = response.getCharacterEncoding(); 
        out.print("<!DOCTYPE html>\r\n" + 
                "<html>\r\n" + 
                "<head>\r\n" + 
                "<meta charset=\"UTF-8\">\r\n" + 
                "<title>登錄成功</title>\r\n" + 
                "</head>\r\n" + 
                "<body>");
        out.print("<b>登錄成功啦lala  ~ </b><hr/>");
        out.print("Welcome, " + name);
        out.close();
    }
}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>ReqDispatcher</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Login</servlet-name>
        <servlet-class>com.yiibai.Login</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>WelcomeServlet</servlet-name>
        <servlet-class>com.yiibai.WelcomeServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>WelcomeServlet</servlet-name>
        <url-pattern>/welcome</url-pattern>
    </servlet-mapping>
</web-app>

訪問項目的URL為: http://localhost:8080/ReqDispatcher/ ,如果代碼沒有錯誤,那么應該會看到類似如下的界面 -

當輸入用戶名和密碼分別為:adminmypasswd,然后提交登陸,應該會看到類似如下的界面 -

如果用戶名或密碼錯誤,應該會看到有一條錯誤提示信息: Sorry UserName or Password Error!