servlet实现车险管理系统

来源:互联网 发布:星星知我心原唱是谁 编辑:程序博客网 时间:2024/06/02 11:24

很高兴又一篇文章带给大家,今日带领大家怎么用servlet实现后台管理系统。如果想学习servlet相关知识请见文章超详细servlet+jdbc+html+css实现后台管理登陆。今日带领大家学习的知识点包括如下几个方面。当然仅限学习,希望能给各位在学者带来帮助。实际项目目前大多使用ssh框架集成。关于ssh文章后续会出。首先看到本文的效果图。完整项目上传到github了,请点击此处阅读完整项目代码。



  • 如何建立数据关联表,包括增删改查(本文用的是mysql数据库)
  • 如何使用过滤器infiter。
  • 分页实现
  • MVC思想架构

项目需求分析:用户到汽修公司缴纳资金入保,工作人员使用该后台管理系统为其入保。公司可以为用户注册账户,充值,返现操作。返现流程为比如入保需要缴纳现金5000,返现2500元,分12个月返还到用户账户。账户的资金可以用来在店修车,也可以用来第二年入保。


上述过程就是该项目的大致流程。在熟悉了项目的结构之后,我们首先要做的就是编写项目的开发文档。其次是整理数据库结构逻辑,建立数据库关联表。

在本项目中,凡是跟用户帐号打交道的都需要建立与其关联。比如用户余额表,登录信息表,返现余额表。接下来我们看到sql语句如何建立关联表。


create table if not exists `user`(`id` int unsigned auto_increment PRIMARY KEY,`usr_name` varchar(100) NOT NULL,`usr_email` varchar(50) NOT NULL,`usr_phone` varchar(50) NOT NULL,`usr_IDcard` varchar(50) NOT NULL,`usr_carID` varchar(50) NOT NULL,  `login_info_id` int unsigned,`id_cash_left` int unsigned,`id_cash_back` int unsigned,FOREIGN KEY(login_info_id) REFERENCES logininfo(login_info_id) ON DELETE CASCADE,FOREIGN KEY(id_cash_left) REFERENCES user_cash_left(id_cash_left) ON DELETE CASCADE,FOREIGN KEY(id_cash_back) REFERENCES cashback(id_cash_back) ON DELETE CASCADE)ENGINE=InnoDB DEFAULT CHARSET=utf8;//登录信息表create table if not exists `logininfo`(`login_info_id` int unsigned auto_increment PRIMARY KEY,`usr_account` varchar(20) NOT NULL,`usr_pwd` varchar(20) NOT NULL,`flag` int NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;//用户余额表create table if not exists `user_cash_left`(`id_cash_left` int unsigned auto_increment PRIMARY KEY,`usr_cash` int NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;//投保返现信息记录表create table if not exists `insure_record`(id_insure int unsigned auto_increment PRIMARY KEY,`insure_account` varchar(20) NOT NULL,`data_insure` datetime NOT NULL,`ret_count` int NOT NULL,`insure_name` varchar(20) NOT NULL,`insure_IDcard` varchar(50) NOT NULL,`insure_carID`varchar(20) NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;//修车信息记录表create table if not exists `car_fix_record`(`id_fix` int unsigned auto_increment PRIMARY KEY,`fix_account` varchar(20) NOT NULL,`data_fix_car` datetime NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;//操作记录日志表CREATE TABLE if not exists `operation_record`(operate_id int unsigned AUTO_INCREMENT PRIMARY KEY,    operation_account varchar(20) not null,    identity_id varchar(20) not null,    operate_type varchar(20),    operate_date datetime)ENGINE=InnoDB DEFAULT CHARSET=utf8;//返现余额表CREATE TABLE if not exists `cashback`(id_cash_back int unsigned AUTO_INCREMENT PRIMARY KEY,cashback double);

如上代码中,我们可以看到user用户表与三个表相关联。只需要把所关联的表的主键作为外键约束,与几个表相关联就写几个。

关于过滤器的用法。首先我们在infiter包下建立过滤器,比如session过滤器,ip过滤器,编码过滤器等。只需要继承Filter类即可。

在此处给大家看下session过滤器的用法。

package com.safeCar.filter;import java.io.IOException;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;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.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.safeCar.Bean.LoginInfo;import com.safeCar.tools.DBUtils;public class SessionFilter implements Filter{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest) arg0;HttpServletResponse response = (HttpServletResponse) arg1;HttpSession session = request.getSession();// 获得url eg:RoleServlet?op=torolelistString url = request.getServletPath();System.out.println(url);// 判断:排除筛选首页和提交登陆页if (!url.contains("/login.jsp") && !url.contains("/register.jsp") && !url.contains("LR.action")&& !url.contains("/index.jsp") && !url.contains("/about.jsp") && !url.contains("/services.jsp")&& !url.contains("/contact.jsp")) {// session不存在if (session.getAttribute("userinfo") == null) {response.sendRedirect(request.getContextPath() + "/index.jsp");return;} else {// session存在判断是否是管理员,连接数据库String sql = "select flag from logininfo where usr_account = ?";try {// 先获取session中存在获取用户名PreparedStatement pst = DBUtils.getConnection().prepareStatement(sql);LoginInfo o = (LoginInfo) session.getAttribute("userinfo");String account  = o.getUsr_account();pst.setString(1, account);ResultSet set = pst.executeQuery();int flag = 0;while(set.next()){ flag =set.getInt(1);}if(flag==1){//是个管理员,啥事不用干留着在个界面}else if(flag==0){//重定向到首页,你不是管理员来管理界面下转悠啥response.sendRedirect("index.jsp");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}arg2.doFilter(request, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}

在编写了过滤器代码之后,需要在web.xml之后进行配置。配置的标准写法如下:

    <filter>  <filter-name>sessionFilter</filter-name>  <filter-class>com.safeCar.filter.SessionFilter</filter-class>  </filter>  <filter-mapping>  <filter-name>sessionFilter</filter-name>  <url-pattern>*.jsp</url-pattern>  </filter-mapping>  <filter-mapping>  <filter-name>sessionFilter</filter-name>  <url-pattern>*.action</url-pattern>  </filter-mapping>

关于MVC架构思想,给大家看下项目的结构图。具体请看github上的完整项目。由impl包来实现各个包的接口,目的方便分工合作。开发人员只需要接口,就可以合作开发。





最后给大家说说分页展示,这个我用到的是layui框架,layui官网。在这里讲下如何使用layui实现分页效果。首先需要留个区块来动态展示我们查询的结果,展示的是表格形式。下面这段代码会教你快速学会使用layui分页控件。

首先我们在table标签下添加一个div块,并为其提供id。

接下来在tbody标签内容留空,同样为其添加一个id即可。

<!-- 此处填写tab里面的内容 --><div class="tab_content_01"><table class="layui-table"><colgroup><col width="150"><col width="150"><col width="200"><col width="200"><col width="200"></colgroup><thead><tr><th>用户名</th><th>姓名</th><th>邮箱</th><th>手机号</th><th>身份证</th><th>车牌号</th></tr></thead><tbody id="biuuu_city_list"></tbody></table><div id="page_query" style="text-align: center;"></div></div>

然后是对应的是动态分页的js代码如下:点击搜索按钮后,提交ajax请求,请求成功后将服务器返回的分页数据全部分页。我们可以看到下面的代码将每行的数据构造出来,再通过for循环构造出每页的数据。

<script>$('.logout').click(function(){$.ajax({type:'POST',url:'LR.action',data:"action=Logout"});});$('#search').click(function(){var name = $('.layui-input').val();if(name==''){alert('提示:搜索内容不能为空!!!');return;}var data ;$.ajax({type:'POST',url:'adm.action',data:"action=AdminQuery&usr_name="+name,success:function(res){    data =  eval("("+res+")");    data = data.usr_info;    var nums = 5; //每页出现的数量var pages = Math.ceil(data.length/nums); //得到总页数var thisDate = function(curr){    var str = '', last = curr*nums - 1;    last = last >= data.length ? (data.length-1) : last;    for(var i = (curr*nums - nums); i <= last; i++){        str += '<tr>'+'<td>'+data[i].usr_account+'</td>'+'<td>'+data[i].usr_name+'</td>'+'<td>'+data[i].usr_email+'</td>'+'<td>'+data[i].usr_phone+'</td>'+'<td>'+data[i].usr_IDcard+'</td>'+'<td>'+data[i].usr_carID+'</td>'+'</tr>';    }    return str;};//调用分页laypage({    cont: 'page_query',    pages: pages,    skin: '#009688',    jump: function(obj){        document.getElementById('biuuu_city_list').innerHTML = thisDate(obj.curr);    }}) $('#biuuu_city_list').find('tr').eq(0).css({'background-color':'#fffcf6','color':'#070','font-familiar':'微软雅黑','font-weight':'bold'}); $('#biuuu_city_list').find('tr').eq(1).css({'background-color':'#fafafa','color':'#070','font-familiar':'微软雅黑','font-weight':'bold'}); $('#biuuu_city_list').find('tr').eq(2).css({'background-color':'#fffcf6','color':'#070','font-familiar':'微软雅黑','font-weight':'bold'}); $('#biuuu_city_list').find('tr').eq(3).css({'background-color':'#fafafa','color':'#070','font-familiar':'微软雅黑','font-weight':'bold'}); $('#biuuu_city_list').find('tr').eq(4).css({'background-color':'#fffcf6','color':'#070','font-familiar':'微软雅黑','font-weight':'bold'});},error:function(){alert("error");}});});</script>

熟悉js的小伙伴们对上述代码一定很容易明白。

阅读全文
0 0
原创粉丝点击