Servlet使用中的常见问题分析

1. 后端接收前端数据时设置编码

tomcat8之前,设置编码:

1.1 get请求方式:

   //get方式目前不需要设置编码(基于tomcat8)
   //如果是get请求发送的中文数据,转码稍微有点麻烦(tomcat8之前)
   String fname = request.getParameter("fname");
   //1.将字符串打散成字节数组
   byte[] bytes = fname.getBytes("ISO-8859-1");
   //2.将字节数组按照设定的编码重新组装成字符串
   fname = new String(bytes,"UTF-8");

1.2 post请求方式:

    request.setCharacterEncoding("UTF-8");
   //tomcat8开始,设置编码,只需要针对post方式

   request.setCharacterEncoding("UTF-8");

注意:
需要注意的是,设置编码(post)这一句代码必须在所有的获取参数动作之前

2. Servlet的继承关系

重点查看的是服务方法(service())

2.1. 继承关系

  javax.servlet.Servlet接口
      javax.servlet.GenericServlet抽象类
          javax.servlet.http.HttpServlet抽象子类

2.2. 相关方法

  javax.servlet.Servlet接口:
    void init(config) - 初始化方法
    void service(request,response) - 服务方法
    void destory() - 销毁方法

  javax.servlet.GenericServlet抽象类:
    void service(request,response) - 仍然是抽象的

  javax.servlet.http.HttpServlet 抽象子类:
    void service(request,response) - 不是抽象的

2.2.1. String method = req.getMethod(); 获取请求的方式

2.2.2. 各种if判断,根据请求方式不同,决定去调用不同的do方法

 if (method.equals("GET")) {
            this.doGet(req,resp);
        } else if (method.equals("HEAD")) {
            this.doHead(req, resp);
        } else if (method.equals("POST")) {
            this.doPost(req, resp);
        } else if (method.equals("PUT")) {

2.2.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.endsWith("1.1")) {
            resp.sendError(405, msg);
        } else {
            resp.sendError(400, msg);
        }
    }

2.2.4 小结:

  1. 继承关系: HttpServlet -> GenericServlet -> Servlet
  2. Servlet中的核心方法: init() , service() , destroy()
  3. 服务方法:
  • 当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)
  • 在HttpServlet中我们会去分析请求的方式:到底是get、post、head还是delete等等,然后再决定调用的是哪个do开头的方法。
  • 那么在HttpServlet中这些do方法默认都是405的实现风格-要我们子类去实现对应的方法,否则默认会报405错误
  1. 因此,我们在新建Servlet时,我们才会去考虑请求方法,从而决定重写哪个do方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值