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协议完成的。

Servlet 学习总结-1的更多相关文章

  1. JSP&Servlet学习手册

    JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...

  2. Servlet 学习笔记

    Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...

  3. Servlet学习:(三)Servlet3.0 上传文件

    转: Servlet学习:(三)Servlet3.0 上传文件 2018年08月03日 11:57:58 iDark_CSDN 阅读数:362   一.注意事项 客户端(浏览器) 表单的提交方法必须是 ...

  4. Servlet学习(九)——request

    request运行流程在Servlet学习(四)——response已介绍,不再赘述 1.通过抓包工具获取Http请求 因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行, ...

  5. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  6. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  7. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  8. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  9. servlet 学习(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  10. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

随机推荐

  1. touch python

    一  使用while循环输出 1 2 3 4 5 6 8 9 10. i=0 while i<10: i=i+1 if i == 7: continue print(i) 二  求 1-100所 ...

  2. cocos2dx切换播放的动画

    版本:cocos2dx 2.2.6 IDE: VS2012 语言:C++98 美术资源一共有两段动画的序列帧,一个是手绘马行走图,一个是分子人行走图. 程序要实现的目的就是在同一个位置,点击按钮可以实 ...

  3. git commit时候出现的问题

    git commit 提交的时候,出现*** Please tell me who you are. git config --global ...问题 1 $ git commit -a -m 'v ...

  4. Microsoft.Office.Core 引用以及 Microsoft.Office.Core.MsoTriState 的问题

    转自原文 xiaoanian, Microsoft.Office.Core 引用以及 Microsoft.Office.Core.MsoTriState 的问题 因为要做一个提取ppt文字的工程,第一 ...

  5. Directshow 判断音视频设备是否被占用<转>

    直接上代码吧: 代码是参考网上大神分享的,在原基础上做了些修改(只检测视频设备): int DeviceIsBusy(char *videoName) { //输入设备的音视频名称 HRESULT h ...

  6. 手游为什么要热更新,C#为什么不能热更新,LUA为什么可以

    热更新是什么?简单的说就是打补丁,只补需要部分,不用重个游戏包重打上传 热更新问题的本质是代码更新而不是资源更新,为什么呢? 大型手游都是将补丁资源放在专门的WEB服务器上,游戏启动时动态下载并放入到 ...

  7. spring与IOC,ioc与di的关系

  8. python3企业微信群组报警

    公司提出一个需求需要做一个企业微信的一个消息推送,需要将消息发送到聊天群里详细信息如下. 如何创建应用请阅读我的上篇文章:https://www.cnblogs.com/wangyajunblog/p ...

  9. nyoj27-水池数目 (求连通块数目)【dfs】

    http://acm.nyist.net/JudgeOnline/problem.php?pid=27 水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 南阳 ...

  10. css readonly和disabled的区别

    一.前言 要说readonly和disabled的区别,就需要先说说两者的联系: 两个属性都可以作用于input等表单元素上,都使得元素成为“不可用”的状态: 两者的字面意义先介绍一下: readon ...