HTTP协议:
什么是HTTP,Http是超文本传输协议,从浏览器到服务器称为请求,从服务器回到浏览器称之为响应
请求对象:(HttpServletRequest):
请求对象分为请求头,请求行以及请求实体下面分别来讲一下:
请求行包括:传输方式(get或post) 请求的地址(url) 协议的版本
请求头中只有:只有键值对形式存在的参数
请求实体:post传参方式,需要注意的是,当传输方式为get时,表单中的值是在地址的问号后面,
当传输方式为post时值是在请求实体中
HttpServletRequest的本质上就是HTTP协议的请求所封装的
请求对象中的方法:
1》获取请求行中的内容
Request.getMethod() 获取请求方式
Request.getRequestURI() 获取地址栏中?之前端口之后
Request.getRequestURL() 获取?之前所有,返回StringBuffer
Request.getScheme() 获取协议
Request.getContextPath() 获取根目录
Request.getQueryString() 获取?之后
2》获取请求头中的内容:
Request.getHeader(键) 键是不区分大小写的
3》获取网络信息:
request.getRemoteAddr() 获取客户端ip地址
Request.getRemotePort() 获取客户端的端口
Request.getLocalAddr() 获取服务器IP地址
Request.getLocalPort() 获取服务器端口号
4》获取表单参数:
首先获取单键单值:
Request.getParameter(键) 返回String,需要注意的是如果没有键返回的是null,
有键而没有值返回空字符串;
获取同键不同值(主要针对复选框):
request.getParameterValues(键) 返回一个String[]
获取所有键的集合:
Request.getParameterNames() 返回的是Enumeration,也就是一个容器
While(enum对象.hasMoreElements()){
enum对象.nextElement();
}
如何解决请求中的乱码问题:
request.setCharacterEncoding(当前项目的编码集)
注意:
本身对请求实体进行编码,针对于post编码。如果需要对get同时一起编码,需要在配置端口号的地方添加useBodyEncodingForURI="true"。
响应对象:(HttpServletResponse)
响应行:包含协议版本,状态码,还有状态描述
响应头:也是键值对的形式存在的
响应实体:字符串或者是流信息
HttpServletResponse响应对象:
设置响应头:
response.setHeader(键,值) 忽略大小写
设置刷新,refresh
可以单独写秒数,代表的是多少秒后刷新本页面
也可以写秒数;url="地址" 代表的是多少秒后刷新并跳转到指定地址
设置响应的编码集:
Response.setHeader("content-type","text/html;charset=服务器编码集")
需要注意的是需要把这句话放在其他代码之上
设置响应字体:
输出字符串:
Response.getWriter() 得到的是PrintWirter
输出流信息:
Response.getOutputStream(),返回的是ServletOutputStream,可以直接用OutputStream来接,剩下的就全是普通的流信息了
需要注意的是当用到form表单时,form表单的action后面如果跟了自己添加的参数,如果请求方式是get,表单的参数会将action添加的参数全部覆盖掉。
解决方式:
1)把get换成post。
2)使用get的话,可以用隐藏域。