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资源