servlet&http&request

本文介绍了Servlet 3.0的注解配置,不再依赖web.xml,并深入解析了HTTP协议的特点,包括1.1版本的复用连接和请求数据格式。同时探讨了request对象的功能、乱码问题及请求转发的使用,以及关键概念如HttpServletRequest和ServletContext。
摘要由CSDN通过智能技术生成

 Servlet

 1.Servlet3.0 注解配置,创建web项目时不用创建web.xml
 2.实现Servlet接口,继承GenericServlet或者继承HttpServlet
     继承GenericServlet,实现service()方法即可,一般不用
     继承HttpServlet,重写doGet和dePost方法
         HttpServlet是对http协议的一种封装
 3.Servlet相关配置
     urlpartten:访问路径。一个Servlet可以定义多个访问路径,一般定义一个。@WebServlet({"/d4","/dd4","/ddd4"})

HTTP

 超文本传输协议
     特点:
         1.基于TCP/IP的高级协议
         2.默认端口号是80
         3.一次请求对应一次响应
         4.每次请求相互独立
     
     历史版本:
         1.0:效率低,速度慢,每次请求都会建立新的连接
         1.1:复用连接,使用上一次的连接
 ​
 请求消息数据格式
      1. 请求行
             请求方式  请求url  请求协议/版本
             GET  /login.html  HTTP/1.1
             
                 请求方式:(面试题)
                         GET:
                             1.请求参数在请求行中,在url后
                             2.请求的url长度有限制
                             3.不太安全
                         POST:
                             1.请求参数在请求体中
                             2.请求的url长度没有限制
                             3.相对安全
      2.请求头:客户端告诉服务器信息
             请求头名称:请求头值
                 常见的请求头
                     1.user-Agent:浏览器告诉服务器,使用浏览器版本信息
                         可以在服务器端获取该头的信息,解决浏览器的兼容性问题
                     2.Referer:http://localhost/login.html
                         告诉服务器,从哪来。可以防盗链和统计工作
      
     3.请求空行
         空行,用于分割POST请求的请求头和请求体
     4.请求体(正文)
         封装POST请求的请求参数

Request

 1.request和response对象的原理
     都是由服务器创建。request对象获取请求消息,response对象设置响应消息
 ​
 2.request对象继承体系结构:
     ServletRequest      --  接口
         |   继承
     HttpServletRequest  -- 接口
         |   实现
     org.apache.catalina.connector.RequestFacade 类(tomcat)
 ​
 3.request功能:
     1.获取请求消息数据
         1. 获取请求行数据
             方法:
                 1.获取请求方式:GET
                     String getmethod()
                 2.获取请求虚拟目录:/day14
                     String getContextPath()
                 3.获取Servlet路径:/requestDemo1
                     String getServletPath()
                 4.获取get方式请求参数:name=zhangsan
                     String getQueryString()
                 5.获取请求URI:/day14/requestDemo1
                     String getRequestURI()
                     StringBuffer getRequestURL()
                         URL:统一资源定位符  http://localhost/day14/requestDemo1    中华人民共和国
                         URI:统一资源标识符  /day14/requestDemo1                    共和国
                 6.获取协议以及版本:HTTP/1.1
                     String getProtocol()
                 
                 7.获取客户机的IP地址:
                     String getRemoteAddr()
     
     2.获取请求头数据
         方法:
         String getHeader(String name):通过名称获取
         Enumeration<String> getHeaderNames():获取所有的请求头名称
     
     3.获取请求体数据
         请求体:POST请求方式
         1.获取流对象
             BufferedReader getReader(): 获取字符输入流
             SerletInputStream getInputStream(): 获取字节输入流,可以操作所有类型数据
         2.从流对象中拿数据  
                
               
                
 其他功能:
     获取请求参数通用方式:get和post都可以
     1.String getParameter(String name):根据参数名称获取参数值   username=zs&password=123
     2.String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game
     3.Enumeration<String> getParameterNames():获取所有请求参数的参数名称
     4.Map<String,String[]> getParameterMap():获取所有参数的map集合

 中文乱码问题:
     get方式:tomcat8解决了
     post方式:会乱码
         解决问题:获取参数前,设置request编码
             request.setCharacterEncoding("utf-8");  

 请求转发:在服务器内部的资源跳转方式
     1.步骤
         通过request对象获取请求转发器对象:
             RequestDispatcher getRequestDispatcher(String path)
         使用RequestDispatcher对象来进行转发:
             forward(SrevletRequest request,ServletResponse response)
         
         request.getRequestDispatcher("/requestDemo9").forward(request,response);
         
      2.特点:
         1.浏览器地址栏路径不发生变化
         2.只能转发到当前服务器内部资源中
         3.转发是一次请求
         
      3.共享数据:
         域对象:一个有作用范围的对象,可以在范围内共享数据
         request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
         
         方法:
             void setAttribute(String name,Object obj):存储数据
             Object getAttribute(String name):通过建获取值
             void removeAttribute(String name):通过键删除键值对
             
             request.setAttribute("msg","hello");
             Object msg = request.getAttribute("msg");
         
        
        4.获取ServletContext:
         ServletContext getServletContext()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值