河北省重大需求征集开发进度(一)

对之前布置得作业进行了重构,自己套用了一套后台管理界面的html

从中学得的感悟:

①html与jsp页面的操作不一样,简单来说在jsp可以直接的获取后台的session对象,为登录的用户提供姓名

然而在html页面是不可以直接沿用jsp里的方式,我得从js里调用ajax来访问后台的session数据,然后反还给前台的html来获取用户的姓名

main.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>后台布局</title>
  <link rel="stylesheet" href="layui/layui.css" >
  <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
var username;
    $(function(){
        $.ajax({
            url:"login_user",
            type:"post",
            dataType:"text",
            success:function(data){
                document.getElementsByTagName('b')[0].innerHTML=data;
                username=data;
                $("b").css("font-family","楷体");
            },
            error:function(data){
                alert("系统出错");
            }
        });
    });
    
    function updatepwd()
    {
        var password=prompt("请输入修改后的密码:");
        if(password!=""&&password!=null)
        {
            $.post(
                    "updatepsw",
                    {
                        name:username,
                        password:password
                    },
                    function(data)
                    {
                        if(data=="yes")
                            alert("修改成功!");
                        else
                            alert("修改失败!");
                    },
                    "text"
                );
        }
    }
    
    
</script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
  <div class="layui-header">
    <div class="layui-logo">后台布局</div>
    <!-- 头部区域(可配合layui已有的水平导航) -->
    <ul class="layui-nav layui-layout-left">
      <li class="layui-nav-item"><a href="">控制台</a></li>
      <li class="layui-nav-item"><a href="">商品管理</a></li>
      <li class="layui-nav-item"><a href="">用户</a></li>
      <li class="layui-nav-item">
        <a href="javascript:;">其它系统</a>
        <dl class="layui-nav-child">
          <dd><a href="">邮件管理</a></dd>
          <dd><a href="">消息管理</a></dd>
          <dd><a href="">授权管理</a></dd>
        </dl>
      </li>
    </ul>
    <ul class="layui-nav layui-layout-right">
      <li class="layui-nav-item">
        <a href="javascript:;">
          <img src="http://t.cn/RCzsdCq" class="layui-nav-img">
             <b></b>
        </a>
        <dl class="layui-nav-child">
          <dd><a href="">基本资料</a></dd>
          <dd><a href="">安全设置</a></dd>
        </dl>
      </li>
      <li class="layui-nav-item"><a href="login.jsp">退出</a></li>
    </ul>
  </div>
  
  <div class="layui-side layui-bg-black">
    <div class="layui-side-scroll">
      <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
      <ul class="layui-nav layui-nav-tree"  lay-filter="test">
        <li class="layui-nav-item ">
          <a class="" href="#">需求汇总</a>
          <dl class="layui-nav-child">
            <dd><a href="collect.jsp" target="frame">需求征集</a></dd>
            <dd><a href="getallxuqiu" target="frame">浏览需求</a></dd>
            <dd><a href="checkxq" target="frame">需求审核</a></dd>
          </dl>
        </li>
        <li class="layui-nav-item"><a href="register.jsp" target="frame">用户注册</a></li>
        <li class="layui-nav-item"><a href="#" onclick="updatepwd()">修改密码</a></li>
      </ul>
    </div>
  </div>
  <div class="layui-body">
    <!-- 内容主体区域 -->
    <div style="padding: 0px" >
    <iframe id="righFrame" name="frame"  width="100%" height="800px" scrolling="no"  style="border:1px solid #CCC;"></iframe>
    </div>
  </div>
</div>
<script src="layui/layui.all.js"></script>
<script>
//JavaScript代码区域
layui.use('element', function(){
  var element = layui.element;
  
});
</script>
</body>
</html>
      

login_user

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class login_user
 */
@WebServlet("/login_user")
public class login_user extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public login_user() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        String name=(String)request.getSession().getAttribute("name");
        System.out.println(name);
        out.write(name);
        out.flush();
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

②其次就是:一些必要的东西不用深度学习但要会用(例如:验证码的使用与获取)

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>
    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="js/jquery-1.11.3.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="js/bootstrap.js"></script>
<title>用户登录</title>
</head>
<body>
    <%
        Object message = request.getAttribute("message");
        if (message != null && !"".equals(message)) {
    %>
    <script type="text/javascript">
               alert("<%=request.getAttribute("message")%>");
    </script>
    <%
        }
    %>
<div align="center">
    <h1>用户登录</h1>
</div>
<div align="center">
<form class="form-horizontal" role="form" name="form1" action="login_do" method="post" onsubmit="return check(form1)">
  <div class="form-group">
    <label for="name" class="col-sm-5 control-label">用户名</label>
    <div class="col-sm-2">
      <input type="text" class="form-control" name="name" id="name" placeholder="请输入名字">
    </div>
  </div>
  <div class="form-group">
    <label for="password" class="col-sm-5 control-label">密码</label>
    <div class="col-sm-2">
      <input type="password" class="form-control" name="password" id="password" placeholder="请输入密码">
    </div>
  </div>
  <div class="form-group">
    <label for="cord" class="col-sm-5 control-label">验证码</label>
    <div class="col-sm-1">
      <input type="text" class="form-control" name="code" id="code" placeholder="">
    </div>
    <div class="col-sm-1">
    <img id="imageCode" src="CodeServlet" onclick="changeImage()">
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-8">
      <button type="submit" class="btn btn-success">登录</button>
      <button type="button" class="btn btn-warning" href="register.jsp">注册</button>
    </div>
  </div>
</form>
</div>
<script type="text/javascript">
function check(form)
{
    var name=form.name.value;
    var password=form.password.value;
    var code=form.code.value;
    if(name==""||password==""||code=="")
    {
        alert("请将信息补充完整!");
        return false;
    }
}

function changeImage()
{
    document.getElementById("imageCode").src="CodeServlet?"+new Date().getTime();
}
</script>
</body>
</html>

调用验证码的CodeServlet:

package servlet;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
 
import javax.imageio.ImageIO;
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("/CodeServlet")
public class CodeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    
    public CodeServlet() {
        super();
    }
 
    
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int width = 120;
        int height = 36;
 
        // 步骤一 绘制一张内存中图片
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 
        // 步骤二 图片绘制背景颜色 ---通过绘图对象
        Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
        // 绘制任何图形之前 都必须指定一个颜色
        graphics.setColor(getRandColor(200, 250));
        graphics.fillRect(0, 0, width, height);
 
        // 步骤三 绘制边框
        graphics.setColor(Color.WHITE);
        graphics.drawRect(0, 0, width - 1, height - 1);
 
        // 步骤四 四个随机数字
        Graphics2D graphics2d = (Graphics2D) graphics;
        // 设置输出字体
        graphics2d.setFont(new Font("宋体", Font.BOLD, 18));
 
        Random random = new Random();// 生成随机数
        // 取随机产生的认证码(4位数字)
        String word = "";
        for (int i = 0; i < 4; i++) {
            String rand = String.valueOf(random.nextInt(10));
            word += rand;
        }
        // 定义x坐标
        int x = 10;
        for (int i = 0; i < word.length(); i++) {
            // 随机颜色
            graphics2d
                    .setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
            // 旋转 -30 --- 30度
            int jiaodu = random.nextInt(60) - 30;
            // 换算弧度
            double theta = jiaodu * Math.PI / 180;
 
            // 获得字母数字
            char c = word.charAt(i);
 
            // 将c 输出到图片
            graphics2d.rotate(theta, x, 20);
            graphics2d.drawString(String.valueOf(c), x, 20);
            graphics2d.rotate(-theta, x, 20);
            x += 30;
        }
 
        // 将验证码内容保存session作用域
        request.getSession().setAttribute("checkcode_session", word);
 
        // 步骤五 绘制干扰线
        graphics.setColor(getRandColor(160, 200));
        int x1;
        int x2;
        int y1;
        int y2;
        for (int i = 0; i < 30; i++) {
            x1 = random.nextInt(width);
            x2 = random.nextInt(12);
            y1 = random.nextInt(height);
            y2 = random.nextInt(12);
            graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
        }
 
        // 将上面图片输出到浏览器 ImageIO
        graphics.dispose();// 释放资源
        ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
 
    private Color getRandColor(int fc, int bc) {
        // 取其随机颜色
        Random random = new Random();
        if (fc > 255) {
            fc = 255;
        }
        if (bc > 255) {
            bc = 255;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }
 
}

登陆时的验证码的验证servlet:login_do

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Bean.User;
import service.userservice;

/**
 * Servlet implementation class login_do
 */
@WebServlet("/login_do")
public class login_do extends HttpServlet {
    private static final long serialVersionUID = 1L;
       userservice service=new userservice();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public login_do() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        String name=request.getParameter("name");
        String password=request.getParameter("password");
        User bean=new User(name,password);
        String ncode=(String)request.getSession().getAttribute("checkcode_session");
        if(ncode.equals(request.getParameter("code")))
        {
            if(service.isPsw(bean))
            {
                User b=service.findbyname(name);
                request.getSession().setAttribute("name", name);
                response.sendRedirect("main.html");
            }else {
                request.setAttribute("message", "密码或用户名错误");
                request.getRequestDispatcher("login.jsp").forward(request, response);
            }
        }else 
        {
            request.setAttribute("message", "验证码错误");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

③搜索框的动态刷新:实现按名字模糊查询和时间范围内查询

通过标签库的<c:if>的使用实现根据状态的不同,更新不同的操作

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>
    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="js/jquery-1.11.3.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="js/bootstrap.js"></script>
<title>浏览需求</title>
</head>
<body style="background-color: #87CEFA">
<%
        Object message = request.getAttribute("message");
        if (message != null && !"".equals(message)) {
    %>
    <script type="text/javascript">
               alert("<%=request.getAttribute("message")%>");
    </script>
    <%
        }
    %>
    <div align="center">
        <h1>河北省重大需求征集清单</h1>
        <br>
        技术需求名称<input type="text" id="name" name="name">&nbsp;&nbsp;
        填报日期<input type="date" id="btime" name="btime">-<input type="date" id="etime" name="etime">
        <button type="button" class="btn btn-info" onclick="findxq()">查询</button>&nbsp;&nbsp;&nbsp;&nbsp;
        <button type="button" class="btn btn-info" onclick="getall()">显示全部</button>
        <br><br>
        <table class="table">
          <thead>
            <tr bgcolor="#1E90FF">
              <th>需求编号</th>
              <th>技术需求名称</th>
              <th>填报时间</th>
              <th>状态</th>
              <th>操作</th>
            </tr>
          </thead>
          <tbody>
          <c:forEach items="${xuqius}" var="item">
            <tr class="active">
              <td>${item.id}</td>
              <td>${item.name}</td>
              <td>${item.date}</td>
              <td>${item.state2}</td>
                  <c:if test="${item.state2 == '未审核' }">
                       <td>
                      <a href="lookself?id=${item.id }">查看</a>
                      <a href="updateself?id=${item.id }">修改</a>
                      <a href="getallxuqiu" onclick="del(this)" type="${item.name }">删除</a>
                    </td>
                </c:if>
                <c:if test="${item.state2 == '通过'||item.state2=='未通过' }">
                        <td>
                          <a href="lookcheck?id=${item.id }">查看审核</a>
                    </td>
                </c:if>
           </tr>
          </c:forEach>
          </tbody>
        </table>
    </div>
<script type="text/javascript">
var state="${item.state2}";
if(state!="")
    alert(state);
function del(data)
{
    var c = confirm("确定删除吗");
    //判断
    var name=data.type;
    if(c=="确定"){
    $.post(
            "delxq",
            {
                name:name
            },
            function(data)
            {
                if(data=="yes")
                    alert("删除成功!");
                else
                    alert("删除失败!");
            },
            "text"
        );
    }
}

function findxq()
{
    var name=document.getElementById("name").value;
    var btime=document.getElementById("btime").value;
    var etime=document.getElementById("etime").value;
    if(name==""&&(btime==""&&etime==""))
    {
        alert("名字或者时间区间至少写一个!");
        return ;
    }
    else
    {
        window.location.href = "findxuqiu?name="+name+"&btime="+btime+"&etime="+etime;
    }
}
function getall()
{
    window.location.href="getallxuqiu";
}

</script>
</body>
</html>

目前的实现:

后台的需求征集

需求的浏览与查询:

需求的审核:只会显示未审核的需求

当点击审核后:会比添加需求多出两个:一个是意见,另一个是选择是否通过,通过后就不会再审核界面再显示

 改进:把界面在完善,学会套用一些好看的模板,之后在加一些需求的分页浏览和个人用户的界面,以上为管理员的浏览界面

原文地址:https://www.cnblogs.com/xiaofengzai/p/12399116.html