• Javaweb-服务器内部转发


    GET请求有哪些:

    1、form标签method=get
    2、a标签
    3、link标签引入css
    4、script标签引入js文件
    5、img标签引入图片
    6、iframe引入 html页面
    7、在浏览器地址栏中输入地址后敲回车

    POST请求有哪些:

    1、form标签method=post

    b)HttpServletRequest类的常用方法

    i. getRequestURI()					获取请求的资源路径
    ii. getRequestURL()					获取请求的统一资源定位符(绝对路径〉
    iii.getRemoteHost()					获取客户端的ip地址
    iv. getHeader()						获取请求头
    v. getParameter()					获取请求的参数
    vi.getParameterValues()				获取请求的参数(多个值的时候使用)
    vii.getMethod()						获取请求的方式GET 或POST
    viii.setAttribute(key , value);		设置域数据
    ix. getAttribute(key );				获取域数据
    x. getRequestDispatcher()			获取请求转发对象
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    服务器内部转发

    是一次请求响应的过程,对于客户端而言,服务器内部经过了多少次转发,客户端是不知道的;
    客户端发出请求(地址指向Servlet1),该请求由Servlet1接收,然后Servlet1将请求转发到Servlet2,由Servlet2执行请求,执行完后将响应的数据发送给客户端。
    在这里插入图片描述
    在浏览器上进行访问时在链接时输入
    在这里插入图片描述
    ?后面的是传入的数据,username=sadmsda用于读取。

    创建一个Java程序用于读取数据,并在内部实现转发。

    package com.atguigu.servlet;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class Servlet1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        	//在servlet1中可以读取到传入的数据username
            String username = req.getParameter("username");
            System.out.println("在柜台1中查看参数:"+username);
            //设置域数据,这个域数据在一次服务中,是可以一直访问的,用来证明这个由servlet1转发到servlet2,
            req.setAttribute("key","柜台1已确认");
            //转发到servlet2
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
             requestDispatcher.forward(req,resp);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    Servlet2

    package com.atguigu.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class Servlet2 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        	//在Servlet2中也可以查询username的数据
            String username = req.getParameter("username");
            System.out.println("在柜台2中查看材料:"+username);
    		//查询域数据
            Object key = req.getAttribute("key");
            System.out.println("柜台1是否确认可行:"+key);
            System.out.println("柜台二执行操作");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在项目中的web中的WEB-INF下的xml文件中配置Servlet1和Servlet2

    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>Servlet1servlet-name>
            <servlet-class>com.atguigu.servlet.Servlet1servlet-class>
        servlet>
        <servlet-mapping>
            <servlet-name>Servlet1servlet-name>
            <url-pattern>/servlet1url-pattern>
        servlet-mapping>
    
        <servlet>
            <servlet-name>Servlet2servlet-name>
            <servlet-class>com.atguigu.servlet.Servlet2servlet-class>
        servlet>
        <servlet-mapping>
            <servlet-name>Servlet2servlet-name>
            <url-pattern>/servlet2url-pattern>
        servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    Web中‘/’斜杠的不同意义

    1、 在web中/斜杠是一种绝对路径。
    2、/斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
    3、/斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程路径
    1、 / servlet1
    2、servletContext.getRealPath(“/”);
    3、request.getRequestDispatcher(“”);
    特殊情况:
    response. sendRediect(“/");把斜杠发送给浏览器解析。得到http://ip:port/

  • 相关阅读:
    开放式运动耳机哪款好,盘点几款目前最好的开放式耳机分享
    matlab simulink仿真
    k8spod使用gpu
    C++复习笔记--C++常用注释规范
    多个JSON文件中目标Key值检索
    双指针算法
    【iMessage苹果相册推送苹果相册推】ProtocolBuffer拥有多项比XML更高档的序列化结构数据的特性
    设计模式(二)-创建者模式(1)-单例模式
    PHP yield
    rabbitmq-exporter部署方式
  • 原文地址:https://blog.csdn.net/hzsd_ygdcs/article/details/126192158