servlet和http请求

1.servlet
servlet是和平台无关的服务器组件,可以交互式的来浏览和修改数据,生成动态的web内容。它运行于
servlet容器中
2.servlet容器
servlet容器负责servlet和客户的通信和调用servlet方法。
servlet和客户通信采用“请求/相应”模式。
3.创建servlet,及其工作原理
(1)创建一个HelloServlet.java类,实现Servlet接口,实现接口方法

init()
service();
getServletConfig();
getServletInfo();
destory();

(2)在/WEB-INF/web.xml里面配置HelloServlet
做两件事
a.注册:把servlet名字和对应的class注册到servlet容器中。

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>

b.定义url:即页面可以通过什么样的url可以访问到servlet,/是根目录

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet1</url-pattern>
</servlet-mapping>

c.当通过浏览器访问url: http://127.0.0.1/8080/view-servlet/HelloServlet访问是

容器首先把根目录截取出来:http://127.0.0.1/8080/view-servlet/
获取servlet名字:HelloServlet
根据servlet名字,找到servlet对应的类
调用类中对应的doGet() doPost()方法

3.servlet方法和生命周期,以下方法都是有servlet容器调用(servlet响应请求过程)

(1)构造器:只调用一次,第一次请求到达时,初始化servlet(说明servlet是单实例,非线程安全)
(2)init():只调用一次,创建完实例后,用于初始化servlet,传入ServletConfig 参数
(3)service():多次调用,用于响应请求。
(4)destory():只调用一次,所在web应用被卸载前调用。

4.load-on-startup参数:

<load-on-startup>param</load-on-startup>
(1)param为负数时,容器启动时,不加载servlet
(2)param>=0时,值越大,启动越晚

5.servlet映射细节

(1)一个servlet可以有多个servlet-mapping与之匹配
(2)通配有两种方式
a. /* (带下划线)
b. *.do *.action *.aa(不带下划线)
/*.do不合法

6.init方法中的 ServletConfig,封装了servlet信息

(1)获取servlet的初始化参数<init-param>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
获取方法:arg0.getInitParameter("p1")
(2)获取ServletContext

7.ServletContext

(1)可以由ServetConfig获取
arg0.getServletContext()
(2)可以认为代表当前WEB应用,可以获取当前web应用的各个反面的信息
a. 获取全局初始化参数
<context-param>
<param-name>c1</param-name>
<param-value>c2</param-value>
</context-param>
b.获取当前web应用某一个文件,在容器中的绝对路径。
getRealPath("") c.获取当前web应用的名称
getContextPath();
d.获取输入流
getResourceAsStream("/WEB-INF/class/jdbc.properties") web根目录

8.Http简介
(1)什么是http

web浏览器与web服务器之间,一问一答的交互过程,必须遵循一定规则,这个规则就是http协议。
http(超文本传输协议),是一个应用层协议,用于定义,web浏览器与web服务器之间的数据交换的过程,及交换
过程中,数据的格式。

(2)http会话方式分四步

a.建立连接
b.发送请求
c.回应请求
d.关闭连接

(3)http请求结构:

一个请求行
GET http://192.168.1.246:10085/manager/objcetstore/add_obj_user.json?obj_name=lvyafei&obj_password=123456&_=1451025520332 HTTP/1.1
多个消息头:
Host: 192.168.1.246:10085
Proxy-Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://192.168.1.246:10085/manager/views/service/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: X-LENOVO-SESS-ID=gfp0p4t3dbr3km3eemmrl95sp1; language=zh; JSESSIONID=aaaCFA_Q49wlj7MXN2xhv; lenovo_user_id=1; lenovo_user_name=admin; lenovo_user_pwd=fbc683e842c2c61496de800fed2d0de3
空行
实体内容
obj_name:lv
obj_password:123456
_:1451025520332

(4)http响应结构

一个状态行
HTTP/1.0 200 OK
多个消息头
Server: Tengine/2.0.3
Date: Fri, 25 Dec 2015 07:10:34 GMT
Content-Type: application/json;charset=UTF-8
X-Cache: MISS from Gateway-02
Via: 1.0 Gateway-02 (squid/3.1.9)
一个空行 实体内容
<html><body>.....</body></html>

(5)POST和GET请求的区别

a. GET http://localhost:8080/HelloServlet1?txt=lvyf&passwd=123
特点:把请求参数放在url的问号后面,传输数据一般在1K以下
b. POST 在Request Headers下面有一栏FormData,请求参数在FormData里面
特点:把请求参数放在FormData里面,以http消息的实体内容发送到服务器,传输数据量大

9.在servlet里面获取请求信息

(1)
servlet的service(ServletRequest request, ServletResponse response)方法
ServletRequest(接口)封装了请求信息
ServletResponse(接口)封装了响应信息
(2)获取参数:request.getParamter("username");

10.HttpServlet

HttpServlet是一个Servlet,针对Http请求定制
在service方法中,把ServletRequest转为HttpServletRequest,然后就可获取请求的方法是post还是get
,根据请求方式创建doPost,doGet方法。

11. get请求-->到达service--service里面获取HttpServlet对象-->HttpServletRequest对象获取请求方式-->调 对应的doXX()

12.请求转发和重定向的区别?

HttpServletResponse.sendRedirect方法
RequestDispatcher.forward方法
(1)看名字就可以看出来RequestDispatcher的转发,只是向服务器内部转发,重定向是响应,不仅可向内部,也可向
外部发送请求。
(2)forward在转发者和被转发者之间共享HttpServlet对象资源,重定向,被重向的地址获取不到HttpServlet资源
上一篇:Spring5 of WebClient(转载)


下一篇:解释生成器(generator)于函数的不同,并实现和使用简单generator?