web重点

第一章:

HTTP协议原理 (掌握HTTP遵循请求/响应模型,HTTP是无状态的协议,端口号为80

HTTP协议处理流程

1、客户端和Web服务器建立连接

2、客户端发送HTTP请求

3、服务器生成HTTP响应回发

4、关闭连接

HTTP协议请求和响应信息格式

请求信息:

 分为请求行、请求头、空行、消息体(POST

 

响应信息:

 

WEB服务器缺陷:

只能发送静态页面。解决方法是增加辅助应用,CGIWEB服务器和外部应用通讯的标准。可使用多种语言开发。但每次请求开启进程,极大消耗服务器资源,JAVA使用WEB容器加servlet解决辅助应用。每次请求开启线程,所有线程共享WEB容器所在的进程

WEB容器作用

Web容器负责管理和运行Servlet

容器对Servlet的支持包括

1、 通信支持

2、 servlet生命周期管理

3、 多线程支持

4、 JSP支持

5、 处理安全性

 

 

Web应用程序的组成

 

 

 

WEB-INF里面的内容是不能被客户端直接访问。一般用于存放一些比较隐密的信息

 

 

 

Tomcat目录结构(

bin目录(tomcat启动和关闭目录)

conf(tomcat配置目录)

webapps(web 应用程序放置目录)

work(主要用作JSP翻译和编译目录)

 

 

 

 

 

 

 

 

第二章

 

Servlet类结构

 

按照sun公司的规范,每个servlet类都必须实现servlet接口。其中service()方法是提供给用户实现的业务方法。GenericServletservletservletConfig(用于servlet配置的接口)作了简单实现,但没有实现service方法。该方法用它的子类根据自己不同协议的特点进行实现。HttpServletGenericServlet的子类。专门针对Http协议实现了service()方法。针对不同的请求类型调用doXX()方法。所以我们在书写servlet类的时候,一般只需要继承HttpServlet,并重写doXX()方法就行了。

Servlet的编码和部署

public class TestServlet  extends HttpServlet {

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{

}

servlet只有在web容器 注册之后,才能被容器所识别

     test   servlet名,容器根据它找到对应的Servlet

     com.lovo.Test    servlet类全路径

 

     test   servlet名,客户端根据请求URL找到

     /abc    客户端请求URL

 

   Servlet3标准中可以使用@webServlet(urlpatterns="/test")注册

 

Servlet URL映射路径 

1、精确匹配   /abc  abc请求可以找到该servlet

2、扩展匹配   *.do  .do结尾请求都可找到该servlet

3、路径匹配   /abc/*  /abc/目录请求都可找到该servlet

 

加上斜杠后,回到webapps根目录,这时,请求路径必须加入布署名

布署名/url请求路径”>

 

// 在当前目录下查找

请求路径”>


 

 

Servlet生命周期

1、容器启动,会读取conf/server.xml文件,以确定启动端口和WEB应用存放的路径

2WEB容器启动会读取每个WEB应用的web.xml文件配置信息,并解析web.xml文件。得到servlet配置信息。

3、 容器加载并实例化Servlet

web.xml文件配置servlet时有个如果大于等于0则启动容器就实例化,如果为负数或缺省则第一次请求实例化)

4、 容器调用init()方法初始化

5、 每次请求调用service()方法完成逻辑

6、 容器丢弃servlet调用destroy()方法

 

其中12346只执行一行,只有5是每次请求都会执行。而且在整个生命周期中,servlet 对象只有一个,单实例多线程。

Servlet的配置对象:ServletConfig 可以读取相关的初始化信息。

Servlet全局对象:ServletContext  作用于整个WEB应用

    作用:1、可使用getRealPath()获得资源真实路径

          2、可使用getAttribute()、和setAttribute()方法共享全局变量。

          3、可以读取全局初始化信息

 


第三章

 

HTTP状态码

 

HTTP状态码:

100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。

200-299:表示客户请求成功。

300-399:表示用于已经移走的资源文件,指示新的地址。

400-499:表示由客户端引发的错误。

500-599:表示由服务器端引发的错误。

 

设置状态码sendError(code,”Resource Not Found”);

 

按照响应信息的格式,先有状态行,再有消息体,所以注意在使用PrintWriter向客户端输出信息之前,设置状态码

 

设置HTTP响应头

目的用于告诉客户端

发送回来的内容的类型

有多少内容被正被发送

发送内容的服务器的类型

设置响应头的方法:setHeader()setHeaders()。注意:设置响应头只能是HTTP协议。所以setHeadersetHeaders()都是HttpServletResponse中的方法

 

设置HTTP消息体

response.getWriter()获得打印字符流,可以输出文本

response.getOutputStream()获得输出字节流,可以发送二进制数据。

 

重定向原理

重定向调用方法response.sendRedirect("http://127.0.0.1:8080/lovobook/bar.html");

 

1,浏览器向服务器发送HTTP请求。

2,服务器接收到请求后,如果调用response.sendRedirect()方法,表示资源已被移走。则发送一个302的状态码和location的响应头。在location响应头指明要转发的地址。

3,浏览器在接收到302状态码后,会读取location响应头的内容,并将地址栏的值赋为location响应头的内容。从而再向服务器发出第二次请求。由于是二次请求,所以重定向不能获得封装在request中的属性信息

 

 

 

 

 


第四章

HTTP请求提交的方法主要有GETPOST

Get请求方式

浏览器向Web服务器发送HTTP请求

用户在网页上点击一个超连接

用户提交在网页上填写好的表单

用户在浏览器地址栏中输入URL地址并回车  

默认情况下都是使用HTTP协议的GET方法提交请求

 

POST请求方式

 

GET方式和POST方式区别:

流的格式:

GET方式请求参数放在URL后面,没有消息体。

POST方式请求参数放在消息体中。

 

用途:

GET方式主要用于资源查找,表示客户端需要查找服务器上的某个资源

POST方式主要用做数据传输,主要用于服务器接收客户端传递过来的信息。

 

 

传输性能:

特征

GET方法

POST方法

提交数据类型

文本

文本、二进制文本

提交数据长度

不超过255个字符

没有限制

提交数据可见性

作为URL地址的一部分显示在浏览器地址栏

作为请求的消息体,不可见,

提交数据缓存

缓存在浏览器URL历史状态中

不会被浏览器缓存

 

 

 

获取HTTP请求行

getMethod():获取HTTP的请求方法,例如GETPOST

getQueryString():获取请求URL后面的查询字符串。只对GET有效

getServletPath():获取Servlet的映射路径

 

 

获取请求头(只对HTTP协议有效)

getHeader(name) :返回指定的请求头的值

getHeaders(name) :返回一个Enumeration(枚举)包含请求头中的所有值

 

获得表单数据

 

getParameter()方法:获取指定名称的参数值,返回字符串类型。如果有多个同名的键,则返回第一个键对应的值。

 

getParameterValues()方法:获取指定名称的参数的多个值,以字符串数组的方式返回结果。

获得消息体

POST请求不但可以通过getParameter()方法获得表单数据,而且可以通过getInputStream()以字节方式获得表单数据,所以可以获得上传文件的二进制流

上传文件 

表单必须以POST提交,在form标签中,加入enctype=”multipart/form-data”

如果使用servlet3上传文件,在servlet中加入@MultipartConfig,提供上传文件支持

请求派发 

RequestDispatcher  dis = request.getRequestDispatcher(path)

dis.forward(request,response);

 

客户端的请求可以发送给多个Servlet以及Web应用程序中的其它资源。整个过程只在服务器端完成,不需要客户端的参与,即客户端的只用发送一次原始的请求就可以实现转发的功能。所以通过请求转发,目标资源可以获得在request中封装的属性信息

 

不能在请求转发和重定向之后,再进行请求转发和重定向

请求范围

变量可以保存在请求范围中

在请求范围之外就不能进行访问了

 

 

内部转发和重定向的区别:

1、内部转发由requestDispatcher发出,重定向由response发出。

2、内部转发一次请求,重定向二次请求。

3、内部转发可以取出request中封装的数据,重定向不能。

4、内部转发只能在服务器内部进行,重定向可以请求别的服务器。


第五章

 

为什么要进行状态管理

HTTP协议使用的是无状态的连接

对容器而言,每一个请求都来自于一个新的客户

 

解决方案:

1、 隐藏表单域

2、 Cookie

3、 Session

4、 URL重写

 

Cookie

 

 

客户端向服务器发出请求,服务器接收请求之后,如果调用response.addCookie()方法。则服务器向客户端发送set-cookie响应头,从而将文本信息放置在客户端的Cookie中。当客户端再次向服务器发送请求时,则又会将Cookie的内容以Cookie请求头的方式发送给服务器,服务器可根据Cookie的内容判断是否是同一客户发出的请求。

Cookie由于放置在客户端,并以文本形式发送,所以容易超成一些隐私问题。Cookie分两种,一种放在客户端浏览器缓存中,一种放在客户端的文件中。

 

Session

Session是放置在服务器端的一个对象。用于保存客户端用户信息。

Session工作原理:

先由客户端向服务器发出一个请求,服务器在接收到这个请求的时候就给客户端分配一个session对象同时给这个session分配唯一的标识JSessionID,当完成这一过程的时候就把这个idsession对象保存在一个map集合中,并把这个sessionidcookie方式发给客户端。当客户端再次发送请求的时候,就会把这个sessionid以请求头的方式发送给服务器,然后服务器通过这个sessionidMap集合中找到相应的session对象。

Sessioncookie区别:

1、session的数据是放置在服务器端,而cookie信息放在客户端。

2、Session是服务器端的一个对象,封装的数据是对象。而cookie的数据是文本。

 

Session 对象的获取:

获取session是通过request.getsession(boolean)方法。参数为真如果没有会话对象则创建一个会话对象,如果有会话对象则直接返回,但是为false的话,表示的是如果有会话对象就直接返回,如果没有回话对象就返回null。值得注意的是没有参数的时候和getsession(true)是一样的效果。

 

Session生命周期:

在一个会话范围内。产生Session对象时,该对象就和客户端浏览器进行绑定,只要不关闭浏览器,在超时时间内该session都会有效。关闭浏览器,重开一个浏览器,则服务器会分配置新的Session对象。

由于Session是放置在服务器端的对象。所以当客户端关闭浏览器,并不意味着Session对象的销毁。所以到一定时间,一定要对Session对象进行销毁,以释放服务器内存资源。

 

·销毁会话的几种方式:

  1、设置会话的超时时间

setMaxInactiveInterval(int)对于对话指定客户请求的最大间隔时间,以秒为单位,

web.xml中配置

15

值得注意的是这里的15是分钟

  2、调用sessioninvalidate()方法

  3、应用程序结束,或服务器崩溃

  

URL重写

由于Cookie存在不安全的因素,会使得一些客户端禁用掉Cookie。因为Session(主要是指SessionID)也是用Cookie方式传递的,当用户禁用Cookie后,SessionID就不能到达服务器。从而服务器也不能维持和客户端的状态。这时可以用URL重写的方式将会话的ID强加在的每一个URL地址末尾,从而保证在该问服务器时,能将SessionID发送给服务器。

调用response对象的encodeURL()方法编译URL,将 sessionID附加在URL后面。

你可能感兴趣的:(web重点)