1.HttpServlet
1.继承自GenericServlet,将servletrequest和servletresponse强转成了Httpservletrequest和Httpservletresponse,从而Httpservletrequest可以使用getmethod方法,来获取请求方法。
2.有dopost和doget方法来处理对应的请求。(以1为基础)
3.直接访问后台是get请求,正确流程过去的请求名可在html文件里定义:
<form action="hello" method="post"> <!-- servlet匹配的url和请求方法-->
结束html后自动访问action后的url
2.HttpServletRequst(HttpServlet的do…方法内的参数)
- 请求的生命周期很短暂,一次响应结束就被销毁。
2.在web.xml里的form里+:
用户名:<input type="text" name="Username"/><br>
可定义Username的变量,值为输入在“text”里的值,而HttpServletRequst的实例化对象可以get到这些变量。(要注意enumeration的遍历方法)
3.参数和值存在map里,key为string,value为string数组。getparameter()方法等价于getparameterValues()[0]。
<input type="checkbox" name="a" value="a">
<input type="checkbox" name="a" value="b">
<input type="checkbox" name="a" value="c">
此时key=“a”,value={“a”,“b”,“c”}。
4.parameterMap的遍历方法:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST");
Map<String, String[]> map = req.getParameterMap();
for (Map.Entry<String, String[]> k : map.entrySet()){
String key=k.getKey();
String []values=k.getValue();
System.out.println("key:"+key);
for (String a: values){
System.out.println(a);
}
System.out.println();
}
}
5.attribute和parameter区别.
6.获取服务端数据的几个方法:
(后两个分别是 获取路径的精确部分 和 通用符部分 )
7.post请求 浏览器传给servlet参数值出现乱码的原因:
浏览器的中文数据用UTF-8传输(tcp协议),而Tomcat服务器默认解析字节流时的方法不支持中文
解决方案:
req.setCharacterEncoding("UTF-8");
即修改解析字节流方法
注:如果Tomcat版本低,get方法也会出现乱码,此时需要修改server.xml配置文件如图
或(弊端是每个中文参数都要重复以下操作)
3.HttpServletResponse(HttpServlet的do…方法内的参数)
getwriter 在页面打印信息
PrintWriter out = resp.getWriter();
out.append("a");//print println write 都可以
同样也会遇到乱码问题,解决方案(在实例化out前):
//设置响应的MIME类型,像video/mp4,image/jpg,告诉浏览器响应的解析方式
resp.setContentType("text/html");
//setCharacterEncoding方法使用前提是先使用setContentType,此方法用于修改charset
resp.setCharacterEncoding("UTF-8");
常用的是直接:
resp.setContentType("text/html;charset=UTF-8");