zoukankan      html  css  js  c++  java
  • 6、集成baseServlet用法

    为了解决重复写多个servlet使用集成baseServlet,其中的原理是对于servlet的继承类调用。

    1)从前端传输数据给后台参考 5(这里使用Ajax)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>ajax登陆页面</title>
    </head>
    <body>
            <span>账号</span><input type="text" name="username">
            <button>登陆</button>
        <script src="js/jquery-3.6.0.min.js"></script>
        <script>
            $("button").click(function(){
                var username = $("input[name='username']").val();
                $.ajax({
                    url:"user?method=login",            //请求地址
                    type:"get",        //请求方式
                    data:{            //前端给后台发送的参数
                        key:username
                    },    
                    dataType:"json",    //后台给前端返回参数的格式
                    success:function(result){    //result后台给前端响应的参数
                        if(result.status == true){
                            location.href = "index.jsp";
                        }else{
                            alert(result.message);
                        }
                    }
                });
                
            }); 
        </script>
    </body>
    </html>

    2)使用url:"user?method=login",先访问servlet中的user,但是对于user没有doget()方法所以转移到父类BaseServlet 中。

    package com.cqkj.controller;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.alibaba.fastjson.JSON;
    import com.cqkj.utils.ResultMap;
    
    
    
    @WebServlet("/user")
    public class UserServlet extends BaseServlet{
        //servlet是什么?     哪个类继承了HttpServlet,那么这个类就不再是类而是servlet
        ResultMap resultMap = new ResultMap();
        
        public String login(HttpServletRequest req, HttpServletResponse resp) {
            String username = req.getParameter("key");
            if(username.equals("gjj")) {
                resultMap.setStatus(true);
            }else {
                resultMap.setStatus(false);
                resultMap.setMessage("用户名输入有误!");
            }
            String jsonStr = JSON.toJSONString(resultMap);
            return jsonStr;
        }
        
        public String selectAllUser(HttpServletRequest req, HttpServletResponse resp) {
            return "";
        }
    }

    3)在baseservlet中调用doget()中使用反射机制调用user中的login/或其他方法,在通过BaseServlet 返回给前端中。

    import com.alibaba.fastjson.JSON;
    import com.cqkj.utils.ResultMap;
    
    
    
    public class BaseServlet extends HttpServlet{
        
        
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                request.setCharacterEncoding("UTF-8");
                response.setCharacterEncoding("UTF-8");
                
                String methodStr = request.getParameter("method");//selectAllUser
                //获取类
                Class clazz = this.getClass();//this代表UserServlet

           //通过前端传入功能名的获取类中的方法 Method method = clazz.getMethod(methodStr,HttpServletRequest.class,HttpServletResponse.class); //调用方法 String res = (String) method.invoke(this, request,response); //返回给前端 response.getWriter().print(res); } catch (Exception e) { e.printStackTrace(); } } //前端发送请求: /*请求名称: user * 请求参数: method:login key:username * * UserServlet接到 /user 的请求,由于UserServlet中没有dopost或doget方法去处理请求,所以将请求转移给父类BaseServlet * * BaseServlet接到请求后,利用反射机制调用UserServlet中的login方法 * */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
  • 相关阅读:
    Alpha冲刺总结
    软工实践个人总结
    9组Beta冲刺3/5
    9组Beta冲刺总结
    9组Alpha冲刺6/6
    9组Beta冲刺2/5
    9组Alpha冲刺5/6
    9组Beta冲刺1/5
    cocos2d: 使用TexturePacker , pvr.ccz, CCSpriteBatchNode, CCSpriteFrameCache
    cocos2d: 设置容器透明度及添加UIViewController
  • 原文地址:https://www.cnblogs.com/syqlwyx/p/14862275.html
Copyright © 2011-2022 走看看