我只摘录了我觉得在开发过程中有用或可能有用的内容
考试考了里面的70分左右,嘻嘻嘻
HTTP协议的传输方式
(居然会考这个,TAT,我只知道POST和GET)
请求和响应
Servlet最主要的作用就是处理客户端请求,并向客户端做出响应。针对Servlet的每次请求,Web服务器在调用service()方法前,都会创建两个对象:HttpServletRequest和HttpServletResponse。其中HttpServletRequest用于封装HTTP请求消息,简称request对象;HttpServletResponse用于封装HTTP响应消息,简称response对象。
Web服务器只会创建一个实例对象,然而每次请求都会重新创建一个request对象和response对象。
404状态码表示找不到客户端请求的资源
Response对象的方法
getOutputStream() & getWriter()方法
getOutputStream返回OutputStream对象以字节流(二进制)输出
getWriter返回PrintWriter以字符输出
String data=“itcast”;
OutputStream out=response.getOutputStream();
out.write(data.getBytes());
PrintWriter print=response.getWriter();
print.write(data);
getOutputStream和getWrite不能同时使用,否则会发生IllegalStateException异常
setHeader用来设置响应头字段
解决中文乱码
response对象的字符输出采用ISO-8859-1编码
在doGet或doPost或Service最前端加
response.setCharacterEncoding(“utf-8”);
response.setHeader(“Content-Type”,”text/html;charset=utf-8”);
or
response.setContentType(“text/html;charset=utf-8”);
刷新跳转
2秒后刷新跳转到其他页面
response.setHeader(“Refresh”,”2;URL=http://www.baidu.com”);
每隔3秒定时刷新当前页面
response.setHeader(“Refresh”,”3”);
response.getWriter.println(new java.util.Date());
请求重定向
请求重定向指Web服务器接收到客户端请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求
会生成302响应码
需要使用绝对路径,路径前端加/
response.sendRedirect(“/chapter04/welcome.html”);
路径前加 /
Request对象的方法
利用Referer请求头防止“盗链”(p130)
DownManagerServlet
PrintWriter out=response.getWriter();
String referer=request.getHeader(“referer”);
String sitePart=“http://”+request.getServerName();
if(referer!=null&&referer.startsWith(sitePart)){
//请求头是不是自身!!!
out.println(“dealing download...”);
}else{
RequestDispatcher rd=request.getRequestDispatcher(“/download.html”);
rd.forward(request,response);
}
在WebContent根目录下编写download.html
<a href=“/chapter04/DownManagerServlet”>download</a>
浏览器中直接输入DownManagerServlet的URL,第一次访问时不会有Referer请求头,再点击download会显示结果。
链接才会产生请求头,就是说输入URL访问不会产生Referer!
获取请求参数
当网页中表单(form)提交时
String getParameter(String name)
获取指定名称的参数值
String[] getParameterValues(String name)
获取指定名称的参数列表(比如多选按钮传来的值)
//html部分
<input type=“text” name=“username”/>
<input type=“checkbox” name=“hobby” value=“sing”>唱歌
<input type=“checkbox” name=“hobby” value=“dance”>跳舞
<input type=“checkbox” name=“hobby” value=“football”>足球
//servlet部分
String name=request.getParameter(“username”);
String[] hobbys=request.getParameterValues(“hobby”);
如果获得的属性值不为String或者基本类型,需要进行数据转化,例如对一个User对象
User user=(User)request.getParameter(“user”);
解决请求中文乱码
只对POST有效对,GET无效
request.setCharacterEncoding(“utf-8”);
GET提交表单时
String name=request.getParameter(“username”);
name=new String(name.getBytes(“iso8859-1”),”utf-8”);
public void setAttribute(java.lang.String name,java.lang.Object o);
可以在请求转发时添加属性
请求转发
RequestDispatcher getRequestDispatcher(String path) 参数path必须以“/”开头,
RequestDispatcher接口的方法
1.forward(ServletRequest request,ServletResponse response) :对请求做初步处理后,转发给其他资源响应,其他资源处理完后直接将结果返回客户端;
2.include(ServletRequest request,ServletResponse response) :客户端端响应结果包含当前Servlet的,也包含其他Web资源的;
request.getRequestDispatcher(“/ResultServlet”).<