- _nosay
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界面,并携带相应的错误信息.