zoukankan      html  css  js  c++  java
  • Servlet(9)—HttpServlet和改进Servlet实例

    1. HttpServlet:针对Http协议定义的一个Servlet基类,唯一的功能就是强制类型转换ServletRequest转换成HttpServletRequest,ServletResponse转换成HttpServletResponse,HttpServlet继承自GenericServlet,而GenericServlet实现了Servlet接口和ServletConfig接口。也就是说编写Servlet类不需要直接实现Servlet类,去继承HttpServlet就行。
    2. 好处:
      • 不会产生多余无用的代码
      • 不用在强制类型转换了(为了获取请求的方式是get还是post需要用到需要用request.getMethod(),其中request必须是HttpServletRequest类型的,HttpServlet在service(ServletRequest req, ServletResponse res)已经强制类型转换好了)
      • 在service(HttpServletRequest req, HttpServletResponse resp)重载方法中获取请求方式,get请求会调用doget方法,post请求会执行dopost方法。所以我们可以再这2个方法中定义我们自己的业务逻辑

    3 . Http中的方法:
    HttpServlet()
    doGet(HttpServletRequest, HttpServletResponse)
    getLastModified(HttpServletRequest)
    doHead(HttpServletRequest, HttpServletResponse)
    doPost(HttpServletRequest, HttpServletResponse)
    doPut(HttpServletRequest, HttpServletResponse)
    doDelete(HttpServletRequest, HttpServletResponse)
    getAllDeclaredMethods(Class< ? >)
    doOptions(HttpServletRequest, HttpServletResponse)
    doTrace(HttpServletRequest, HttpServletResponse)
    service(HttpServletRequest, HttpServletResponse)
    maybeSetLastModified(HttpServletResponse, long)
    service(ServletRequest, ServletResponse)

    改进后的实例:
    HttpServlet

    /**
     * 针对Http协议定义的一个Servlet基类
     *唯一的功能就是强制类型转换ServletRequest转换成HttpServletRequest,ServletResponse转换成
     *HttpServletResponse
     */
    public class MyHttpServlet extends MyGenericServlet {
    
        @Override
        public void service(ServletRequest arg0, ServletResponse arg1)
                throws ServletException, IOException {
            if(arg0 instanceof HttpServletRequest){
                HttpServletRequest httpServletRequest = (HttpServletRequest) arg0;
                if(arg1 instanceof HttpServletResponse){
                    HttpServletResponse httpServletResponse = (HttpServletResponse) arg1;
                    service(httpServletRequest, httpServletResponse);
                }
            }   
        }
    
        public void service(HttpServletRequest arg0, HttpServletResponse arg1)
                throws ServletException, IOException {
            //1.获取请求方式
            String method = arg0.getMethod();
    
            //2.根据请求的方式再调用对应的处理方法
            if("GET".equalsIgnoreCase(method)){
                doGet(arg0, arg1);
            }else if("POST".equalsIgnoreCase(method)){
                doPost(arg0, arg1);
            }
        }
    
        public void doPost(HttpServletRequest arg0, HttpServletResponse arg1) 
                throws ServletException, IOException{
    
        }
    
        public void doGet(HttpServletRequest arg0, HttpServletResponse arg1) 
                throws ServletException, IOException{
    
        }
    }
    

    Servlet:

    public class LoginServlet3 extends MyHttpServlet {
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException  {
            //获取请求的方式
            String method = request.getMethod();
            System.out.println("请求方式:" + method);
    
            //1.获取请求参数username,password(获取的是表单信息)
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            //2.获取当前web应用的初始化参数user,password。
            String initUser = getServletContext().getInitParameter("user");
            String initPassword = getServletContext().getInitParameter("password");
    
            PrintWriter out = response.getWriter();
            //3.比对
            if(initUser.equals(username) && initPassword.equals(password)){
                //4.打印响应字符串
                out.println("Hello: " + username);
            }else{
                out.println("Sorry: " + username);
            }
        }
    
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException  {
            //获取请求的方式
            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            String method = httpServletRequest.getMethod();
            System.out.println("请求方式:" + method);
    
            //1.获取请求参数username,password(获取的是表单信息)
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            //2.获取当前web应用的初始化参数user,password。
            String initUser = getServletContext().getInitParameter("user");
            String initPassword = getServletContext().getInitParameter("password");
    
            PrintWriter out = response.getWriter();
            //3.比对
            if(initUser.equals(username) && initPassword.equals(password)){
                //4.打印响应字符串
                out.println("Hello: " + username);
            }else{
                out.println("Sorry: " + username);
            }
        }
    }
    

    页面:

    <body>
    
        <form action="loginServlet" method="get">
            user:<input type="text" name="user"/>
            <br>
            password:<input type="password" name="password"/>
            <br>
            interesting:
            <input type="checkbox" name="interesting" value="read"/>read
            <input type="checkbox" name="interesting" value="walk"/>walk
            <input type="checkbox" name="interesting" value="swing"/>swing
            <input type="checkbox" name="interesting" value="shopping"/>shopping
            <input type="checkbox" name="interesting" value="tv"/>TV
            <br>
            <input type="submit" value="Submit"/>
        </form>
    </body>
  • 相关阅读:
    【NOIP2018PJ正式赛】摆渡车
    【NOIP2018PJ正式赛】龙虎斗
    【NOIP2018PJ正式赛】标题统计
    高精度除单精度
    关于输出的东东
    高精度乘单精度
    【NOIP2012模拟10.26】电影票
    【NOIP2012模拟10.26】雕塑
    【NOIP2012模拟10.26】火炬手
    【NOIP2016提高A组模拟9.7】千帆渡
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453986.html
Copyright © 2011-2022 走看看