博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet学习总结
阅读量:5157 次
发布时间:2019-06-13

本文共 5918 字,大约阅读时间需要 19 分钟。

JavaWeb应用程序中所有的请求-响应都是由Servlet来完成的。Servlet是Java Web的核心程序,所有的网址(请求-响应)都交给Servlet来处理。

 

Servlet在Web应用中被映射成一个URL(Uniform Resource Locator),该URL可以被客户端浏览器请求,当用户向指定URL对象的Servlet发送请求时,该请求被Web服务器接收到,该Web服务器负责处理多线程、网络通信等功能,而Servlet的内容则决定了服务器对客户端的响应内容。

 

#.常用的Web服务器

    1)Apache

    2)IIS

    3)Tomcat

 

#.主流的(Java Web)应用服务器(不仅包括web服务...)

    1)Tomcat或者Tomcat+Apache

    2)Resin

    3)JBoss

    4)WebLogic Server

    5)WebSphere

6)IIS

 

#.Tomcat的目录结构

    1)lib目录:存放部署Java类库

    2)bin目录:存放与Tomcat运行有关的类、类库和DOS的批处理文件

    3)webapps目录:存放部署的Web应用

    4)work目录:存放临时生成的Servlet源文件和class文件

    5)logs目录:存放Tomcat服务器运行时所产生的日志文件

    6)temp目录:存放临时文件      

   

#.Servlet是sun公司制订的一种用于扩展web服务器功能的组件规范。

    扩展方式:早期采用CGI(common gateway interface)技术。因采用 cgi程序编写的代码,可移植性差、编程相当复杂。

    现在,采用的是 【容器+组件】的方式来扩展。

    【组件:】符合规范,实现特定功能,并且可以部署在容器上的软件模块

    【容器:】符合规范,为组件提供运行环境,并且管理组件的生命周期

    (将组件实例化,调用其方法、销毁组件的过程)的软件程序;

    采用【容器+组件】这种编程模型的优势:容器负责大量的基础服务

    (包括浏览器与服务器之间的网络通信、多线程、参数传递等等)。而组件只需要处理业务逻辑。另外,组件的运行不依赖于特定的容器

#.Servlet处理流程

    1)客户端使用浏览器提交对Servlet的调用的Get或者Post请求

    2)服务器接到请求后,如果该Servlet是第一次被调用,实例化这个Servlet

    3)服务器调用该Servlet对象的service()方法

    4)Servlet产生动态的回复内容

    5)服务器发送服务内容给客户端的浏览器

#.Servlet生命周期:

    1)加载Servlet类

    2)实例化(调用类的构造方法)

    3)初始化(调用该类对象的init()方法)

    4)处理请求(调用该类对象的service()、doGet()或doPost()方法)

    5)销毁对象(调用该类对象的destory()方法)

    注:在整个Servlet生命周期,只创建一个Servlet对象,提供服务,处理请求是以多线程的方式进行的,为了线程安全,一般不要在Servlet类中定义成员变量,避免多个请求共用一个成员变量,而是在方法中定义局部变量。

    Servlet会在服务器启动(如果load-on-startup为1)或第一次请求Servlet时(如果load-on-startup为0)初始化一个Servlet对象,然后用这个Servlet对象去处理所有客户端的请求。服务器关闭时才销毁这个Servlet对象。无论请求多少次Servlet,最多只有一个Servlet实例。多个客户端并发请求Servlet时,服务器会启动多个线程分别执行该Servlet的service()方法。一个Servlet的生命周期如下图所示:

 

#.servlet是如何运行的?

    当用户向浏览器地址栏输入:http://ip:port/appname/servlet的url-pattern配置

    1)浏览器使用ip:port(端口号)连接服务器

    2)浏览器将请求数据按照http协议封装成一个数据包(请求数据包)发送给服务器

      请求数据包的内容包含了请求资源路径(/helloweb/sayhello?name=zs),另外,

      在请求数据包中,还会包含浏览器自动生成的一些信息。

    3)服务器创建两个对象:请求对象(Request)和响应对象(Response)

      服务器解析请求数据包,将解析之后的数据存放到请求对象里面,方便

     servlet读取请求数据(因为servlet不用解析请求数据包,否则,需要理解http协议)。

      请求对象是HttpServletRequest接口的一个实现。

      响应对象是HttpServletResponse接口的一个实现,响应对象用于存放servlet处理的结果。

    4)依据请求资源路径找到相应的servlet配置,通过反射创建servlet实例,

      然后调用其service()方法。在调用service()方法时,会将事先创建好的请求对象(request)

      和响应对象(response)作为参数进行传递。在servlet内部,可以通过request获得请求数据,

      或者通过response设置响应数据。

    5)服务器从response中获取数据,按照http协议打成一个数据包(响应数据包),发送给浏览器。

    6)浏览器会解析响应数据包,取出相应的数据,生成相应的页面。 

   

#.javac-cp servlet-api.jar -d . HelloServlet.java

    # -cp表示告诉java编译器去哪里找需要的class文件

    # -d .表示将编译生成的字节码文件放入当前文件夹下

#.运行Servlet,

    如果报500错误,一般是程序写错了;

    如果报404错误,访问地址有错;

    如果报405错误,请检查service方法名、方法参数等

   

#.http(超文本传输协议,hypertexttransport protocal) 是一种应用层协议,定义了浏览器(也可以是其它程序)与web服务器之间通讯的过程与数据的格式。浏览器与服务器之间的连接,只能处理一次请求,然后立即关闭。这种通讯方式,可以让服务器以有限的资源为更多的客户端服务。

   

#.http协议数据包的结构:

    1)请求数据包的结构

    第一部分:请求行(数据包中的一行内容)

       请求行包括三部分内容:

       !请求方式(get/post)

       !请求资源路径(端口号之后的内容,比如/appname/servlet)

       !协议的类型与版本

    第二部分:若干消息头(由W3C定义的一些有特殊含义的键值对)

       消息头的样式,比如:content-type=text/html;

       服务器和浏览器都会遵守这些消息头的约定。

       消息头一般由服务器或者浏览器自动生成,但也可以通过编程的方式生成

    第三部分:实体内容

       如果请求方式是post方式,请求参数及值会放在这儿。

       如果请求方式是get方式,请求参数与值是包含在请求资源路径里

      

    2)响应数据包的结构:

    第一部分:状态行

       协议的类型与版本

       状态码(状态码是一个数字,不同的数字代表不同的含义,如:

       500:系统错误,即程序代码有错误

       404:找不到资源,访问路径错误

       200:正确)

       状态码的描述

    第二部分:若干消息头

    第三部分:实体内容

       服务器返回给浏览器的处理结果

      

#get/post请求

    1)哪一些是get请求

    !在浏览器地址栏直接输入一个地址

    !表单默认的提交方式

    !点击链接

    2)哪一些是post请求

    !给表单设置method="post"

    3)get/post方式的区别

    !get方式会将请求参数及参数值放在请求资源路径里面,携带的数据大小有限制,不适合提交大量的数据;post方式会将请求参数及参数值放在实体内容里面,理论上没有限制,适合大量数据的提交

    !安全上讲,post方式相对安全(因为请求参数及值存放在实体内容里面,而get方式会将请求参数及值显示在浏览器地址栏)。但是要注意,post方式并没有将数据加密。

   

#表单处理,如何获得请求参数值

    1)String request.getParameter(String paraName);

    要注意的问题:如果paraName与实际的请求参数名不一致,则返回null。如果没有输入参数值,则返回“”。

    2)String[] request.getParameterValues(StringparaName);

    用在有多个请求参数名相同的情况下使用。比如:?interest=fishing&interest=cooking

   

#重定向:

    服务器向浏览器发送一个状态码302及一个消息头location,浏览器收到后,会立即向location所指向的地址发送请求。

    使用:response.sendRedirect(String url);//url是重定向的地址

    特点:重定向的地址是任意的;重定向之后,浏览器地址栏的地址变成了location所指定的地址。

    注意:重定向之前,不能够有out.close()或者out.flush()操作。

    重定向之前,若response对象缓存有数据,则这些数据会被清空。

   

   

#cookies介绍

    1.服务器可以向客户端写内容

    2.只能是文本内容,而且有大小限制,一般是小于4K

    3.客户端可以阻止服务器写入

    4.只能拿自己webapp写入的东西

    5.Cookie分为两种:

       !属于窗口/子窗口(放在浏览器对应内存中,与浏览器共存亡)

       !属于文本(有生命周期的)

   6.一个Servlet/Jsp设置的cookies能够被同一路径下面或者子路径下面的Servlet/Jsp读到(路径=URL;路径!=真实文件路径)

    7.如何创建cookies?(在服务端创建,存放到客户端)

       Cookie cook = new Cookie(Stringname,String value);

       cook.setMaxAge(30);//存在时间,单位:秒,若不设置,则不保存

    8.如何将cookie添加到客户端?

       response.addCookie(cook);

    9.如何读取客户端的cookie到服务器端?

       Cookie[] cookies = request.getCookies();

    10.在服务器端删除客户端的Cookies?

       Cookie[] cookies = request.getCookies();

       cookies[i].setMaxAge(0);//设置生存期为0,即删除

#Session介绍

    1.服务器的一块内存(存Key-Value)

    2.和客户端窗口对应(包括其子窗口)

    3.客户端和服务器端有对应的SessionID

    4.客户端向服务器端发送SessionID的两种方式:

       !cookie(内存cookie)

       !rewrite URL

    5.浏览器禁掉cookie,就不能使用session(使用cookie实现的session)

    6.如果想安全的使用session(不论客户端是否禁止cookie),只能使用URL重写方式。

    7.如何得到session

    HttpSession hs = request.getSession(true);

    8.向session添加属性

    hs.setAttribute(String name,Object value);

    9.从session得到某个属性

    String name = hs.getAttribute(String name);

    10.从session删除某个属性

    hs.removeAttribute(String name);

#CookieVS Session比较

    1.Cookie保存在客户端,Session保存在服务器端,

    安全性:Cookie<Session;

    2.Cookie生命周期是累积的,从创建时开始计时,并且不受主机关机影响;Session生命周期是间隔的,不访问Session连续时间达到设定值时,生命周期才结束,并且主机关机将使Session生命周期结束;

   

    3.Cookie通过网络在客户端与服务器端传输,而Session保存在服务器端不需要传输,但需要在浏览器端保存一个SessionId即可;

   

#ServletContext用法

    1.存在于服务器端,所有访问服务器的客户端共用

    2.得到ServletContext:this.getServletContext();(this-->Servlet子类)

    3.添加属性:setAttribute(String name,Object obj);

    4.获得属性:(Object)getAttribute(String name);

    5.删除属性:removeAttribute(String name);

    6.生命周期:ServletContext中的属性从创建开始,到服务器关闭而结束,鉴于其长期存在于服务器内存中,一般不会向其中放入太大数据量;

 

 

#.JavaWeb的目录结构

根据Servlet规范,Web程序有自己特定的结构,部署时必须按照这样的结构部署。

 

 

Web应用程序访问过程:

    用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求。服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应。浏览器收到回应,再把回应的内容显示出来。这种请求-响应模式(Request-Response)就是典型的Web应用程序的访问过程。

请求与响应:

    客户端浏览器发送一个请求,服务器处理一系列操作后做出一个响应,发送给客户端,完成一次Web过程操作。

    客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件,客户端的IP地址甚至客户端操作系统都包含在HttpServletRequest对象中。

    Java Web应用程序中,处理请求并发送响应的过程是一种叫做Servlet的程序来完成的。Servlet是Java Web的核心程序,所有的网址最终都交给Servlet来处理。Servlet并没有main之类的执行方法。当用户访问服务器的时候,Tomcat是通过调用Servlet的某些方法来完成整个处理过程的。浏览器与服务器的交互都是利用HTTP协议完成的。

转载于:https://www.cnblogs.com/heartstage/p/3390458.html

你可能感兴趣的文章
jQuery on(),live(),trigger()
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
导航,头部,CSS基础
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
注解小结
查看>>
list control控件的一些操作
查看>>
判断字符串在字符串中
查看>>
201421410014蒋佳奇
查看>>
Xcode5和ObjC新特性
查看>>
Centos 7.0 安装Mono 3.4 和 Jexus 5.6
查看>>
CSS属性值currentColor
查看>>
Real-Time Rendering 笔记
查看>>
实验四2
查看>>
多路复用
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>