HttpServlet 类

HttpServlet
1、HttpServlet概述
        HttpServlet类是GenericServlet的子类。
    它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。

2、HttpServlet覆盖了service()方法
        HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet
    自己的方法,不是从Servlet继承来的。在HttpServlet的service(ServletRequest,ServletResponse)方法中会
    把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse,
    然后调用service(HttpServletRequest,HttpServletResponse)方法,这说明子类可以去覆盖
    service(HttpServletRequest,HttpServletResponse)方法即可,这就不用自己去强转请求和响应对象了。
    其实子类也不用去覆盖service(HttpServletRequest,HttpServletResponse)方法,因为HttpServlet还要
    做另一步简化操作,下面会介绍。
    HttpServlet.java 源码
    public abstract class HttpServlet extends GenericServlet {

        @Override
        public void service(ServletRequest req, ServletResponse res)
                    throws ServletException, IOException {
            HttpServletRequest  httpServletRequest;
            HttpServletResponse httpServletResponse;
            try {
                httpServletRequest = (HttpServletRequest) req;   [强转]
                httpServletResponse = (HttpServletResponse) res;   [强转]
            } catch (ClassCastException e) {
                throw new ServletException("non-HTTP request or response");
            }
            service(httpServletRequest, httpServletResponse);      [调用下面service()方法]
        }

        protected void service(HttpServletRequest req, HttpServletResponse resp)
                    throws ServletException, IOException {
            ……
        }

        ……
    }

3、doGet()和doPost()
        在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求
    是GET还是POST。如果是GET请求,那么会去调用本类的doGet()方法,
    如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。
    如:
        public class AServlet extends HttpServlet {
            public void doGet(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                System.out.println("hello doGet()...");
            }
        }

        public class BServlet extends HttpServlet {
            public void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {
                System.out.println("hello doPost()...");
            }
        }
4、HttpServletRequest 和 HttpServletResponse类

    HttpServletRequest 的方法:
        * String getParameter(String paramName):获取指定请求参数的值;
        * String getMethod():获取请求方法,例如GET或POST;
        * String getHeader(String name):获取指定请求头的值;
        * void setCharacterEncoding(String encoding):设置请求体的编码!因为GET请求没有请求体,
            所以这个方法只只对POST请求有效。当调用request.setCharacterEncoding(“utf-8”)之后,再通
            过getParameter()方法获取参数值时,那么参数值都已经通过了转码,即转换成了UTF-8编码。所以,
            这个方法必须在调用getParameter()方法之前调用!

    HttpServletResponse 的方法:
        * PrintWriter getWriter():获取字符响应流,使用该流可以向客户端输出响应信息。
            例如response.getWriter().print(“<h1>Hello JavaWeb!</h1>”);
        * ServletOutputStream getOutputStream():获取字节响应流,当需要向客户端响应字节数据时,需要使用
            这个流,例如要向客户端响应图片;
        * void setCharacterEncoding(String encoding):用来设置字符响应流的编码,例如在调
            用setCharacterEncoding(“utf-8”);之后,再response.getWriter()获取字符响应流对象,这时的
            响应流的编码为utf-8,使用response.getWriter()输出的中文都会转换成utf-8编码后发送给客户端;
        * void setHeader(String name, String value):向客户端添加响应头信息,
            例如setHeader(“Refresh”, “3;url=http://www.itcast.cn”),表示3秒后自动刷新到http://www.itcast.cn;
        * void setContentType(String contentType):该方法是setHeader(“content-type”, “xxx”)的简便方法,
            即用来添加名为content-type响应头的方法。content-type响应头用来设置响应数据的MIME类型,
            例如要向客户端响应jpg的图片,那么可以setContentType(“image/jepg”),如果响应数据为文本类型,
            那么还要台同时设置编码,例如setContentType(“text/html;chartset=utf-8”)表示响应数据类型为
            文本类型中的html类型,并且该方法会调用setCharacterEncoding(“utf-8”)方法;
        * void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。
            例如给客户端发送404:sendError(404, “您要查找的资源不存在!”)。

猜你喜欢

转载自blog.csdn.net/weixin_42472048/article/details/81592310