做软件行业这么长时间了,一直感觉基础不牢固,所以最近趁项目不忙重头打打基础,以下是对http及servlet进行了整理。
客户端向服务端发起的HTTP请求由三部分组成:请求行;消息报头;请求正文
请求行:包括方法符号和URI和协议版本。 GET /J5EE/ThreeServlet?deptno=10 HTTP/1.1
消息报头包括很多客户端信息
Cache-Conctrl 缓存指令一般设置为no-cache
connection 连接形式,最常见Kepp-Alive
accept 表示客户端可以接受那些类型的信息,例如text/html表示接收html,*/*表示任何类型
accept-encoding 客户端支持的编码
accept-language 客户端语言种类,可以在internet选择--语言中设置,可以判断这个值来决定显示什么语种的网页
host 请求资源的主机和端口号
user-agent 获得客户端操作系统信息和浏览器信息
referrer 页面来源
content-length 发送的请求正文的长度
HTTP请求-----请求正文:是请求最后的内容,如果用POST发送数据的话就可以看到请求正文的内容,用的是ISO编码,GET方法发送数据没有请求正文。
请求报头的相关方法:取得name的值 String getHeader(String name) ; 取得报头的所有名字 Enumeration getHeaderNames();
httpServletRequest相关方法:获取web应用路径 requst.getContextPath();
获得请求的方法 request.getMethed();
获得协议名 reqest.getProtocol();
获得参数字符串 request.getQueryString();
获取请求URI request.getRequestURI();
获取请求URL request.getRequestURL();
获取用户IP地址 request.getRemoteAddr();
获取服务器IP reqeust.getLocalAddr();
获取服务器主机名 request.getLocalName();
获取服务器端口 request.getLocalPort();
2、请求转发:允许把请求转发给同一个应用程序中的其他web组件。转发的原组件和目标组件共享request范围的内的共享数据。java.servlet.RequestDispatcher来实现,RequestDispatcher对象提供forward方法实现转发功能,具体实现如下
1、RequestDispatcher rd = request.getRequestDisPatcher("/xxServlet"); rd.forward(request, response);
2、RequestDispatcher rd = this.getServletContext().getRequestDisPatcher("/xxServlet"); rd.forward(request, response);
请求转发 和 重定向 的对比
目标范围 只能转发同一WEB应用的组件 可以是同一WEB应用,也可以是其他站点
"/"开头含义 表示WEB应用程序根目录 "/"表示整个WEB站点的根目录
地址栏显示URL 请求转发结束后,地址栏URL不变 重定向结束后,地址栏URL变成重定向目标URL
请求对象/相应对象 只产生一次请求对象和相应对象,并共享 会产生两次请求对象和相应对象。
3、httpServletResponse,主要时将servlet处理结果发给客户端,
报头设置相关方法:禁止页面缓存:response.setHeader("Cache-control","no-cache"); response.setDateHeader("Expires",0); 网页每隔2秒自动刷新 response.setIntHeader("Refresh", 2); 网页隔一段时间自动跳转到另一个地址 response.setHeader("refresh", "10; http://baidu.com");
其他方法: 获取用于页面输出的PrintWriter对象 PrintWriter getWriter(); 设置相应的MIME类型 void setContentTypee("text.html; charset=GBK"); 设置编码格式 response.setCharacterEncoding("GBK");