Servlet学习笔记

来源:互联网 发布:加拿大企业家移民 知乎 编辑:程序博客网 时间:2024/06/05 13:06

1.Servlet 的生命周期:

1) 当一个servlet第一次被调用的时候,容器会创建servlet对象,并且调用init()方法进行初始化,一个servlet只会创建一个对象;

2) 调用service方法判断请求的提交方式;

3) 执行具体的业务逻辑代码;

4)当这个servlet被销毁的时候,会调用destroy方法来做收尾的工作;

2.Servlet不是一个人在战斗.

Servlet没有main方法,它们受控于另外的一个java程序,称之为容器(container)。

容器能够提供什么?

1) 通信的支持:不用自己去创建ServerSocket,监听接口,不用创建流,容器知道如何去通信,使你只关心业务逻辑;

2) 管理生命周期:容器控制着servlet的生和死,负责加载,实例化和初始化servlet,并调用生命周期方法;

3) 多线程的支持:会为每一个servlet请求创建一个新的java线程;

4) JSP的支持:能够把JSP翻译成为一个真正的Servlet

3.容器如何处理请求?

1) 用户发送一个HTTP请求,指向的是一个Servlet而不是静态页面;


2) 容器看出来这个请求是一个servlet,就会创建两个对象

HttpServletRequest

HttpServletResponse


3) 容器根据请求报文中的url找到正确的servlet,并且为这个servlet对象创建或分配一个线程,把请求和响应对象传递给servlet线程;


4) 容器会调用service方法,根据不同的类型调用doGetdoPost


5) doGet方法调用,生成一个动态的HTML,并且传递给响应对象


6) 线程结束,容器会将响应对象转换成HTTP响应报文,发回客户端,删除请求和响应对象。


4.请求和响应对象

1) 请求对象 (javax.servlet.http.HttpServletRequest)  ServletRequest

作用:

1> 提取客户端的信息

username=tom&pwd=123

- 提取客户端提交的表单信息(页面控件的值);

- 提取客户端的详细信息(ip,提交方法…)

- 提取客户端的Cookie信息

例子:用户登录功能,在servlet中检查提交上来的值

2> 设置字符集

- 表单以Post方式提交

- 页面的字符集必须是支持中文

- Request设定的字符集和页面的字符集要一致;

3> 资源的跳转 – 请求转发

4> 作用域,可以用来传值

 

2) 响应对象 (javax.servlet.http.HttpServletResponseServletResponse

1> 设定字符集;

2> 向客户端发送信息

- HTML页面

- XML信息 – AJAX

- 发送Cookie信息

- 发送任意类型的文件信息 – 文件的下载;

3> 提供页面跳转的功能 – 请求重定向


5.两种跳转方式的区别

   Request对象提供的跳转叫做 请求转发(站内跳转)


   Response对象提供的跳转叫做请求重定向


1> 请求转发实际上是问题的转发,在跳转的过程中并没有响应客户端,在源和目标之间是可以用request对象进行传值的;请求重定向在跳转的过程中实际上是响应了客户端了,客户端发送了两次请求,不能够使用request进行传值的;

2> 客户端可以看到请求重定向目标资源的URL,不能看到请求转发目标资源的URL

3> 请求转发速度快,请求重定向速度慢;

4> 请求转发只能访问站内资源,而请求重定向可以定位到站外资源(比如 百度);

6. Cookie的使用

可以在客户端保存信息;可以把信息保存在客户端的文件中,或浏览器的缓冲中。纯文本的,以name-value对的形式保存;

- request对象,可以将cookie信息从客户端发送到服务器端;

- response对象,可以向客户端写cookie信息;

 

7.Session对象

   Session对象是一个作用域,可以用来存属性(attribute)值,这个作用域可以持续多个请求,保存用户的会话信息;

Session对象是在服务器端生成的,由容器来进行维护;一般来讲,我们会在用户登录成功以后,把用户的详细信息保存在当前会话的session对象中,在当前会话后续的请求中,都可以通过session对象得到当前用户的详细信息;

我们约定,只有session对象中有用户的信息,就说明用户已经登录了。

  使用request.getSession()方法可以得到session对象,当用户第一次调用这个方法,会新建一个session对象,每个session对象都有一个唯一的id,这个id会随着响应,以cookie的形式发送到客户端,客户端后面的请求中都会将id发回服务器,服务器就会找到当前会话所对应的session对象。

含有Sessionidcookie由容器维护,而且保持在客户端的浏览器缓存中,这就意味着一旦客户关闭的浏览器,就结束了本次会话。


Session的三种死法:

1). 超时;

2). 调用invalidate(销毁当前会话的session对象)

3). 应用结束; (所有的session对象都会被销毁)

如果cookie被禁用的话,还有一个补救的办法来使用session,就是URL重写,response对象中有一个encodeURL方法,可以进行URL的重写

监控Session的使用情况,监控session的创建,session的销毁,什么时候向session里存入什么值

关于session的监听器

1). HttpSessionListener(接口):监控session的创建和销毁;

2). HttpSessionAttributeListener (接口):监控session对象的添加,删除和修改;

3). HttpSessionBindingListener (接口):监控某一个类的对象在session中的出入情况;

8.容器如何找到Servlet

一个servlet有三个名字

1). 类名:开发人员所关注的;

2). 部署名(内部名):部署人员关注的;

3). 公共的URL名:客户;

 

<servlet>标签将内部名和类名映射到一起

<servlet-mapping>将内部名映射到公共的URL名上


9.说了这么多,什么是容器?

web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客服端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。一个服务器可以多个容器。


0 0
原创粉丝点击