首页 > 其他 > 详细

servlet 2020-7-6

时间:2020-07-06 23:01:53      阅读:52      评论:0      收藏:0      [点我收藏+]

1.servlet的概念:是server Applet的缩写,指服务器应用程序,用来交互式的处理客户端发送的请求并完成相应的响应,是一项动态网页技术;是Java web程序开发的基础和javaee的重要组成部分

2.servlet的作用:接收客户端请求,完成操作,动态的生成网页,将包含操作结果的动态网页响应给客户端

3.补充:servlet的作用:指定【动态资源文件】开发步骤
                       指定http服务器调用动态资源文件规则
                       指定http服务器管理动态资源文件实例对象规则
4.servlet实现类接口;1.servlet接口来自于servlet规范下一个接口,这个接口存在于http服务器提供的jar包
                     2.Tomcat服务器下的lib文件由一个servlet.api.jar存放servlet接口(javax.servlet.Servlet接口)
                     3.http服务器能调用【动态资源文件】必须是一个servlet接口实现类
注意:不是所有的Java类都是动态资源文件,只有实现了servlet接口的Java类才是动态资源文件,才能被Tomcat服务器所调用

5.servlet接口实现类开发步骤:
    1.创建一个Java类继承HttpService父类,使成为一个servlet接口实现类
    2.重写HttpService父类两个方法,dopost 或 doget
    3.将service接口实现类信息【注册】到Tomcat服务器
    【网站】--》【web】--》【web_INF】-->web.xml
    <!--将servlet接口实现类类路径地址交个Tomcat-->
    <servlet>
        <servlet-name>mm</servlet-name><!--声明一个变量来存储servlet接口实现类类路径-->
            <servlet-class>com.bingjingpoer.onesertvlet</servlet-class><!--声明servlet接口实现类类路径-->
        </servlet>
    <!--为了降低用户访问servlet接口实现类难度,需要设置简短别名-->
    <servlet-mapping>mm</servlet-mapping>
    <url-pattern>/one</url-pattern><!--注意:别名要以/开头-->
    

6.Tomcat根据servlet规范调用servlet接口实现类规则:
    1.Tomcat有权创建servlet接口实现类实例对象 Servlet oneservlet=new Oneservlet();
    2.Tomcat根据实例对象调用service()方法处理当前请求 oneservlet.service();

7.servlet对象生命周期:
    1.网站中所有的servlet接口实现类的实例对象,只能由http服务器负责创建
    2.在默认情况下,http服务器接收到对于当前servlet接口实现类第一次请求时,自动创建这个servlet接口实现类对象
    3.在手动配置情况下,要求http服务器在启动时自动创建某个servlet接口实现类对象
    <servlet-name>mm</servlet-name>
    <servlet-class>com.dayo1.oneservlet</servlet-class>
    <load-on-start>20</load-on-start>
    4.在http服务器运行期间,一个servlet接口实现咧只能被创建一个实例对象
    5.在http服务器关闭时,自动将网站中所有的servlet对象烧毁

8.HttpServletResponse接口:
    1.介绍
        HttpServletResponse接口来自于servlet规范中
        HttpServletResponse接口实现类由http服务器负责提供
        HttpServletResponse接口负责将doget/dopost方法执行结果写入到响应体交给浏览器
        我们习惯将HttpServletResponse接口修饰的对象称【响应对象】
    2.主要功能:
        1.将执行结果以二进制的形式写入到【响应体】
        2.设置响应头中【content-type】属性值,从而控制浏览器使用对应的编译器将响应体二进制数据编译
        3.设置响应头【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求;

9.HttpServletRequest接口:
    1.介绍:HttpServletRequest接口负责在doget/dopost方法运行时读取http请求协议包中信息,我们习惯将它修饰的对象称为【请求对象】
    2.作用:
        1.可以读取http请求协议包中【请求行】信息
        2.可以读取保存在http请求协议包中【请求头】或【请求体】的参数信息
        3.可以代替浏览器向http服务器申请资源文件调用
    
10.在doget方法中,执行的结果需要发送到响应包中在浏览器上显示,我们可以在方法中使用响应对象response向服务器借输出流,通过输出流可以输出我们的数据到响应体,从而在浏览器显示,代码如下;
    PrintWriter writer =response.getWriter();
    writer.println(我们想要发送的数据);

11.在默认情况下,浏览器的content-type属性值为“text”文本编译器;所以我们需要在得到输出流之前,通过响应对象对响应头中【content-type】属性进行重新赋值用于给浏览器采用指定编译器解析数据;代码如下:
        Stringresult="hello<br>World<br>java<br><b>welcome</b>";
        resp.setContentType("text/html");
打印中文:resp.setContentType("text/html;charset=utf-8");
可以通过响应对象将地址赋值给响应头中的location属性;浏览器会自动将location的值在地址栏上发送请求;代码如下:
    String re2="http://www.baidu.com";
        resp.sendRedirect(re2);

12.URI:资源文件精准定位符,是从URL上截取的一个字符串,格式:/网站名/资源文件名。它用于让http服务器对被访问的资源文件的定位

13.浏览器以get方式发送请求,请求参数保存在【请求头】,在http请求协议包到达http服务器后,第一件事就是解码,【请求头二进制内容】由【Tomcat】负责解码,Tomcat默认使用【utf-8】字符集,能解释世界上所有的文字;
   浏览器以post方式发送请求,请求参数保存在【请求体】,在http请求协议包到达http服务器后,第一件事就是解码,【请求体二进制内容】由当前请求对象负责解码,请求对象默认使用ISO字符集,是一个东欧语系;
    解决方案;在post请求方式下,在读取请求体内容之前,应该通知请求对象使用utf-8字符集对请求体内容编码;代码演示:
    req.setCharacterEncoding("utf-8");

14.请求对象和响应对象生命周期;
    1.在http服务器接收到浏览器发送的【http请求协议包】后,自动为当前的【http请求协议包】生成一个【请求对象】和【响应对象】
    2.在http服务器调用doget/dopost方法时,负责将【请求对象】和【响应对象】作为参数传递到方法,确保doget/dopost正确执行
    3.在http服务器准备推送http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】烧毁;

15.欢迎资源文件
    1.前提;用户记住网站名,但是不会记住网址资源文件地址        2.默认欢迎资源文件;用户发送一个针对某个网站的【默认请求】时,此时由http服务器自动从当前网站返回的资源文件
    正常请求;http://localhost:8080/myWeb/index.html
    默认请求:http://localhost:8080/myWeb/;
    3.Tomcat对于默认欢迎资源文件定位规则;
        1.<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
依次去找,还没找打,打回404;
    4.设置当前网站的默认欢迎资源文件规则:
        1.在当前网站的web/WEB-INF/web-xml
        2.规则:如上代码演示

16.http状态码:
    1.介绍:由三位数字组成,http服务器在推送响应包之前,根据本次请求处理情况将状态码写入到响应包中【状态行】
    如果http服务器针对本次请求,返回对应的资源文件,通过状态码通知浏览器应该如何处理结果;如果没找到对应的资源文件,状态码就会告知浏览器不能提供服务的原因
    2.分类;(举例常见的状态码)
        100:通知浏览器本次返回的资源文件不是独立资源文件,需要浏览器继续向服务器索要依赖的文件(你在发起一次呗,我给你依赖文件哦)
        200:通知浏览器本次返回的资源文件是独立资源文件(亲,我已经全部给你了哦)
        302:通知浏览器本次返回的是资源文件地址,需要浏览器根据这个地址自动发起请求索要资源文件,例如:                     resp.sendRedirect("http://www.baidu.com");(亲,响应对象给了你一个地址,你在去找哦)
        404:告知浏览器在服务端没有找到资源文件(不好意思,没找到哦)
        405:通知浏览器在服务端已经定位到被访问的servlet,但是这个servlet处理浏览器采用的请求方式不对(亲,servlet的方法和浏览器的请求方式不同哦)
        500:告诉浏览器,在服务端找到了servlet,但是在运行时出现了异常;(亲,servlet在测测呗,有bug哦)

17.多个servlet之间的调用规则:
    1.前提条件:某些来自于浏览器的请求,往往需要服务端多个servlet协同处理,但是浏览器一次只能访问一个servlet,导致用户需要手动通过浏览器发送多次请求
    2.我们到设置无论本次请求涉及多少个servlet,用户只需要请求一次即可;
    3.处理方法:
        1.重定向解决方案
        2.请求转发

18.补充上面:浏览器请求;通过地址栏请求是get方式,通过超链接请求是get方式,表单可以get或者post;

19.重定向:
    1.工作原理:用户第一次通过【手动方式】通知浏览器访问servlet,oneservlet工作完毕后,将twoservlet的地址写入到响应包李的响应头,location属性中,Tomcat将302状态码写入到状态行中,浏览器在接收到响应包后,读取302状态码,通过location属性的地址发起第二次请求,访问twoservlet........
    2.实现命令:resp.sendRedirect("请求地址")
    3.特征
        1.请求地址:既可以把当前网站内的资源文件地址发送给浏览器(/网站名/资源文件名) 也可以把其他网站的资源文件地址发送给浏览器(http://ip地址:端口号/网站名/资源文件名)
        2.请求次数;浏览器至少发送两次请求,第一次由用户发送;
        3.请求方式:在重定向中,通过地址栏通知浏览器发起下一次请求,因此通过重定向调用的资源文件接收的请求一定是get方式;
    4.缺点:重定向需要在浏览器与服务器之间进行多次往返,大量时间消耗在往返上,增加用户等待时间

20.请求转发
    1.原理:用户第一次通过手动方式要求浏览器访问oneservlet。oneservlet工作完毕后,通过当前请求对象代替浏览器向Tomcat发送请求,申请调用twoservlet。Tomcat在接收到这个请求后,自动调用twoservlet来完成剩余任务;

    2.实现命令:请求对象代替浏览器向Tomcat发送请求
    RequestDispatcher report=req.getRequestDispatcher("/资源文件名") 注意:千万不能写网站名,格式一定要记清楚!
            将报告对象发送给Tomcat
    report.forword(当前请求对象,当前响应对象)
注意;这里的dispatcher是 调度员 的意思(将资源调配,分配,指定)
    3.优点:
        1.无论本次请求涉及到多少个servlet,用户只需要手动发送一次请求
        2.servlet之间调用发生在服务端计算机,节省了服务器与浏览器之间通信的时间,增加了处理速度;
    4.特征:
        1.浏览器只需要发送一次请求
        2.只能向Tomcat申请调用当前网站下的资源文件地址
        3.在请求转发过程中,浏览器只发送一个http请求协议包,参与本次请求的所有servlet共享同一个请求协议包,因此,这些servlet接收的请求方式与浏览器发送的请求方式保持一致;

21.多个servlet之间数据共享实现方案;
    1.数据共享;oneservlet工作完毕后,将产生的数据交给twoservlet来使用
    2.servlet规范中提供四种数据共享方案:
        1.ServletContext接口
        2.Cookie接口        
        3.HttpSession接口
        4.HttpServletRequest接口

22.ServletContext接口
    1.介绍:来自于servlet规范中一个接口,在Tomcat中存在servlet-api.jar,在Tomcat中负责提供这个接口实现类
            2.如果两个servlet来自于同一个网站,彼此之间通过网站的ServletContext对象实例实现数据共享
            3.开发人员习惯将ServletContext对象称为【全局作用域对象】       
    2.工作原理:每一个网站都存在一个全局作用域对象,这个对象相当于【Map】,在这个网站中oneservlet可以将一个数据存入到全局作用域对象,每当网站中其他servlet都可以从这个对象中得到数据

    3.全局作用域对象的生命周期:
        1.在http服务器启动时,自动为当前网站创建一个全局作用域对象;
        2.在http服务器运行期间,只能存在一个全局作用局对象;
        3.在http服务器运行期间,全局作用域对象一致处于存活状态;
        4.在http服务器关闭时,服务器将当前网站的全局作用域对象销毁;
总结一句话:全局作用域对象生命周期贯穿网站整个运行期间;

    4.代码实现:【同一个网站】oneservlet将数据共享给twoservlet
        1.通过请求对象向Tomcat索要当前网站中【全局作用域对象】ServletContext application=req.getServletContext();
        2.将数据添加到全局作用域对象作为【共享数据】application.setAttribute("key1",数据)
        3.从全局作用域对象中得到指定关键字对应数据 Object 数据=application.getAttribute("key1");
注意啊:全局作用域对象相当于是map集合,我们可以往里面添加任何数据,而它是占用服务端计算机内存的,如果我们不断往里面添加数据,会导致服务器爆炸,所以啊,普通的程序员只配从里面取数据,只有高级程序员才能往里面添加数据;
        


servlet 2020-7-6

原文:https://www.cnblogs.com/1877chl/p/13257864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!