请求对象 request 和响应对象 response(8)_HttpServletRequest 请求转发(服务器端跳转 forward)

本系列博客汇总在这里:请求对象 request 和响应对象 response 汇总


HttpServletRequest 请求转发(服务器端跳转 forward)

  1. 在 Servlet 中请求转发是大量要使用的,因为当我们访问一个 Servlet 的时候通常会执行一些后台的业务逻辑,然后跳转到一个结果页面,那么跳转到结果页面的这个过程就是请求转发,举个例子我们做登录的功能,我们填写用户名密码然后提交到一个负责登录的 Servlet,Servlet 为我们做用户名和密码的校验,如果我们都正确的话,我们就要跳转到登录的提示页面,如果错误就要跳转到登录失败的页面。

  2. Request 的请求转发也可以叫做服务器端的跳转,虽然有页面的跳转但是我们会发现地址栏是不会有变化的。

    request.getRequestDispatcher("/success.html").forward(request, response);
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 我们不但可以跳转到静态页面(后续主要讲解是动态页面我们通常会跳转到一个 jsp( jsp 在Servlet 之后产生)的提示页面,因为我们要返回的是动态页面,所有 html 是不适合(后续讲解))。还可以跳转到 Servlet,此时我们可以给 request 来设置当前域中的属性值,在该域之内(当前请求完成之前)都能获得到该属性值。

    request.setAttribute("name", "魏宇轩");
    request.getAttribute("name");
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 以上操作完整源码
    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.wyx.servlet.HelloServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
      </servlet-mapping>
      
      <servlet>
        <servlet-name>HelloServlet1</servlet-name>
        <servlet-class>com.wyx.servlet.HelloServlet1</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>HelloServlet1</servlet-name>
        <url-pattern>/hello1</url-pattern>
      </servlet-mapping>
    </web-app>
    

    1.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>请求转发</title>
    
    </head>
    
    <body>
    <h1>请求转发html页面</h1>
    <form action="/reqresp_demo4/hello" method="post">
    	姓名:<input name="name" type="text"><br>
    	年龄:<input name="age" type="text"><br>
    	简介:<textarea rows="10" cols="20" name="introduce"></textarea>
    	<br>
    	
    	<input type="submit" value="提交">
    </form>
    <hr>
    <h1>请求转发servlet</h1>
    <form action="/reqresp_demo4/hello1" method="post">
    	姓名:<input name="name" type="text"><br>
    	年龄:<input name="age" type="text"><br>
    	简介:<textarea rows="10" cols="20" name="introduce"></textarea>
    	<br>
    	
    	<input type="submit" value="提交">
    </form>
    </body>
    </html>
    

    success.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>请求转发</title>
    </head>
    <body>
    <h1>注册成功</h1>
    </body>
    </html>
    

    HelloServlet

    package com.wyx.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloServlet extends HttpServlet
    {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException
    	{
    
    		/**
    		 * 逻辑的处理
    		 */
    		System.out.println("servelt被访问");
    		
    		/**
    		 * request请求转发,服务器端的页面跳转,地址栏不变
    		 */
    		request.getRequestDispatcher("/success.html").forward(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException
    	{
    		doGet(req, resp);
    	}
    }
    

    HelloServlet1

    package com.wyx.servlet;
    
    import java.io.IOException;
    import java.util.Enumeration;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloServlet1 extends HttpServlet
    {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException
    	{
    		System.out.println("servelt1被访问");		
    		request.getRequestDispatcher("/hello").forward(request, response);
    	}
    
    	/**
    	 * post方式请求处理中文乱码
    	 */
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException
    	{
    		doGet(req, resp);
    	}
    }
    

    工程文件下载

如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值