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

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

Servlet RequestDispatcher請(qǐng)求轉(zhuǎn)發(fā)

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

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

編號(hào) 方法 描述
1 public void forward(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException servlet的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器上的另一個(gè)資源(servletJSP文件或HTML文件)。
2 public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException 在響應(yīng)中包含資源的內(nèi)容(servletJSP頁(yè)面或HTML文件)。

如上圖所示,第一個(gè)servlet轉(zhuǎn)發(fā)請(qǐng)求到第二個(gè)servlet的響應(yīng)發(fā)送給客戶端。 第一個(gè)servlet的響應(yīng)不會(huì)顯示給用戶。

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

如何獲取RequestDispatcher的對(duì)象?

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

getRequestDispatcher方法的語(yǔ)法如下 -

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接口示例

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

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

工作流程,請(qǐng)參考下圖 -

打開(kāi)Eclipse,創(chuàng)建一個(gè)名稱為:ReqDispatcher 的動(dòng)態(tài)Web項(xiàng)目,其完整的項(xiàng)目結(jié)構(gòu)如下圖所示 -

下面是這個(gè)項(xiàng)目中相關(guān)文件的代碼實(shí)現(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");//設(shè)置服務(wù)器端編碼
        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");//設(shè)置服務(wù)器端編碼
        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>

訪問(wèn)項(xiàng)目的URL為: http://localhost:8080/ReqDispatcher/ ,如果代碼沒(méi)有錯(cuò)誤,那么應(yīng)該會(huì)看到類似如下的界面 -

當(dāng)輸入用戶名和密碼分別為:adminmypasswd,然后提交登陸,應(yīng)該會(huì)看到類似如下的界面 -

如果用戶名或密碼錯(cuò)誤,應(yīng)該會(huì)看到有一條錯(cuò)誤提示信息: Sorry UserName or Password Error!