1.设置编码
tomcat8之前设置编码:
(1).get请求方式:
get方式目前不需要设置编码(基于Tomcat8) 如果时get请求发送的中文数据,转码稍微比较麻烦(Tomcat8之前) tomcat8之前转码方式: /* String fnama(属性名,可随意设置)=request.getParameter("fnama");
1.将字符串打散成字节数组
byte[] bytes=fnama.getBytes("ISO-8859-1");
2.将字节数组按照设定的编码重写组装成字符串
fname=new String(bytes,"UTF-8"); */
(2).post请求方式
request.setCharacterEncoding("UTF-8");
注意: 需要注意的是,设置编码这一句代码必须在所有获取参动作之后 tomcat8之后,设置编码只需要针对post
2.Servlet的继承关系 -重点查看的是服务方法(servlet())
1.继承关系
javax.servlet.Servlet接口 javax.servlet.GenericServlet抽象类 javax.servlet.http.HttpServlet抽象子类
2.相关方法
/* javax.servlet.servlet接口: void init(config) --初始化方法 void service(request,response) --服务方法 void destroy() --销毁方法 javax.servlet.GenericServlet抽象类: void servlet(request,response) --仍让是抽象的 javax.servlet.http.HttpServlet 抽象子类: void servlet(request,response) --不是抽象的 1.String method = req.getMethod();获取请求的方式 */
2.各种if判断,根据请求方式不同,决定去调用不同的do方法
if (method.equals("GET")) {' this.doGet(req,resp); } else if (method.equals("HEAD")) { lastModified = this.getLastModified(req); this.maybeSetLastModified(resp, lastModified); this.doHead(req, resp); } else if (method.equals("POST")) { this.doPost(req, resp); }
3.在HttpServlet这个抽象类中,do方法都差不多;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String protocol=req.getProtocol(); String msg = lStrings.getString("http.method_get_not_supported"); if (protocol.length() != 0 && !protocol.endsWith("0.9") && !protocol.endsWith("1.0")) { resp.sendError(405, msg); } else { resp.sendError(400, msg); } }
4.小结:
1.继承关系:HttpServlet->GenericServlet->Servlet
2.Servlet中的核心方法:init()、servlet()、destroy()
3.服务方法:当有请求过来时,servlet方法会自动响应(其实时tomcat容器调用的) 在HttpServlet中我们回去分析请求的方式:到底是get、post、head还是delete等 然后再决定调用的是哪个do开头的方法 那么在HttpServlet中,这些do开头的方法默认都是405的实现风格-要我们子类去实现 对应的方法,否则默认会报405错误
4.因此我们在新建Servlet时,我们才会去考虑请求的方式,从而决定重写哪个do方法
标签:编码,Sevlet,Tomcat,resp,req,javax,HttpServlet,servlet,void From: https://www.cnblogs.com/chouxia/p/17789839.html