1.信息的处理(一切都是数据的处理和描述)
HttpServletRequest是对HTTP请求的描述(这里是封装或抽象)
HttpServletRequest&HttpServletResponse分别对请求和响应的处理,它们处理过程都分为2种: 1)设置型 2)数据处理型 。往往设置型的方法需要先调用,因为---这是常识....
2.Http是请求和响应的方式,一次请求和响应就是一个生命周期,所以有数据返回到浏览器端就代表生命周期开始结束,此时再进行响应方面的其它操作会出错(请求转发)或无效...........
3. / 与没有/
<servlet-mapping>
<servlet-name>HeaderDemo</servlet-name>
<url-pattern>/header.do</url-pattern>
</servlet-mapping>
<url-pattern>需要使用/,不然会报错
这里/header.do代表了http://www.localhost:8080/webapps/header.do的请求
/代表了相对与web应用程序的根目录
及:url-pattern是根据url来匹配的而不是根据jsp中action的值
<form action="/header.do" method="post">
<input type="submit" value="submit" /><br>
</form>
action="/header.do"
开始在此页面下显示jsp
http://localhost:8080/LGG_LXL_Book_ServletJsp/jsp/header.jsp
点击后为
http://localhost:8080/header.do
所以action="/header.do"的/代表了相对服务器的根目录
4.HttpServlet部分源代码
例如:注意粗体部分
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_put_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
} else {
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
}
}
5.中文处理问题
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");//指定浏览器数据的文字编码,默认按照ISO-8859-1处理字符串
String name = new String("abcde...".getBytes("ISO-8859-1"),"UTF-8") ;
"abcde..."是按照ISO-8859-1解码
name编码是utf-8
6.请求转发是request发出的,在容器内进行,不涉及浏览器端,所以浏览器地址栏不进行变化
7.HttpServeltResponse --- setContentType
response.setContentType("text/html;charset=utf-8");
==
response.setHeader("content-type","text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
setHeader()可直接设置某个标头名称的值,重复此方法后面的会覆盖前面的值
addHeader()在同一标头下,附加其它的值
8.HttpServletResponse --- sendRedirect与sendError
response.sendRedirect("....");
这个方法会在响应中设置HTTP状态码301以及Location标头,Location标头要求浏览器重定向到此处,所以浏览器地址栏会改变
Ps:
要求这个方法在执行时,没有开始响应(即没有数据放回到浏览器中)
处理请求的过程中发现一些错误时:
response.sendError(HttpServletResponse.SC_NOT_FOUND);//发送默认的错误信息
response.sendError(HttpServletResponse.SC_NOT_FOUND,msg);//发送msg
Ps:
同样sendError()必须在响应没有输出前执行
9.ServeltOutputStream的使用
对浏览器进行字节的输出
Ps:
同一个请求周期中,进行字节输出时,不能再进行字符的输出
即: HttpServletResponse的getWriter()与getOutputStream()只能使用一个