• java:(json,ajax,path,Oracle的分页实例,Filter拦截器)


    1.json:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    
    
    <script type="text/javascript">
    
    
        // JSON: javascript object notation(js的对象诠释)
        // JSON也是一个对象,首先json对象需要被{}包裹,里面的内容键值对对应(key : value),键值对和键值对用逗号(,)隔开,最后一个键值对一定不能加逗号(,)
        var testJson = {
            name : "zhangsan",
            age : 31,
            sex : "male"
        }
        var testJson2 = '{"name" : "zhangsan", "age" : 31, "sex" : "female"}'; // json格式的字符串
    
        function testFunction() {
            var jsons = testJson;
            var jsons2 = testJson2;
            alert(jsons);
            alert(jsons2);
            alert(jsons.name);  //json也可以通过key来取value   Map转json json转Map
            
            
            //例1: 把json格式的字符串转换为json对象
            // 方法一:eval();
            /* eval("var test = "+testJson2);
            alert(test);
            alert(test.age); */
            // 方法二:parse();
            alert(JSON.parse(testJson2)); //如果使用JSON.parse()函数,就必须把单引号写在最外面'{"name" : "zhangsan", "age" : 31, "sex" : "female"}',因为parse()函数遵循json格式,json默认不支持单引号
            
            //例2:把json对象转换为json格式的字符串
            // JSON.stringify()函数可以把json对象转换为json格式的字符串
            alert(JSON.stringify(testJson2));
            
        }
    </script>
    
    
    </head>
    
    <body>
    
        <input type="button" value="触发" onclick="testFunction();" />
    
    
    </body>
    </html>

    2.ajax:  

      又称为局部刷新
      Asynchronous Javascript And XML(异步的js和xml文档)
      是一种新的交互式技术
      一般用处:分页,三级联动...

     

      login:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
    <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#uname").on("blur", function() {
                var username = $("#uname").val();
                if (username != null && username != "") {
                    // 获取到了用户输入的username的值
                    
                    // 以get的请求方式发送(我乐意!)
                    /* $.get("user.sxt", "type=checkUsername&username=" + username, function(data) {
                        // 服务器端返回的数据
                        // data是形式参数,接收的是服务器端(servlet)返回回来的数据
                    }); */
                    
                    
                    
                    // 以post的请求方式发送
                    /* $.post("user.sxt", "type=checkUsername2&username="+username, function(data){
                        
                    }); */
    
    
    
                    // 无论用post还是get
                    /**
                        $.post/get("请求的地址(url)", "需要传递的参数", function(data){
                            // 服务器端向客户端响应的数据(json)
                        });
                    */
                    
    
                    // 究极版本的ajax
                    // ajax的终极版本,同样遵循json的格式,key : value为一个整体,每个key和value用:隔开,每一个键值对之间用逗号隔开,最后一个键值对不能有逗号
                    /* $.ajax({
                        async : true, //(是否异步,默认为true)
                        data : {"type":"checkUsername", "username" : username}, // 客户端向服务器端发送的数据,类型为object
                        method : "get", // 请求方式(get/post)
                        //type和method是一样的,都是选择请求的方式,在jQuery1.9版本之前用type,之后用method
                        url : "user.sxt", // 客户端向服务器端发送数据的地址--->请求地址  
                        success : function(data) { // 当成功响应以后,接收到的数据-->服务器端向客户端响应的数据
                            alert(data);// data服务器端向客户端响应的数据
                        }
                    }); */
                    
                    
                    // function(data)只能接收字符串
                    /* $.get("user.sxt", "type=checkUsername&username=" + username, function(data) {
                        // 服务器端返回的数据
                        // data是形式参数,接收的是服务器端(servlet)返回回来的数据
                        alert(data);
                    }); */
                    
                    
                    
                    // function(data)只能接收json对象
                    $.getJSON("user.sxt", "type=checkUsername&username=" + username, function(data){
                        alert(data.username);
                    });
                    
                    
                }
            });
        });
    </script>
    
    </head>
    
    <body>
    
        用户名:
        <input type="text" name="username" id="uname" />
    
    
    </body>
    </html>

      

      UserServlet:

    package cn.zzsxt.lee.web.servlet;
    
    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.google.gson.Gson;
    
    import cn.zzsxt.lee.web.entity.User;
    
    @WebServlet("/user.sxt")
    public class UserServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            
            String method = request.getMethod().toLowerCase();
            System.out.println(method);
            String type = request.getParameter("type");
            if ("get".equals(method) && "checkUsername".equals(type)) {
                checkUsername(request, response);
            } else if("post".equals(method) && "checkUsername2".equals(type)) {
                checkUsername2(request, response);
            }
    
        }
    
        private void checkUsername2(HttpServletRequest request, HttpServletResponse response) {
            String username = request.getParameter("username");
            System.out.println("------------------------------"+username);
            // 从数据库中查询是否存在zhangsan这个用户名
        }
    
        private void checkUsername(HttpServletRequest request, HttpServletResponse response) throws IOException {
            
            String username = request.getParameter("username");
            System.out.println("------------------------------"+username);
            // 从数据库中查询是否存在zhangsan这个用户名
            User user = new User();
            user.setUsername(username);
            //response.getWriter().print(username+":天青色等烟雨,而我在等你");// 服务器向客户端响应的数据
            // 把user对象拆开,拼成一个json格式的字符串
            Gson gson = new Gson();
            String json = gson.toJson(user);
            response.getWriter().print(json);
            
            // response.getWriter().print(new Gson().toJson(user));
        }
    
    }

    3.path:

      UserServlet:

    package cn.zzsxt.lee.web.servlet;
    
    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;
    
    @WebServlet("/user.sxt")
    public class UserServlet extends HttpServlet {
        /**
         * 所有的servlet,凡是以/开头的路径,都定位到项目的根目录localhost:8080/项目名
         */
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            System.out.println("我是来处理用户请求的servlet,我被访问了");
            // 开始处理请求
            // 请求处理完毕,需要重定向
            response.sendRedirect(request.getContextPath()+"/b/bb/bb3.jsp");
        }
    
    }

      Index:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'index.jsp' starting page</title>
    
    </head>
    
    <body>
    
    
        <a href="a/a.jsp">跳转a</a>
        <a href="a/aa/aa.jsp">跳转aa</a>
    
        <pre>
            web工程的WebRoot文件夹:称之为项目的根目录
            http://localhost:8080/zzsxt--->项目的根目录
            Java代码中src资源文件夹也称之为项目的根目录
            ../向上跳出一层
            
            相对路径:怕文件名发生改变
                以当前页面作为中心,向目标路径进行跳转
                
                
            绝对定位:怕项目名发生改变
                直接会定位到服务器的根目录
                    localhost:8080就称之为服务器根目录
                每一次跳转都以服务器的根目录作为了中心:localhost:8080
                如果部署名发生了改变,就以服务器(tomcat)的webapps文件夹下的项目名为准
                
            以后在实际开发中,所有的路径跳转都需要使用绝对定位
           

       而且servelt跳转jsp页面的时候 如果是重定向:response.sendRedirect(request.getContextPath+"/index.jsp");就以这个路径跳转 如果是请求转发的情况下:request.getRequestDispatcher("/index.jsp").forward(request, response);就以这个路径开始跳转
    </pre> </body> </html>

    4.Oracle分页实例:

      Servlet:

      

    private void selectAllAdmin(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 首先要定义每页显示的条数
            int pageSize = 2;
            // 获取从页面传输过来页码数  pageCount-->当前页面的页码数
            String pageCount = request.getParameter("pageCount");
            // 如果接收不到pageCount,页面并没有传过来-->这是第一页
            if (pageCount == null) {
                // 如果pageCount == null 证明是第一页
                pageCount = 1 + "";
            } 
            // 当前页码数??????
            // 总条数/每页的条数-->总页数
            int totalCount = adminService.selectAminCounts();
            if (totalCount > 0) {
                // 数据库是有数据的,如果没有数据就返回的是0
                int totalPage = (int) Math.ceil((totalCount/(double)pageSize));
                request.setAttribute("totalPage", totalPage);
            }
            
            // 从数据库中进行查询
            List<AdminVo> adminList = adminService.selectAllAdmins(pageCount, pageSize);
            // 如果数据库中没有查询出任何数据,adminList的长度为0,做一个专门来处理页面
            if (adminList.size() > 0) {
                request.setAttribute("pageCount", pageCount);
                // 从数据库中查询出了数据
                request.setAttribute("adminList", adminList);
                request.getRequestDispatcher("/admin/query_all_admins.jsp").forward(request, response);
                return;
            } else {
                // 未查询出
            }
    
        }

      impl:

        @Override
        public List<AdminVo> selectAllAdmins(String pageCount, int pageSize) {
            /**
             * -- 因为这个功能只有超级管理员能看到,而且查询的时候已经把超级管理员给排除了 --
             * 我登录的这个用户一定是超级管理员才能调用这个sql-->从session获取当前登录的用户权限等级
             */
            String sql = "select * from (" + "select admin1.*, rownum as rn from ("
                    + "select ra.*, rs.role_level, rs.role_name from sys_admin ra inner join sys_role rs on rs.id = ra.role_id) admin1 "
                    + "where rownum <=?) admin2  " + "where admin2.rn >=? and is_delete != 1 and role_level < 3";
            // 需要传值得两个问号关系:3n 5n 8n ; 3n-2 5n-4 8n-7-->pageSize*pageCount
            // pageSize*pageCount-(pageSize-1)
            int pageCounts = Integer.parseInt(pageCount);
            String[] params = { (pageCounts * pageSize) + "", (pageCounts * pageSize - (pageSize - 1)) + "" };
            ResultSet rs = super.execQuery(sql, params);
            List<AdminVo> adminList = new ArrayList<AdminVo>();
            try {
                while (rs.next()) {
                    AdminVo am = new AdminVo();
                    am.setId(rs.getString("id"));
                    am.setAdminName(rs.getString("admin_name"));
                    am.setAdminPassword(rs.getString("admin_password"));
                    am.setAdminRealPassword(rs.getString("admin_real_password"));
                    am.setRoleId(rs.getString("role_id"));
                    am.setRoleLevel(rs.getInt("role_level"));
                    am.setRoleName(rs.getString("role_name"));
                    am.setIsDelete(rs.getInt("is_delete"));
                    adminList.add(am);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return adminList;
        }

      jsp:

            <table class="table table-hover text-center">
    
                <tr>
                    <th width="15%" style="text-align:left; padding-left:20px;">管理员ID</th>
                    <th width="20%">管理员用户名</th>
                    <th width="20%">管理员密码</th>
                    <th width="30%">管理员权限</th>
                    <th width="310">操作</th>
                </tr>
                <volist name="list" id="vo"> <c:forEach
                    items="${adminList }" var="admin">
                    <c:if test="${admin.isDelete == 0 }">
                        <tr>
                            <td style="text-align:left; padding-left:20px;">${admin.id }</td>
                            <td>${admin.adminName }</td>
                            <td>${admin.adminRealPassword }</td>
                            <td width="10%">${admin.roleName }</td>
                            <td><div class="button-group">
                                    <a class="button border-main"
                                        href="admin.sxt?flag=selectAdminById&adminId=${admin.id }"><span
                                        class="icon-edit"></span> 修改</a> <a class="button border-red"
                                        href="javascript:void(0)" onclick="del('${admin.id}')"><span
                                        class="icon-trash-o"></span> 删除</a>
                                </div></td>
                        </tr>
                    </c:if>
                </c:forEach>
    
                <tr>
                    <td colspan="8"><div class="pagelist">
                            <!-- 上一页:当前页码数-1
                          下一页:当前页码数+1
                          尾页:总条数除以每页显示的条数,并且向上取整
                     -->
                            <c:if test="${pageCount != 1 }">
                                <a href="admin.sxt?flag=selectAllAdmin&pageCount=1">首页</a>
                            </c:if>
                            <c:if test="${pageCount > 1 }">
                                <a href="admin.sxt?flag=selectAllAdmin&pageCount=${pageCount-1 }">上一页</a>
                            </c:if>
                            <c:forEach begin="1" end="${totalPage }" var="page">
                                <!-- 
                            
                                首先:
                                    获取a标签的值,如果page等于当前页面pageCount
                                然后:
                                    就把这个a标签变成span标签,并且添加class="current"
                             -->
                                 <c:if test="${page == pageCount }">
                                     <span class="current">${page }</span>        //给点击的页数加一个效果,点击哪一页,哪一页背景显示为绿色
                                 </c:if><!-- pageCount = 1 page=1-->
                                 <c:if test="${page != pageCount }">
                                    <a href="admin.sxt?flag=selectAllAdmin&pageCount=${page }">${page }</a>
                                </c:if>
                            </c:forEach>
                            <c:if test="${totalPage > pageCount }">
                                <a href="admin.sxt?flag=selectAllAdmin&pageCount=${pageCount+1 }">下一页</a>
                            </c:if>
                            <c:if test="${totalPage != pageCount }">
                                <a href="admin.sxt?flag=selectAllAdmin&pageCount=${totalPage }">尾页</a>
                            </c:if>
                        </div></td>
                </tr>
            </table>

    5.Filter拦截器:

    package cn.zzsxt.lee.project.filter;
    
    import java.io.IOException;
    import java.util.Calendar;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.zzsxt.lee.project.adminuser.entity.AdminUser;
    
    /**
     * @description 登录控制器
     * @author Seven Lee
     * @date 2017年6月16日上午9:09:14
     *
     */
    @WebFilter(filterName = "loginFilter", urlPatterns = "/*")
    public class LoginFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest servletRequsRequest, ServletResponse servletResponse, FilterChain chain)
                throws IOException, ServletException {
            System.out.println("我是控制登录请求的filter,我被访问过!");
            HttpServletRequest request = (HttpServletRequest) servletRequsRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            // 获取当前用户是否存有session
            AdminUser adminUser = (AdminUser) request.getSession().getAttribute("user");
            // 获取当前访问的资源路径
            String contextPath = request.getContextPath();// 项目根路径
            String uri = request.getRequestURI();// 当前用户访问的路径
            // 获取请求方式
            String method = request.getMethod().toLowerCase();
            // 获取请求的隐藏域参数
            String type = request.getParameter("type");
            int hours = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);// 获取的是服务器上的小时数
            // 获取IP地址
            String remote = request.getRemoteAddr();
            String local = request.getLocalAddr();
            if (adminUser != null) {
                // 如果有session不进行拦截
                chain.doFilter(servletRequsRequest, servletResponse);
            } else if (uri.equals(contextPath + "/") || uri.equals(contextPath + "/login.jsp")) {
                chain.doFilter(servletRequsRequest, servletResponse);
            } else if (uri.endsWith(".css") || uri.endsWith(".js") || uri.contains("/images/")) {
                chain.doFilter(servletRequsRequest, servletResponse);
            } else if (hours < 9 || hours > 18) {
                filterMsg(request, response, "请在上班时间访问此系统,感谢您的配合!9:00-18:00");
            } else if (!("127.0.0.1".equals(remote) || ":::::1".equals(remote) || local.equals(remote))) {
                filterMsg(request, response, "内部系统目前暂时不支持游客访问,请见谅");
            } else if (uri.equals(contextPath + "/adminUser") && "post".equals(method) && "login".equals(type)) {
                // 登录操作不拦截
                chain.doFilter(servletRequsRequest, servletResponse);
            }
        }
    
        private void filterMsg(HttpServletRequest request, HttpServletResponse response, String msg) {
            request.getSession().setAttribute("msg", msg);
            try {
                response.getWriter().print("<script type='text/javascript'>");
                response.getWriter().print("window.location.href='" + request.getContextPath() + "/login.jsp'");
                response.getWriter().print("</script>");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    
        @Override
        public void destroy() {
        }
    
    }

      

  • 相关阅读:
    Flutter Platform Channels
    catch socket error
    global position
    aria2 添加任务后一直在等待,不进行下载是什么情况?
    通知
    rename file
    长按弹菜单
    Linux命令行下如何终止当前程序?
    IOWebSocketChannel.connect handle errors
    writeAsBytes writeAsString
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7260882.html
Copyright © 2020-2023  润新知