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资源
servlet和http请求的更多相关文章
- Servlet处理get请求时的中文乱码问题
我们都知道,使用Servlet处理get请求时,如果get请求的参数中有中文,直接接收会是乱码,这个时候我们使用类似下面的语句来处理乱码: 12345 String name = request.ge ...
- Servlet获得Http请求,GET/POST
Servlet获得Http请求 Http请求信息格式 请求行(方法提交方式,URI,Http协议版本) GET方式提交:URI会包含查询字符串 POST方式提交:URI不会包含查询字符串 请求头 Ho ...
- web基础----->servlet中得到请求的数据
对tomcat的源码做一些分析,今天我们就开始servlet中的请求分析. form表单中的默认类型 一.在index.jsp中get请求: <form action="Paramet ...
- Servlet和HTTP请求协议
Servlet和HTTP请求协议 Servlet和HTTP请求协议 Servlet和HTTP请求协议 有待补充... servlet servlet applet 概念 servlet是运行在服务器上 ...
- Java Servlet学习笔记(四)Servlet客户端Http请求
Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...
- servlet 如何处理多请求访问以及线程讲解
servlet 如何处理多请求访问以及线程讲解 场景:js循环500次请求同一个后台接口,接口内部逻辑:1.查询商品数量,2.扣减商品数量 ,那么该接口是否需要考虑多线程并发安全问题? 分析: 1.先 ...
- javaweb servlet中使用请求转发乱码
乱码的方式有很多,这里指出一种不容易想到的 *请确保您的页面单独访问正常,经过servlet请求转发时,有PrintWriter out = response.getWriter()不正常,没有正常 ...
- servlet容器处理请求过程
下图是关于tomcat服务器接收客户请求并作出响应的图例. tomcat不仅仅只是一个servlet容器,也是一个web服务器,servlet容器在web服务器之内或者说servlet容器托管于web ...
- Servlet中的请求转发和重定向
跳转和重定向 有的时候客户端请求到达服务端后需要对请求重新转发到其它Servlet甚至别的服务器,这就需要跳转和重定向. 区别 一般来说,跳转是服务器内部跳转,例如将请求从一个Servlet转发给另外 ...
随机推荐
- WPF控件ComboBox 每个Item的ToolTip引发的异常
介绍 首先介绍下要实现的任务.做一个下拉框,当选择每个项的时候将鼠标发在上面显示该项的ToolTip的内容(Image). 实现 Model: public class SkinInfo : Noti ...
- Some Simple Models of Neurons
Linear neuron: \[y=b+\sum\limits_i{x_i w_i}\] Binary threshold neuron: \[z = \sum\limits_i{x_i w_i}\ ...
- BZOJ1180: [CROATIAN2009]OTOCI
传送门 一遍AC,开心! $Link-Cut-Tree$最后一题 //BZOJ 1180 //by Cydiater //2016.9.18 #include <iostream> #in ...
- photoshop切图介绍
第一部分:界面设置 1.点击“文件-新建”(或者ctrl+n)打开一个新建对话框.名称可随意填写.“预设”设置为自定,“宽度”一般选择1920,“单位”选为像素.“高度”可选择为2000,“单位”选为 ...
- 关于vs生成app错误提示,提醒Execution failed for task ':transformClassesWithDexForDebug'.
昨天将vs和android SDK更新之后生成app之后发现app生成出错,报错如下: FAILURE: Build failed with an exception. * What went wro ...
- java编程思想-java集合总结-基本概念
1.java 容器类类库的用途是"保存对象",并将其划分为两个不同的概念: 1)Collection.一个独立元素的序列,这些元素都服从一条或多条规则.List 必须按照插入的顺序 ...
- JavaWeb学习笔记——javabean与表单
- SublimeText2使用笔记
将Sublime Text2 加入右键菜单(转) 1. 运行中输入 regedit 打开注册表 2. 在HKEY_CLASSES_ROOT/*/shell/ 下新建’项’ ,名称自己觉得.我用的是Su ...
- 重启nginx
在env/nginx/sbin目录下输入:nginx,即可重启
- Unity逻辑热更新
http://www.xuanyusong.com/archives/3075 http://www.unitymanual.com/thread-36503-1-1.html http://www. ...