Servlet之间的请求转发

2017-11-20 10:47:12

    Servlet之间可以实现跳转,从一个Servlet跳转到另一个Servlet,利用Servlet的跳转技术可以很方便的把一些业务模块分开,比如使用一个Servlet接收用户提交的数据,使用另一个Servlet读取数据库,最后跳转到另一个Servlet把处理结果展现出来.这也就是MVC模式(model,view,controller)


    MVC:用一种业务逻辑,数据,界面显示分离的方法组织代码,将业务逻辑聚焦到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入,处理和输出功能在一个逻辑的图形化用户界面的结构中.


    转发Forward简介:

    在Servlet中如果当前的web资源不想处理请求时,可以通过forward方法将当前的请求传递给其它的Web资源处理,这种方式称为请求转发.

    请求转发相关方法

    RequestDispatcher对象,可以通过request.getRequestDispatcher()方法获取调用这个对象的forward方法就可以实现请求转发.

    转发过程中携带数据:

    request本身也是一个域对象,request可以携带数据传递给其他web资源.

    setAttribute方法;

    getAttribute方法;

    removeAttribute方法;

    getAttributeNames方法;

    接下来使用一个简单的登陆界面,来进行测试

    index.jsp代码如下

<%--
  Created by IntelliJ IDEA.
  User: nosay
  Date: 17-11-16
  Time: 下午2:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h2>登陆界面</h2>
  <form action="test5" method="post">
    <p>用户名: <input type="text" name="username"></p>
    <p>密码: <input type="password" name="password"></p>
    <p><input type="submit" value="登陆"></p>
  </form>
  </body>
</html>

    预期效果,当用户登陆错误的时候,显示错误界面以及信息

    在根目录下建立登陆错误信息显示界面,loginError.jsp.内容如下:

<%--
  Created by IntelliJ IDEA.
  User: nosay
  Date: 17-11-20
  Time: 上午11:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>这是登陆错误页面</h1>

<h3><%=request.getAttribute("errorMessage")%></h3>
</body>
</html>

    建立Test5Servlet文件,内容如下

package com.nosay.servlet;

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

@WebServlet(name = "Test5Servlet",urlPatterns = "/test5")
public class Test5Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = "nosay";
        String pass = "123456";

        String name = request.getParameter("username");
        String password = request.getParameter("password");

        if(!name.equals(username))
        {
            request.setAttribute("errorMessage","帐户不存在");
            request.getRequestDispatcher("/loginError.jsp").forward(request,response);
            //帐户不存在
        }else if(!password.equals(pass))
        {
            request.setAttribute("errorMessage","密码错误");
            request.getRequestDispatcher("/loginError.jsp").forward(request,response);
            //密码错误
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

    当输入错误的用户名或者密码时,成功转发到了loginError界面,并携带相应的错误信息.