您的位置:首页 > 其它

servlet学习笔记

2016-09-01 15:18 211 查看
javac编译打包java文件命令:javac -d . java文件名

1、Web容器:
    Web容器是Servlet/JSP唯一认得的HTTP服务器。

   
何谓web容器:
          对于java程序而言,jvm是其操作系统,.java文件会编译为.class文件,.class对于jvm而言,就是其可执行文件。java
       程序基本上只认得一种操作系统,就是jvm。就如同jvm介于java程序与实体操作系统之间,web容器是介于实体http服务器与
       servlet之间,也正如编写java程序必须了解jvm与应用程序之间如何互动,编写servlet/jsp也必须知道web容器如何servlet

       /jsp互动,如何管理servlet等事实(jsp最后也是转译、编译、加载为servlet,在容器的世界中,真正负责请求、响应的是
       servlet)。
      


2、开发servlet有三种方法:

    1)、实现servlet接口

    2)、继承GenericServlet

    3)、继承HttpServlet

3、请求/响应流程:

    1)、客户端(大部分情况下是浏览器)对Web服务器发出HTTP请求;

    2)、HTTP服务器收到HTTP请求,将请求转由Web容器处理,Web容器会剖析HTTP请求内容,创建各种对象(如HttpServletRequest、HttpServletResponse、HttpSession等);

    3)、Web容器由请求的URL决定要使用哪个Servlet来处理请求(事先由开发人员定义);

    4)、Servlet根据请求对象(HttpServletRequest)的信息决定如何处理,通过响应对象(HttpServletResponse)来创建响应;

    5)、Web容器与HTTP服务器沟通,Web服务器将响应转换为HTTP响应并传回客户端。

  注意:如果有多次请求进来,就只是启动多个线程来进行处理,而不是重复启动多次JVM。

4、servlet的运行过程

   servlet程序是由web服务器调用,web服务器收到客户端的servlet请求后:

    1)、web服务器首先检查是否已经装载并创建了该servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步;

    2)、装载并创建该servlet的一个实例对象;

    3)、调用servlet实例对象的init()方法;

    4)、创建一个用于封装http请求消息的HttpServletRequest对象和一个代表http响应消息的HttpServletResponse对象,然后调
     用Servlet的service()方法并将请求和响应对象作为参数传递进去;

    5)、web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
    
    注意:以下情况会导致destory()方法调用:

           1)、tomcat重新启动

           2)、reload该webapp

           3)、重新启动电脑

5、servlet开发的缺点:

    1)、在web.xml文件中需要配置很多行代码,维护起来很不方便,不利于团队合作;

    2)、一个servlet的入口只有一个doPost或者doGet方法,如果在一个servlet中写好几个方法,怎么办?
public class UserServlet extends HttpServlet{
doPost(){
this.doGet();
}

doGet(){
if(request.getParameter("method").equals("save")){
this.save();
}else{
this.update();
}
}

private void save(){
}

private void update(){
}
}

       这样会导致代码结构很乱;

    3)、servlet类与web容器高度耦合,每个方法中都有两个参数request、response,如果服务器不启动,这两个参数没有办法
      初始化;

    4)、如果在servlet中的一个方法中有很多功能,这个时候会导致该方法比较复杂,不利于维护

            doGet(){

               用户注册

               //用户头像上传

               //验证表单

               //权限的验证

               //注册

            }

       用户注册完成了4件事情,所以整个方法比较杂乱;
    5)、如果一个servlet类中有很多方法,浏览器对这些方法进行请求,url写起来很麻烦;

            http://localhost:8080/servlet/userServlet?method=save/update
    6)、在servlet中如果要获取页面上表单中的数据,那么在方法中会写很多行。

6、servlet工作的时序图:
   


       这个图只截了一部分,前面还有浏览器请求过程和服务器拿到请求后进行解析的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet