zoukankan      html  css  js  c++  java
  • java:(设置编码集,密码的加密,JSTL,EL表达式,权限设置)

    1.设置编码集:

    package cn.zzsxt.lee.web.sevlet;
    
    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("/encoding.sxt")
    public class EncodingServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 客户端向服务器端请求的信息,设置编码集
            request.setCharacterEncoding("UTF-8");
    
            String username = request.getParameter("username");
            String realname = request.getParameter("realname");
    
            // System.out.println(username + "---------------" + new
            // String(realname.getBytes("ISO8859-1"), "UTF-8"));
            System.out.println(username + "---------------" + realname);
    
            // 服务器向客户端响应数据
            response.setCharacterEncoding("utf-8");//已经进行了一次编码
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().print("<h1>我是响应信息</h1>");// 把服务器响应的内容显示在页面上
    
        }
    
    }
    <%@ 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>
    
    
        <form action="encoding.sxt" method="get">
            <input type="text" name="username" />
            <input type="text" name="realname" />
            <input type="submit" value="提交" />
    
        </form>
    
        <pre>
            客户端向服务器端发送请求
                post:
                    request.setCharacterEncoding("UTF-8");
                get:
                    request.setCharacterEncoding("UTF-8");
                    在tomcat中,conf文件夹的server.xml中配置
                    useBodyEncodingForURI="true"
                     <Connector port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000" redirectPort="8443"
             !!   useBodyEncodingForURI="true" />默认支持中文编码
                    http://localhost:8080/zzsxt/encoding.sxt?username=zhangsan&realname=%E5%95%8A%E5%95%8A%E5%95%8A
                
            服务器端向客户端响应数据:
                response.setCharacterEncoding("utf-8");
                response.setContentType("text/html;charset=utf-8");
        
        </pre>
    
    
    </body>
    </html>

    2.密码的加密:

      工具类中,MD5加密方法:

    package cn.zzsxt.lee.web.utils;
    
    import java.security.MessageDigest;
    
    public class MD5 {
    
        public static String getMD5(String message) {
            String md5str = "";
            try {
                // 1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
                MessageDigest md = MessageDigest.getInstance("MD5");
    
                // 2 将消息变成byte数组
                byte[] input = message.getBytes();
    
                // 3 计算后获得字节数组,这就是那128位了
                byte[] buff = md.digest(input);
    
                // 4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
                md5str = bytesToHex(buff);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return md5str;
        }
    
        /**
         * 二进制转十六进制
         * 
         * @param bytes
         * @return
         */
        public static String bytesToHex(byte[] bytes) {
            StringBuffer md5str = new StringBuffer();
            // 把数组每一字节换成16进制连成md5字符串
            int digital;
            for (int i = 0; i < bytes.length; i++) {
                digital = bytes[i];
    
                if (digital < 0) {
                    digital += 256;
                }
                if (digital < 16) {
                    md5str.append("0");
                }
                md5str.append(Integer.toHexString(digital));
            }
            return md5str.toString().toUpperCase();
        }
    
    }

      处理加密的servlet:

    package cn.zzsxt.lee.web.servlet;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.util.UUID;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.zzsxt.lee.web.utils.MD5;
    
    public class PasswordServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) {
    
            System.out.println("我是处理加密的servlet,我被访问过!");
            String username = request.getParameter("username");
            String password = request.getParameter("pwd");
            password = MD5.getMD5(password);// 经过加密
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
                String sql = "insert into e_user (id, username, password) values(?,?,?)";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1, UUID.randomUUID().toString());
                ps.setString(2, username);
                ps.setString(3, password);
                int result = ps.executeUpdate();
                System.out.println(result);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }

      反编译登录的servlet:

    package cn.zzsxt.lee.web.servlet;
    
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    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 cn.zzsxt.lee.web.utils.MD5;
    
    @WebServlet("/login.sxt")
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            String username = request.getParameter("username");
            String password = request.getParameter("pwd");
            password = MD5.getMD5(password);//反编译
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "scott");
                String sql = "select * from e_user where username=? and password=?";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1, username);
                ps.setString(2, password);
                ResultSet rs = ps.executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString("id"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }

    3.EL表达式:

      EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

    <%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'param.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
        <%
            User user = new User("123", "zhangsan", "123456", new Address("河南省郑州市"));
            request.setAttribute("user", user);
        %>
    
        ${param.name }--->${paramValues.fav }--->${paramValues.fav[0] }
        <br />
        <hr />
        <!-- el表达式获取实体类型值是时候,一定要和声明变量对应(一个字母都不能错) -->
        ${user.id }
        <!-- EL表达式的原理,同样是通过get方法进行获取值,使用的是反射 -->
        ${user.username } ${user.address.addr }
    
        <!-- EL表达式可以操作运算符(+,-,*,/,==,>,<,>=,<=) -->
        ${user.id == "123" } ${3+"3" }
        <!-- 如果一个数字加上字符串类型的数字,把字符串类型的数字先转换为数字,再进行运算 -->
        ${"3"+"3" }
        ${user.id eq 1 }
        ${user.id gt 12345 }
    </body>
    </html>
    <%@ 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>
    
    
        <%
            // 作用域
            // 如果有重名的key值,EL表达式会从小往大取,一旦在小的作用域(scope)中找到了,就不会继续向下寻找
            request.setAttribute("zzsxt", "www.zzsxt.cn");
            session.setAttribute("zzsxt", "www.bjsxt.com");
        %>
        
        0${student.name }0
        
        获取到的值为:
            ${sessionScope.zzsxt }
            
        页面跳转的时候参数的传递:(一定不能使用)
        <a href="param.jsp?name=zhangsan&fav=1&fav=2">页面跳转</a>
            
        
        <pre>
              EL表达式语言:
                  在html页面上不出现Java代码
                  作用于:Java程序向页面进行值传递和显示
                  $ {   } <---一切向钱看,通过设置key来取value
                  
              request,session,pageContext,Application
                  get,set,remove+Attribute();
          
          </pre>
    
    
    </body>
    </html>
    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 cn.zzsxt.lee.web.entity.Students;
    
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            String username = request.getParameter("username");
            String pwd = request.getParameter("pwd");
            Students student = new Students();
            student.setName(username);
            request.setAttribute("student", student);
            request.getRequestDispatcher("index.jsp").forward(request, response);
            return;
        }
    
    }

     4.jstl:

      JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <%
      
          request.setAttribute("zzsxt", "www.zzsxt.cn");
          session.setAttribute("zzsxt", "www.bjsxt.com");
          int[] x = {1,2,3,4,5,6,7,8,9,10,11,12,13};
          request.setAttribute("number", x);
          List<String> arr = new ArrayList<String>();
          arr.add("str1");
          arr.add("str2");
          arr.add("str3");
          arr.add("str4");
          arr.add("str5");
          arr.add("str6");
          arr.add("str7");
          arr.add("str8");
          request.setAttribute("arr", arr);
          String str = "1,2,3,4,5,6,7";
          request.setAttribute("str", str);
      %>
      
      
      <body>
      
          <pre>
              jstl:
                  jsp standrad标准 tag标签 library库
                  c.tld:
                      tld:tag lib description
                  官方自带的标签库:
                      core:(核心)最常用
                          使用jstl(core):在jsp页面开始使用< % @   taglib  % > 配置uri="http://java.sun.com/jsp/jstl/core" 然后配置prefix(前缀)=""
                          < c : xxx >
                      format:(格式化)
                      xml:(xml)
                      sql:(sql)
                      function:(函数)
                      
                  自定义(是shiro(权限框架)+spring框架)标签库(理解):
                      简单权限
          </pre>
          
          <c:remove var="zzsxt" scope="request" />
          <c:out value="${zzsxt }" default="暂无数据"></c:out>
          <hr />
          
          <!-- ***************** -->
          <c:forEach begin="0" end="7" step="1" items="${arr }" var="each" varStatus="vars" >
          <!-- vars.index:每个元素的下标 vars.count:每一个元素第几个被打印  vars.first:是否第一个被打印 vars.last:是否最后一个被打印-->
              ${each }--->${vars.index }--->${vars.count }---->${vars.first }--->${vars.last }<br />
          </c:forEach>
          
          <!-- 在jstl中,并没有else -->
          <c:if test="${1 eq 2 }">
              我是一个老师
          </c:if>
          
          <c:choose>
              <c:when test="${1 eq 2 }">
                  我是一个老师1
              </c:when>
              <c:when test="${1 eq 1 }">
                  我是一个老师2
              </c:when>
              <c:when test="${1 eq 3 }">
                  我是一个老师3
              </c:when>
              <c:when test="${1 eq 4 }">
                  我是一个老师4
              </c:when>
              <c:when test="${2 eq 2 }">
                  我是一个老师5
              </c:when>
              <c:otherwise>
                  我是一个胖老师
              </c:otherwise>
          </c:choose>
          <!-- 在Java中重定向不能传递参数,但是在jstl中,重定向可以传递参数 -->
          <%-- <c:redirect url="redirect.jsp">
              <c:param name="name" value="zhangsan"></c:param>
          </c:redirect> --%>
      <%--     <jsp:forward page="redirect.jsp">
              <jsp:param value="zhangsan" name="name"/>
          </jsp:forward> --%>
          
          <%-- <c:import url="http://www.bjsxt.com"></c:import> --%>
          
          <hr />
          <c:forTokens items="${str }" delims="," var="each"> // delims以","分割
              ${each }
          </c:forTokens>
          
          <!-- 
              
              必须会:
              foreach
              if
              choose
              remove
          
          
           -->
      
      
      
      </body>
    </html>
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'jstl.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
        <%
            request.setAttribute("date", new Date());
        %>
    
        <!-- format库通常情况下是用来进行类型转换的 -->
        <%-- <fmt:formatDate value="${date }" pattern="yyyy年MM月dd日hh时mm分ss秒" /> --%>
        
        ${fn:length("zhangsan") }<!-- 如果使用functions类库的时候,一定要和el表达式连用,否则无法使用 -->
    
    
    </body>
    </html>
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'redirect.jsp' starting page</title>
    
    
    </head>
    
    <body>
        <c:import url="http://www.baidu.com" charEncoding="utf-8"></c:import>
        <c:import url="http://www.qq.com" charEncoding="utf-8"></c:import>
        <c:import url="http://www.163.com" charEncoding="utf-8"></c:import>
    </body>
    </html>

    5.权限设置:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.bjsxt.com/role/lee" prefix="rl"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'index.jsp' starting page</title>
    </head>
    
    <body>
    
        <%
            request.getSession().setAttribute("role", (int) (Math.random() * 10));
        %>
        <h1>您的权限为:${role }</h1>
        <rl:role min="1">
            <input type="button" value="增加" />
            <br />
        </rl:role>
        <rl:role min="3">
            <input type="button" value="修改" />
            <br />
        </rl:role>
        <rl:role min="5">
            <input type="button" value="删除" />
            <br />
        </rl:role>
        <rl:role min="7">
            <input type="button" value="查询" />
            <br />
        </rl:role>
    
        <pre>
            1.首先要在WEB-INF创建一个tld文件(标签库描述文件)
            2.借鉴官方自带的标准标签库(core.tld)来编写自己的标签
            3.创建一个class,并且继承TagSupport,并且重写两个方法:int doStartTag(),int doEndTag();
            4.在创建TagRole中定义一个属性,这个属性必须要和<name>min</name>完全一致
            </description>
                <name>min</name>
                <required>true</required>
            <!-- 必须填写的属性 -->
                <rtexprvalue>true</rtexprvalue>
            <!-- 默认为true -->
                <type>int</type>
            <!-- 返回值的类型 -->
            </attribute>
        </pre>
    </body>
    </html>

      role.tld文件

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">
    
        <description>权限判定标准标签库</description>
        <display-name>tag role</display-name>
        <tlib-version>1.0</tlib-version>
        <short-name>rl</short-name>
        <uri>http://www.bjsxt.com/role/lee</uri><!-- 首先你要以自己公司的域名为准,所有的标签库的URI不允许重名 -->
    
        <!-- 开始定义标签 -->
        <tag>
        <description>
            通过标签可以实现菜单的权限管理,使权限控制在按钮层
        </description>
            <name>role</name><!-- 标签的名字 -->
            <tag-class>cn.zzsxt.lee.web.role.TagRole</tag-class><!-- 定义的class -->
            <body-content>JSP</body-content><!-- 作用的内容:jsp页面 -->
            
            <attribute><!-- 定义标签中属性 -->
            <description>
                    最小权限判定
            </description>
                <name>min</name>
                <required>true</required><!-- 必须填写的属性 -->
                <rtexprvalue>true</rtexprvalue><!-- 默认为true -->
                <type>int</type><!-- 返回值的类型 -->
            </attribute>
            
        </tag>
    
    
    </taglib>
    package cn.zzsxt.lee.web.role;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.TagSupport;
    
    public class TagRole extends TagSupport {
    
        private int min;
    
        public int getMin() {
            return min;
        }
    
        public void setMin(int min) {
            this.min = min;
        }
    
        @Override
        public int doStartTag() throws JspException {
            // startTag在权限开始的时候调用的方法
            System.out.println("我是startTag方法,我被调用了");
            // 获取到session值
            int role = (Integer) this.pageContext.getSession().getAttribute("role");
            // role = 6
            if (min < role) {
                // min代表最小的权限,role代表当前权限,能看到button
                System.out.println(SKIP_PAGE);
                return EVAL_BODY_INCLUDE;// EVAL_BODY_INCLUDE:显示标签之内的内容<rl:role min="1">这里的内容</rl:role>
            }
            return SKIP_BODY;//SKIP_BODY:隐藏标签之内的内容
        }
    
        @Override
        public int doEndTag() throws JspException {
            // EndTag在权限结束的时候调用的方法
            System.out.println("我是end方法,我被调用了");
            return EVAL_PAGE;// SKIP_PAGE权限标签的代码后就不再显示任何页面;EVAL_PAGE权限标签后全部显示
        }
    }

     

  • 相关阅读:
    迭代器相关整理
    闭包的功能举例
    函数参数相关整理
    python中进制转换及IP地址转换
    dD Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    2D and 3D Linear Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    Monotone and Sorted Matrix Search ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    Algebraic Kernel ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    数论中的环概念
    QT的配置及目录结构
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7241735.html
Copyright © 2011-2022 走看看