Servlet相关要点

Servlet(server与applet的缩写)

1、什么是Servlet?

servlet与普通的java程序不同,他是运行在web应用服务器上的Java程序,可以对web浏览器或其他Http客户端程序发送的请求进行处理

   ~servlet容器(WEB容器,例如tomcat)是web服务器或者应用程序服务器的一部分,用于在发送请求和响应上提供网络服务。

   ~servlet是基于servlet容器(servlet引擎)实现的,由容器来实例化和调用Servlet的方法,servlet容器包含和管理servlet的生命周期

servlet不仅约束了服务器如何实现规范,也约束着java web项目的结构

Note:有了servlet之后,用户通过点击某个链接或者在浏览器的地址栏中输入URL来访问servlet,web容器接收到请求之后,并不是直接将请求交给servlet,而是先交给servlet容器,servlet容器实例化servlet,调用servlet的一个特定方法对请求进行处理,并产生一个响应,这个响应有servlet容器返回给Web容器,web容器包装这个响应,以http响应形式发送给浏览器

2、servlet的作用?

(1)通信支持:利用容器提供的方法,你能轻松的让 Servlet 与 web 服务器对话,而不用自己建立 serversocket 、监听某个端口、创建流等。容器知道自己与 web 服务器之间的协议,所以你的 Servlet 不用担心 web 服务器(如Apache)和你自己的 web 代码之间的 API ,只需要考虑如何在 Servlet 中实现业务逻辑(如处理一个订单)。

(2)生命周期管理:Servlet 容器控制着 Servlet 的生与死,它负责加载类、实例化和初始化 Servlet ,调用 Servlet 方法,以及使 Servlet 实例被垃圾回收,有了 Servlet 容器,你不需要太多的考虑资源管理。

(3)多线程支持:容器会自动为它所接收的每个 Servlet 请求创建一个新的 java 线程。针对用户的请求,如果 Servlet 已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。

(4)声明方式实现安全:利用 Servlet 容器,你可以使用 xml 部署描述文件来配置和修改安全性,而不必将其硬编码写到 Servlet 类代码中。

(5)JSP支持(将jsp翻译为真正的java代码):Servlet容器负责将 jsp 代码翻译为真正的 java 代码。

3、在web容器中,servlet主要经历的4个阶段:

(1)在web容器启动或者客户机第一次请求服务时,容器加载servlet,并将其放入servlet实例化池

(2)当实例化结束后,容器将调用Servlet对象的init()方法完成Servlet的初始化操作

(3)容器通过servlet的service()方法处理客户端请求,在Service()方法中,servlet实例根据不同的http请求作出不同的处理,并在处理之后作出相应的响应

(4)在web容器关闭时,容器调用servlet对象的destroy()方法对资源进行释放,在调用此方法后该servlet对象就会被垃圾回收器回收

4、servlet为什么是单例的?每次访问请求对象和响应对象都是新的?线程安全问题?

(1)浏览器多次对servlet的请求,一般情况下,服务器只创建一个servlet对象,也就是说一旦一个servlet对象被创建,机会驻留在内存中,为后续请求做服务,直至服务器关闭

(2)每次访问请求对象,servlet引擎都会创建一个新的HttpServletRequest,请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

request对象代表http请求,我们获取浏览器提交过来的数据,就找request,response代表http响应,向浏览器输出数据,找response对象

(3)当多个用户访问servlet的时候,服务器会为每个用户创建一个线程,当多个用户并发访问servlet共享资源的时候就会出现安全问题

原则:

       ①当一个变量需要被多个用户共享,则应当在访问该变量的时候,加同步机制Synchronized

       ②如果一个变量不需要共享,则直接在doGet()或者doPost()定义,这样就不会存在线程问题

5、Get与Post的区别:

(1)Get:

         ①暴露请求信息,不安全

         ②请求信息大小不能超过1kb,上传信息有限,不可以上传图片

         ③请求速度快

(2)Post

         ①隐藏了请求信息,比较安全,但是1也可以通过相关工具访问到数据

         ②post方式没有限制请求数据的大小,可以做图片上传

6、关于请求中文乱码的处理

(1)对于post请求,可以设置编码方式:request.setChatacterEncoding("UTF-8");

注意:必须在获取第一个参数之前设置,并且该方法只对post方式有效

(2)对于get请求

重新设置Tomcat的编码方式,修改Tomcat配置文件:Tomcat根目录/conf/server.xml(修改端口的那一行)设置为UTF-8

7、Servlet的一些细节问题

(1)一个servlet可以有多个<url-pattern>,可以有多个资源名称找到当前servlet

(2)配置Servlet可以使用通配符(*)

(3)自定义的servlet中的<servlet-name>不能够为default,使用他会导致静态资源无法被找到,tomcat/config/web.xml文件中配置一个1名字为default的servlet,该Servlet在负责访问项目下的静态资源

(4)可以将servlet的初始化操作向前移,配置<load-on-startup>中的数字,数字越小越先启动

8、servlet注解

这是Servlet3.0提出的新特性,支持注解配置,大大简化了工作

本来servlet的配置需要这么写

web.xml 中éç½® Servlet

有了注解配置之后,我们就可以这么做:

也可以省略name,直接写url为:@WebServlet("/foreServlet")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值