SERVLET和HTTP/REQUEST

服务器端的小程序

 

Servelt就是一个接口,定义了java类被浏览器访问到(tomcat的识别)规则。

 

Servlet执行原理:

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

    2、查找web.xml文件,是否有对应的<url-pattern>标签内容。

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

    4、tomcat会创建其对象。

 

Srevlet中的方法: 

      生命周期: 

              init():初识花方法,在Servelt创建是被执行,只会被执行一次;

                     Servlet什么时候被创建?

                            默认情况下,第一次访问时,Servlet会被创建,

                            可以配置Servlet创建的时机:

                                  在<servlet>标签下配置:

                                      (1)第一次被访问时创建,配置<load-on-startup>的值为负数

                                      (2)在服务器启动时创建:<load-on-startup>的值为0或正整数

                      Servlet的init()方法只会被执行一次,说明一个Servlet在内存中只存在一个队形,Servlet是单例的。

                                多个同时访问时,可能存在线程安全问题。解决方案:尽量不要在servlet中定义成员变量,就算定义了成员变量,也不要修改值。

                     

             Service():每一次servlet被访问时执行,会执行多次

                            每次访问Servlet时,Servlet方法都会被调用。

             Destory():销毁方法,服务器正常被关闭,执行一次。(只有正常被关闭)

             ServletConfig():获取Servlet配置信息

            ServletGetInfo():

 

 

Servlet注解配置:

          Servlet3.0

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

步骤:

      1、创建JavaEE项目,选择Servlet3.0版本以上

      2、创建项目时,可以不需要勾选web.xml

     3.定义一个类,实现Servlet接口,实现Servlet接口,实现方法

     4、在类上使用@WebService注解,并进行配置。@WebService("/资源路径")

 

 

IDEA与tomcat相关配置:

     1、IDEA会为每一个tomcat部署的每一个项目,单独建立一份配置文件。

             查看控制台输出:配置文件所在路径:在日志中可以看到,其中key为:(即为当前Tomcat的配置)

             Using CATALINA_BASE:   "C:\Users\Lenovo\.IntelliJIdea2019.1\system\tomcat\Unnamed_anti-fraud-poc_24"

     2、工作空间项目和tomcat部署的web项目不一样。

          tomcat真正访问的是tomcat部署的web项目,tomcat部署的web项目对应着工作空间项目的web目录下的所有资源。

         WEB-INF下的资源,不能被浏览器直接访问。

 

Srevlet体系结构:

       Srevlet -----接口

          |

          |

      GenericServlet ---------抽象类:将Servlet接口中其他的方法做了默认空实现,只将Servce方法做了实现

          |

          |

      HttpServlet-------------抽象类:  

 

 

Servlet相关配置:

       urlpartten:Servlet访问路径

          * 一个Servlet可以定义多个访问路径,:@WebServlet({"/dd","/aa"})

          *路径定义规则:/XXX

                               /XXX/XXX:多层路径

 

 

 

 

 

REQUEST:

       1.request的功能:

              1、获取请求消息数据

                  (1)获取请求行数据  *GET   

                           a:获取请求行方式String getmethod();

                           b:获取虚拟目录 :String getContextPath();

                           c:获取Servlet路径:Stirng getServletPath();

                           d:获取get方式的请求参数:  String getQueryString;

                           e:获取请求的URI:getRequestURI();

                                                       getRequestURL();完全路径

                           f:获取协议及版本:String getProtocol();

                           g:获取客户机IP地址:getRemoteAddr;

              2、获取请求头数据:

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

                           b:getHeaderNames();返回所有请求头的名称;返回迭代器。

              3、获取请求体数据:只有post请求方式,才有请求体,在请求体中封装了Post请求参数。

                   步骤:

                        1、获取流对象

                                  BufferReader  getReader();字符输入流,只能获取字符数据

                                  ServletInputStream(继承了InputStream) getInputStream();获取字节输入流,可以操作所有类型的数据。

                        2、再从流对象中拿取数据

                                 

其他功能:

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

              1、String getParameter(String name);根据参数名称获取数据值

              2、String【】 getParameterValues(Stirng name); 根据参数名称获取参数值的数组

              3、getParameterNames();获取所有请求参数名称

              4、Map<Stirng,String> getParameterMap();获取所有参数Map集合。

         *中文乱码问题:

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

                Post方式:在获取参数前,设置请求request的编码。 request.setCharacterEncoding("utf-8");  

      2、请求转发

             步骤:

                   1、通过request对象获取请求转发器对象: RequestDispacther getrequestDispatcher(String Path);   

                   2、使用RequestDispacther 对象来转发  forward(ServletRequest request,ServletResponse response);

              特点: 

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

                   2、 只能转发到服务器内部资源中

                   3、装发是一次请求

      3、共享资源

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

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

              方法:

                   1、setAttribute(String name,Object obj);存储数据

                   2、Object getAttribute(String name);获取数据

                   3、void removeAttribute(String name);通过键,移出键值对

                            

      4、获取ServletContext

                   ServletContext  getServletContext();

      

 

       HTTP响应消息:

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

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

              请求消息数据:

                             请求行、请求头、请求空行、请求体

              响应消息数据:

                             1、响应行:

                                        (1)组成:协议/版本  状态码  状态码描述

                                         (2)响应状态码:服务器告诉浏览器客户端,本次请求和响应的一个状态(状态码都是三位数字)

                                                  状态码分类:1XX:服务器接收客户端消息,但是没有接收完成,等待一段时间后,返回1XX

                                                                     2XX:成功 代表:200

                                                                     3XX:重定向  302重定向  304访问缓存

                                                                     4XX:客户端错误  404代表服务器没有对应请求路径(资源) 405请求方式没有对应的doXX方法

                                                                     5XX:服务端错误  500服务器内部出现异常

                             2、响应头:

                                        (1)格式  名称:值

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

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

                                                            *in-line:在当前浏览器页面打开

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

                             3、响应空行:

                             4、响应体:

                             

                Response设置响应消息:

                            1、设置响应行:setStatus(int sc);

                            2、设置响应头:setHeader(String name,String Value)

                            3、设置响应体:

                                          使用步骤:

                                                     1、获取输出流:

                                                               字符输出流:PrintWriter getPrintWriter();

                                                               字节输出流:ServletOutputStream getOutputStream();

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

1、重定向

            资源跳转的方式 :

                       1.告诉浏览器需要重定向,状态吗302

                       2。告诉浏览器B资源的路径:响应头localhost:B资源的路径

                          简单的重定向方法:response.sendRedirect("");

           重定向特点: redirect

                        1、重定向地址栏发生改变

                        2、重定向可以访问其他服务器资源(可以访问其他站点的资源)

                        3、重定向是两次请求

            转发特点:forward

                           1、转发地址栏路径不变

                           2、转发只能访问当前服务器下的资源

                           3、转发是一次请求

 

2、路径写法

           1、路径分类

                     绝对路径:通过绝对路径,可以确定唯一资源   如:/开头的路径

                     相对路径:通过相对路径,不可以确定唯一资源   不以/开头,以.开头,

                                    规则:确定访问当前资源和目标资源之间的相对位置关系

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值