Servlet
什么是ServLet
Sun公司制定的一种用来扩展web服务器的组件规范
404:资源不存在
405:service()方法名错误
500:服务器内部错误(程序有异常)
使用Servlet接收数据
servlet是如何接收表单数据的?
浏览器发出提交表单的请求,浏览器根据请求资源路径,建立与服务器的链接,浏览器将表单与其他相关数据,根据HTTP协议打包,将数据发送给服务器。
服务器接收请求之后,创建request和response对象,根据HTTP协议,将数据封装到request对象中,根据数据包中的请求资源路径,匹配到具体的servlet,实例化servlet,调用servlet中service()方法,将request和response对象传给service()方法.
程序员在service方法中,获取request对象中的数据,通过getParameter(“paramName”)来获取具体的表单中的数据。
servlet是如何将处理结果返回浏览器?
Servlet中的service()方法接收到response对象,在方法中将响应的内容封装到response对象中,当service()方法执行结束,服务器将response对象中的数据,根据HTTP协议封装到一个响应数据包中,并将该响应数据包发送给浏览器。
HTTP协议
什么是HTTP协议?
超文本传输协议,规定了浏览器与web服务器之间如何通信,以及通信的数据格式
浏览器与服务器的通讯过程
- 浏览器建立与服务器的链接
- 浏览器打包,向服务器发送请求数据包
- 服务器打包,向浏览器发送响应数据包
- 关闭链接
请求数据包的组成
请求行:请求方式 + 请求资源路径 + 协议版本
若干消息头
实体内容(只有请求内容为POST时,实体内容才会有数据)
消息头数据包的组成
状态行:协议类型 + 状态码 + 状态描述
若干消息头
实体内容
通过MyEclipse中的monitor抓取数据包,并查看数据包的结构。
浏览器 –monitor–> 服务器(tomcat) —> 根据资源路径
修改Tomcat配置
修改端口号
tomcat/conf/server.xml自动重写载入项目更新
tomcat/conf/context.xml
<Content reloadeable="true">
- 显示项目的页面列表
tomcat/conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
改为:
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
HttpServletRequest对象
getParameter("name") 获取请求参数,返回字符串,如果参数不存在,返回null
getParameterValues() 获取一个参数名多个值的参数(例如多选框的数据),返回字符串数组,如果不存在,返回null
HttpServletResponse对象
- 设置对客户端的输出内容
- 设置响应状态码
- 设置浏览器的解码方式
- 设置cookies
- 实现重定向
getContentType(“text/html”) 设置文件类型
MIME类型:
html —— “text/html”
jpg —— “image/jpeg”
setCharacterEncoding(“”) 设置编码格式
处理请求参数中的乱码
当请求方式为POST时,在获取参数之前,request.setCharacterEncoding(“utf-8”)
当请求方式为GET时,服务器处理请求参数与POST不同。先获取编码,再重新编码。
String name = request.getParameter(“name”);
name = new String(name.getBytes(“ISO-8859-1”),”utf-8”);
请求方式
通过浏览器,如何发出请求?
- 通过超链接
- 地址栏直接输入URL
- 提交表单
- 通过JavaScript
以上操作中只有提交表单,并且method=”post”时,请求方式为POST请求,其他操作都是GET请求。
以超链接为例,如何向servlet中传递请求参数?
<a href="hello.do?name='hello'">访问servlet</a>
GET
当需要向服务器请求指定资源时使用的方法。
特点:请求参数会显示在浏览器的地址栏上。
POST
向服务器提交数据时使用的方法
特点:请求参数添加到实体内,可提交大量数据