servlet_Request_Response

Posted zenyang-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet_Request_Response相关的知识,希望对你有一定的参考价值。

HTTP 超文本传输协议

 

http协议由http请求和http响应组成

技术图片

 

 

 

 

 

Servlet: server applet  

使用Java语言编写的运行在服务器端的小程序Servlet是一种规范,本质就是一种接口定义了Java类被浏览器访问到Tomcat的规则

Servlet 本质是一个接口类, 有抽象方法   谁使用/访问web资源,谁来实现抽象方法

 

 

一个servlet类可以映射多个路径

 

一个路径不能映射多个servlet类

 

servlet规范:包含三个技术点:servlet技术,filter(过滤器)技术,listener(监听器)技术

技术图片

 

 

ServletContext对象
ServletContext是一个域对象,因为它随着服务器的启动而创建,服务器的关闭而销毁,所以存放在ServletContext中的数据是整个web应用所共享的
/获取ServletContext对象容器
        //ServletContext对象生命周期
        //创建  当前的web应用被部署到服务器上的时候就已经创建出来了
        //销毁  web服务器关闭的时候  或者web应用被服务器移除的时候
        //servlet生命周期
        //创建  当前的servlet第一次被访问的时候创建
        //销毁  服务器关闭的时候, 调用destory()方法的时候,当前servlet类被修改的时候,之前创建的servlet对象就被销毁的  紧接着Tomcat会创建一个新的servlet对象
        //你的web应用被第二次部署的时候,之前的Tomcat创建的servlet对象会被销毁
        ServletContext context = req.getServletContext();
        //存储  查找  删除
        //存储 setAttribute()
        context.setAttribute("num",1);//key value 键值对数据格式
        System.out.println(context);
        //查找
        Object num = context.getAttribute("num");
        System.out.println(num);
        //删除
        context.removeAttribute("num");

 

 

Get请求:

 

包含请求行:localhost:8080/虚拟路径/映射资源

 

请求头:

 

连接的方式 长连接

 

Connection: keep-alive

 

则是告诉服务器,自己支持这种操作,也就是我能读

 

懂你服务器发过来的上面这条信息,并且在以后发请求

 

的时候不用http而用https

 

Upgrade-Insecure-Requests: 1

 

Referer: http://localhost:8080/BigData/a.html   referer1.防盗链 2.统计流量

 

请求空行

 

 请求体:get没有请求体

 //获取请求方式
        String method = request.getMethod();
        System.out.println("请求方式:"+method);
        //获取请求的URI信息
        String requestURI = request.getRequestURI();
        System.out.println("请求uri信息:"+requestURI);
        //获取请求的url信息
        StringBuffer requestURL = request.getRequestURL();
        System.out.println("请求URL信息:"+requestURL);
        //获取请求协议版本号
        int localPort = request.getLocalPort();
        System.out.println("请求协议版本号:"+localPort);
        //获取请求的web应用名称 --->虚拟目录
        String contextPath = request.getContextPath();
        System.out.println("虚拟路径:"+contextPath);
        //获取get请求的表单数据
        String queryString = request.getQueryString();
        System.out.println("表单数据:"+queryString);
        //获取客户端主机的IP地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println("客户端主机IP:"+remoteAddr);
        //获取请求的资源路径
        String servletPath = request.getServletPath();
        System.out.println("请求资源路径:"+servletPath);
        //获取请求端口号的信息    tomcat
        int serverPort = request.getServerPort();
        System.out.println("请求端口号:"+serverPort);


        System.out.println("--------------");
        String referer = request.getHeader("referer");
        System.out.println("获取跳转到服务器内部的原地址"+referer);
        String connection = request.getHeader("Connection");
        System.out.println("获取连接方式"+connection);

        //迭代获取所有头名称
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String s = headerNames.nextElement();
            System.out.println(s);
        }

        //获取请求体中的内容  get方式是没有的  ,但是getParameter()适用于get请求方式
        String username = request.getParameter("username");
        System.out.println(username);

        //获取请求体中 同一个name对应的多个value值
        String[] hobbies = request.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }

        //获取所有的name
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.println(s);
        }

        //获取所有信息 
        Map<String, String[]> map = request.getParameterMap();
        Set<String> strings = map.keySet();
        for (String string : strings) {
            System.out.println(string +"="+ Arrays.toString(map.get(string)) );

//请求转发
内部转发客户端浏览器的地址不会发生改变,因为自始至终客户端只发送一个请求
通过内部转发路径一定要注意,因为操作过程是在服务器内部进行操作的,所以地址就不能够是客户端地址,而应该是服务器端地址,路径不能再写web应用的名称,/就web应
用的根目录通过内部转发,两个servlet或者两个界面的接收到的request内的内容是相同的因为内部转发是在服务器内部做的处理,所以内部转发是可以直接访问到WEB­INF下的内容的
//获取内部转发器  
         RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); 
        //进行转发 
        dispatcher.forward(request, response);
        //通常是连写 
        request.getRequestDispatcher("/index.js p").forward(request, response);

 

以上是关于servlet_Request_Response的主要内容,如果未能解决你的问题,请参考以下文章

R留学生作业代码代写代编程代编程代编程

IPEX-1代/3代/4代/5代,PCB天线底座,公头,样式及封装尺寸图

JVM 年轻代 老年代 持久代 gc

深圳本地网店代运营公司

C线程代业代写代调试POSIX Threads代编码

jvm中的年轻代 老年代 持久代 gc