Tomcat编码和Sevlet继承关系

发布时间 2023-10-26 17:06:26作者: 柒酒

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方法