JavaWeb(Servelt、Request、Response、Cookie)

Servlet

Servlet是运行在Web服务器端的Java应用程序,由Java编写,具有Java语言的有点,其与Java程序最大的区别是,Servlet对象主要封装了对http请求的处理,在Web请求的处理功能方面也非常强大

概念:运行在服务器端的小程序

     Servlet就是一个接口,定义了Java类被浏览器访问到(tomact识别)的规则

特点:

   1.功能强大

   2.可移植性

   3.性能高效

   4.安全性高

   5.可扩展

Servlet结构体系

       GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

            将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可

       HttpServlet:对http协议的一种封装,简化操作

              1. 定义类继承HttpServlet

              2. 复写doGet/doPost方法

Servlet配置

   1.声明Servlet对象     

       <servlet>

            <servlet-name>SimpleServlet</servlet-name>

            <servlet-class>com.Yummy。SimpleServlet</servlet-class>

       </servlet>

   2.映射Servlet      

       <servlet-mapping>

            <servlet-name>SimpleServlet</servlet-name>

            <url-pattern>/SimpleServlet</url-pattern>

       </servlet-mapping>

 urlpartten:Servlet访问路径

              1. 一个Servlet可以定义多个访问路径 : @WebServlet({"…"})

              2. 路径定义规则:

                     1. /xxx:路径匹配 

                     2. /xxx/xxx:多层路径,目录结构

                     3. *.do:扩展名匹配

执行原理:

    1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servelt的资源路径

    2.查找web.xml文件,是否由对应的<erl-pattern>标签体内容

    3.如果有,则在找到对应的<servlet-class>全类名

    4.tomact会将字节码文件加载进内存,并创建其对象

    5.调用其方法

Servlet3.0

       好处:支持注解配置,可以不需要web.xml

  

HTTP

概念:Hyper Text Transfer Protocol 超文本传输协议

              传输协议:定义了,客户端和服务器端通信时,发送数据的格式

              特点:

                     1. 基于TCP/IP的高级协议

                     2. 默认端口号:80

                     3. 基于请求/响应模型的:一次请求对应一次响应

                     4. 无状态的:每次请求之间相互独立,不能交互数据

              历史版本:

                      1.0:每一次请求响应都会建立新的连接

                      1.1:复用连接

Request

1. request对象和response对象的原理

       1. request和response对象是由服务器创建的。我们来使用它们

       2. request对象是来获取请求消息,response对象是来设置响应消息

2. request对象继承体系结构:

       ServletRequest             --   接口

              |      继承

       HttpServletRequest      --  接口

              |      实现

       org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request功能:

       1. 获取请求消息数据

              1. 获取请求行数据

                     方法:

                            1. 获取请求方式 :GET

                                    String getMethod() 

                            2. 获取虚拟目录:

                                    String getContextPath()

                            3. 获取Servlet路径:

                                    String getServletPath()

                            4. 获取get方式请求参数:

                                    String getQueryString()

                            5. 获取请求URI:/day14/demo1

                                    String getRequestURI()            

                                    StringBuffer getRequestURL()   

                                      URL:统一资源定位符  

                                      URI:统一资源标识符

                                          (URI的范围更大)

                            6. 获取协议及版本:

                                    String getProtocol()

                            7. 获取客户机的IP地址:

                                    String getRemoteAddr()

                           

              2. 获取请求头数据

                     方法:

                            String getHeader(String name):通过请求头的名称获取请求头的值

                              Enumeration<String> getHeaderNames():获取所有的请求头名称

                    

              3. 获取请求体数据:

                     请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参                                        数

                     步骤:                 

                            1. 获取流对象

                                   BufferedReader getReader():获取字符输入流,只能操作字符数据

                                  ServletInputStream getInputStream():获取字节输入流,可以操作所                                                                                                                         有类型数据

                            2. 再从流对象中拿数据

4. 其他功能:

           1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

                     1. String getParameter(String name):根据参数名称获取参数值   

                     2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 

                     3. Enumeration<String> getParameterNames():获取所有请求的参数名称

                     4. Map<String,String[]> getParameterMap():获取所有参数的map集合

              中文乱码问题:

                            get方式:tomcat 8 已经将get方式乱码问题解决了

                            post方式:

解决办法:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");

             2. 请求转发:在服务器内部的资源跳转方式

                     1. 步骤:

            1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

                            2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

                     2. 特点:

                            1. 浏览器地址栏路径不发生变化

                            2. 只能转发到当前服务器内部资源中。

                            3. 转发是一次请求

3. 共享数据:

                     域对象:一个有作用范围的对象,可以在范围内共享数据

                     request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

                     方法:

                            1. void setAttribute(String name,Object obj):存储数据

                            2. Object getAttitude(String name):通过键获取值

                            3. void removeAttribute(String name):通过键移除键值对

 4. 获取ServletContext:ServletContext getServletContext()

Response

HTTP协议:

       1. 请求消息:客户端发送给服务器端的数据

            数据格式:

                     1. 请求行

                     2. 请求头

                     3. 请求空行

                     4. 请求体

       2. 响应消息:服务器端发送给客户端的数据

               数据格式:

                    1. 响应行

                            1. 组成:协议/版本 响应状态码 状态码描述

                            2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。

                                   1. 状态码都是3位数字

                                   2. 分类:

                                          1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码

                                          2. 2xx:成功。如:200

                                          3. 3xx:重定向。如:302(重定向),304(访问缓存)

                                          4. 4xx:客户端错误。

                                                   如:

                                                      404(请求路径没有对应的资源)

                                                      405:请求方式没有对应的doXxx方法

                                          5. 5xx:服务器端错误。如:500(服务器内部出现异常)

                                                

                                  

                2. 响应头:

                     1. 格式:头名称: 值

                     2. 常见的响应头:

                         1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式

                            2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据

                                       in-line:默认值,在当前页面内打开

                                      attachment;filename=xxx:以附件形式打开响应体。文件下载

                     3. 响应空行

                     4. 响应体:传输的数据

 Response对象

         功能:设置响应消息

              1. 设置响应行

                     1. 格式:HTTP/1.1 200 ok

                     2. 设置状态码:setStatus(int sc)

              2. 设置响应头:setHeader(String name, String value)

                    

              3. 设置响应体:

                      步骤:

                            1. 获取输出流

                                   字符输出流:PrintWriter getWriter()

                                   字节输出流:ServletOutputStream getOutputStream()

                            2. 使用输出流,将数据输出到客户端浏览器

 会话技术

       1. 会话:一次会话中包含多次请求和响应。

               一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

       2. 功能:在一次会话的范围内的多次请求间,共享数据

       3. 方式:

              1. 客户端会话技术:Cookie

              2. 服务器端会话技术:Session

Cookie:

1. 概念:客户端会话技术,将数据保存到客户端

(Cookie 是一些数据, 存储于你电脑上的文本文件中。

当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息)

         步骤:

                     1. 创建Cookie对象,绑定数据

                             new Cookie(String name, String value)

                     2. 发送Cookie对象

                            response.addCookie(Cookie cookie)

                     3. 获取Cookie,获得数据

                            Cookie[]  request.getCookies() 

2. 实现原理  :  基于响应头set-cookie和请求头cookie实现

3. cookie在浏览器中保存的时间:

                     1. 默认情况下,当浏览器关闭后,Cookie数据被销毁

                     2. 持久化存储:

                             setMaxAge(int seconds)

                                   1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效

                                   2. 负数:默认值

                                   3. 零:删除cookie信息

   4. cookie共享问题

                  1.假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

                   默认情况下cookie不能共享,如果要共享,则可以将path设置为"/"

                   setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录

5. Cookie的特点和作用

                   1. cookie存储数据在客户端浏览器

                   2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

         作用:

                     1. cookie一般用于存出少量的不太敏感的数据

                     2. 在不登录的情况下,完成服务器对客户端的身份识别

        缺点

               1.cookie会被附加在每个HTTP请求中,无形中增加了流量。

               2.由于在HTTP请求中的cookie是明文传递的,安全性成问题。

               3. 浏览器限制Cookie的数量和大小。对于复杂的存储需求来说是不够用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值