位置: IT常识 - 正文

javaweb案例一(javaweb简单项目案例)

编辑:rootadmin
javaweb案例一 文章目录一、登录界面1.前端代码2.后端代码二、添加功能1.前端代码2.后端代码三、删除功能1.前端代码2.后端代码四、修改功能1.前端代码(1)修改路径(2)信息回显(3)隐藏域2.后端代码(1)findUserServlet(2)updateUserServlet五、删除选中功能1.前端代码(1)单选(2)全选2.后端代码六、分页查询功能1.前端代码2.后端代码(1)封装pagebean(2)findUserByPageServlet七、复杂条件查询1.前端代码2.后端代码总结一、登录界面

推荐整理分享javaweb案例一(javaweb简单项目案例),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javaweb开发案例课堂,javaweb开发案例课堂,java案例网站,java案例网站,javaweb开发案例课堂,javaweb开发案例课堂,javaweb开发案例课堂,java web项目案例,内容如对您有帮助,希望把文章链接给更多的朋友!

图片:

1.前端代码改造验证码<img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/>点击验证码刷新 加new Date().getTime()的原因在于,时间不重复,因此更新验证就不会重复。<script type="text/javascript"> //切换验证码 function refreshCode(){ //1.获取验证码图片对象 var vcode = document.getElementById("vcode"); //2.设置其src属性,加时间戳 vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime(); } </script><a href="javascript:refreshCode();">提交表单<form action="${pageContext.request.contextPath}/loginServlet" method="post">出错显示的信息框 <div class="alert alert-warning alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" > <span>&times;</span> </button> <strong>${login_msg}</strong> <!-- 对应后面的:request.setAttribute("login_msg","用户名或密码错误!"); --> </div>2.后端代码设置编码request.setCharacterEncoding("utf-8");获取用户填写验证码,getParameter()的参数是验证码栏的name字段<input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>String verifycode = request.getParameter("verifycode");//得到的是页面获取的验证码验证码校验 checkCodeServlet里面,将生成的验证码存放在session中。//将验证码放入HttpSession中request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);

equalsIgnoreCase()忽略大小写比较。

HttpSession session = request.getSession();String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");//获取了生成的验证码session.removeAttribute("CHECKCODE_SERVER");//确保验证码一次性 if(!checkcode_server.equalsIgnoreCase(verifycode)){ //验证码不正确 //提示信息 request.setAttribute("login_msg","验证码错误!"); //跳转登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); return; }

注意:写到这里时,记得先验证是否正确。再进行下一步!!!!! session.removeAttribute(“CHECKCODE_SERVER”);//确保验证码一次性,注意这一步!!!!

获取所有的数据(只有用户名和密码)Map<String, String[]> map = request.getParameterMap();封装User对象(参考request和reponse—常见问题) User user = new User(); try { BeanUtils.populate(user,map); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }调用Service查询UserService service = new UserServiceImpl();User loginUser = service.login(user);//查询我用户输入的账户是否存在判断是否登录成功if(loginUser != null){ //登录成功 //将用户存入session session.setAttribute("user",loginUser); //跳转页面 response.sendRedirect(request.getContextPath()+"/index.jsp"); }else{ //登录失败 //提示信息 request.setAttribute("login_msg","用户名或密码错误!"); //跳转登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); }

注意:request没有共享数据,因此,登录成功之后,进行重定向!!! 注意:数据库的表需创建,还有配置文件需配置!

二、添加功能

分析图:

1.前端代码修改添加联系人的跳转页面路径<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>修改头信息<center><h3>添加联系人页面</h3></center> <form action="${pageContext.request.contextPath}/addUserServlet" method="post">

注意要给表单加name,不然后端获取数据时,获取不了,为null!!!!

<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">2.后端代码设置编码request.setCharacterEncoding("utf-8");获取参数 Map<String, String[]> map = request.getParameterMap();封装对象User user = new User(); try { BeanUtils.populate(user,map); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }调用Service保存UserService service = new UserServiceImpl();service.addUser(user);跳转到userListServlet(注意:下面的不一样,后面会解释)response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");

(表单的校验)

三、删除功能

分析图: 上述的id,是数据库的id,不是下图的编号

1.前端代码

id的传递,还有路径的改写<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/delUserServlet?id="+${user.id}">删除</a></td>

这样写有一个小问题就是,删除一条数据时,直接删除,如果用户是误操作,就会直接删除,用户的体验就不是很好。因此,我们可以将它换成如下操作。

function deleteUser(id){ location.href="${pageContext.request.contextPath}/delUserServlet?id="+${user.id}; } }<a class="btn btn-default btn-sm" href="javascript:deleteUser()});">删除</a></td>

但是这样写,有会有一个问题就是,user.id这里是获取不到的,解决办法就是传参。最终版。

function deleteUser(id){ //用户安全提示 if(confirm("您确定要删除吗?")){ //访问路径 location.href="${pageContext.request.contextPath}/delUserServlet?id="+id; } }<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id});">删除</a></td>2.后端代码获取idString id = request.getParameter("id");调用service删除UserService service = new UserServiceImpl();service.deleteUser(id);跳转到查询所有Servletresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");四、修改功能javaweb案例一(javaweb简单项目案例)

图解:

1.前端代码

删除这句,用不着

(1)修改路径<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>(2)信息回显姓名、年龄、QQ、email的回显(在findUserServlet的转发到update.jsp操作)<input type="text" class="form-control" id="name" name="name" value="${user.name}" readonly="readonly" placeholder="请输入姓名" /><input type="text" class="form-control" value="${user.age}" id="age" name="age" placeholder="请输入年龄" /><input type="text" id="qq" class="form-control" value="${user.qq}" name="qq" placeholder="请输入QQ号码"/><input type="text" id="email" class="form-control" value="${user.email}" name="email" placeholder="请输入邮箱地址"/>性别回显<div class="form-group"> <label>性别:</label> <c:if test="${user.gender == '男'}"> <input type="radio" name="gender" value="男" checked />男 <input type="radio" name="gender" value="女" />女 </c:if> <c:if test="${user.gender == '女'}"> <input type="radio" name="gender" value="男" />男 <input type="radio" name="gender" value="女" checked />女 </c:if> </div>籍贯的回显<div class="form-group"> <label for="address">籍贯:</label> <select name="address" id="address" class="form-control" > <c:if test="${user.address == '陕西'}"> <option value="陕西" selected>陕西</option> <option value="北京">北京</option> <option value="上海">上海</option> </c:if> <c:if test="${user.address == '北京'}"> <option value="陕西" >陕西</option> <option value="北京" selected>北京</option> <option value="上海">上海</option> </c:if> <c:if test="${user.address == '上海'}"> <option value="陕西" >陕西</option> <option value="北京">北京</option> <option value="上海" selected>上海</option> </c:if> </select> </div>(3)隐藏域

<!-- 隐藏域 提交id--><input type="hidden" name="id" value="${user.id}">2.后端代码(1)findUserServlet获取idString id = request.getParameter("id");调用Service查询UserService service = new UserServiceImpl();User user = service.findUserById(id);将user存入requestrequest.setAttribute("user",user);转发到update.jsprequest.getRequestDispatcher("/update.jsp").forward(request,response);(2)updateUserServlet设置编码request.setCharacterEncoding("utf-8");获取mapMap<String, String[]> map = request.getParameterMap();封装对象 User user = new User(); try { BeanUtils.populate(user,map); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }调用Service修改UserService service = new UserServiceImpl(); service.updateUser(user);跳转到查询所有Servletresponse.sendRedirect(request.getContextPath()+"/findUserByPageServlet");五、删除选中功能

图解:

1.前端代码(1)单选获取选中条目的id,有多方案,最简单的一种,表单默认支持,选择条目的提交。想要提交,就要加name <td><input type="checkbox" name="uid" value="${user.id}"></td>点击删除选中,要进行提交表单,对删除选中添加单击事件<a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a>获取value值 不加就会获取不到数据库的id <script> //1.获取第一个cb document.getElementById("firstCb").onclick = function(){ //2.获取下边列表中所有的cb var cbs = document.getElementsByName("uid"); //3.遍历 for (var i = 0; i < cbs.length; i++) { //4.设置这些cbs[i]的checked状态 = firstCb.checked cbs[i].checked = this.checked; } }</script><td><input type="checkbox" name="uid" value="${user.id}"></td>(2)全选

下面的框跟第一个框的状态保持一致 第一个框<th><input type="checkbox" id="firstCb"></th>

下面的框,遍历它,让它保持一致;注意判断是否有选中条目,如果没有选中的情况!!!!。

<script>window.onload = function(){ //给删除选中按钮添加单击事件 document.getElementById("delSelected").onclick = function(){ if(confirm("您确定要删除选中条目吗?")){ var flag = false; //判断是否有选中条目 var cbs = document.getElementsByName("uid"); for (var i = 0; i < cbs.length; i++) { if(cbs[i].checked){ //有一个条目选中了 flag = true; break; } } if(flag){//有条目被选中 //表单提交 document.getElementById("form").submit(); } } }</script><td><input type="checkbox" name="uid" value="${user.id}"></td>2.后端代码获取所有idString[] ids = request.getParameterValues("uid");调用service删除UserService service = new UserServiceImpl(); service.delSelectedUser(ids);

-跳转查询所有Servlet

response.sendRedirect(request.getContextPath()+"/findUserByPageServlet");六、分页查询功能

图解: 分析图:

1.前端代码为什么改成pb.list?因为request.setAttribute(“pb”,pb);存入的是pb<c:forEach items="${pb.list}" var="user" varStatus="s">总记录和总页码的修改 <span style="font-size: 25px;margin-left: 5px;"> 共${pb.totalCount}条记录,共${pb.totalPage}页 </span>下面的修改加激活状态,在li里面加class=“active” <c:forEach begin="1" end="${pb.totalPage}" var="i" > <c:if test="${pb.currentPage == i}"> <li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li> </c:if> <c:if test="${pb.currentPage != i}"> <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}">${i}</a></li> </c:if> </c:forEach>在最前面的,1之前的加禁用状态<c:if test="${pb.currentPage == 1}"> <li class="disabled"> </c:if> <c:if test="${pb.currentPage != 1}"> <li> </c:if> <c:if test="${pb.currentPage == pb.totalPage}"> <li class="disabled"> </c:if> <c:if test="${pb.currentPage != pb.totalPage}"> <li> </c:if>

还要在UserServiceImpl里的findUserByPage()里面加

if(currentPage <=0) { currentPage = 1; }else if (currentPage>totalPage){ currentPage = totalPage; }将来点击下面的页面,不是进入之前的userListServlet页面,而是进入findUserByPageServlet,所以其他的都要改 2.后端代码(1)封装pagebean

(2)findUserByPageServletrequest.setCharacterEncoding("utf-8");获取参数String currentPage = request.getParameter("currentPage");//当前页码 String rows = request.getParameter("rows");//每页显示条数//解决下面注意事项的问题 if(currentPage == null || "".equals(currentPage)){ currentPage = "1"; } if(rows == null || "".equals(rows)){ rows = "5"; }调用service查询UserService service = new UserServiceImpl(); PageBean<User> pb = service.findUserByPage(currentPage,rows); System.out.println(pb);将PageBean存入requestrequest.setAttribute("pb",pb); request.setAttribute("condition",condition);//将查询条件存入request转发到list.jsprequest.getRequestDispatcher("/list.jsp").forward(request,response);注意事项 后面不跟参数,就会报错 解决办法,在上面的代码中七、复杂条件查询

图解:

1.前端代码

查询条件的回显 在findUserByPageServlet中将查询的数据添加到requestrequest.setAttribute("condition",condition);//将查询条件存入request

在list.jsp中进行value的赋值

<input type="text" name="name" value="${condition.name[0]}" class="form-control" id="exampleInputName2" ><input type="text" name="address" value="${condition.address[0]}" class="form-control" id="exampleInputName3" ><input type="text" name="email" value="${condition.email[0]}" class="form-control" id="exampleInputEmail2" >当查询的值查询完之后,我们再点击分页时,就会变成没有查询之前全部的数据的分页,因此我们要在每个路径下拼接路径。 2.后端代码

获取条件查询参数Map<String, String[]> condition = request.getParameterMap();在UserDaoImpl中改造sql语句,用拼接的方式 拼接时,要注意: sb.append(" and “+key+” like ? ");and两边要加空格,不然拼接在一起,没有空格时,会报错;还有解决 ? 里面传值的问题,因为值不确定,因此,用List params = new ArrayList();来接收参数 public int findTotalCount(Map<String, String[]> condition) { //1.定义模板初始化sql String sql = "select count(*) from user where 1 = 1 "; StringBuilder sb = new StringBuilder(sql); //2.遍历map Set<String> keySet = condition.keySet(); //定义参数的集合 List<Object> params = new ArrayList<Object>(); for (String key : keySet) { //排除分页条件参数 if("currentPage".equals(key) || "rows".equals(key)){ continue; } //获取value String value = condition.get(key)[0]; //判断value是否有值 if(value != null && !"".equals(value)){ //有值 sb.append(" and "+key+" like ? "); params.add("%"+value+"%");//?条件的值 } } System.out.println(sb.toString()); System.out.println(params); return template.queryForObject(sb.toString(),Integer.class,params.toArray()); }排除分页条件参数,如果不排除,就会报错 params.add("%"+value+"%");如果写成了params.add(“value”);当查询的是姓李的人,就会导致没有结果。添加分页的findByPage()方法中,最后加进去的sql语句,一定是拼接后的sql语句。 链接:完整代码 提取码:jzfa总结

在上述的用红色写的,是不容易发现而且很容易出错的问题,需要大家注意。

本文链接地址:https://www.jiuchutong.com/zhishi/295225.html 转载请保留说明!

上一篇:【Vue3】用Element Plus实现列表界面(vue3 element ui)

下一篇:目标检测数据预处理——根据部件类别按照特定位置拼图,缩小学习空间(目标检测现状)

  • 抖音上的图片保存到手机的方法是什么(抖音上的图片保存不了在相册咋回事)

    抖音上的图片保存到手机的方法是什么(抖音上的图片保存不了在相册咋回事)

  • 闲鱼擦亮和重发的区别(闲鱼上擦亮和重新发布有啥区别)

    闲鱼擦亮和重发的区别(闲鱼上擦亮和重新发布有啥区别)

  • 手机128和256运行速度(手机128和256更流畅吗)

    手机128和256运行速度(手机128和256更流畅吗)

  • 苹果充电接口检测到液体(苹果充电接口检测到有液体用吹风机)

    苹果充电接口检测到液体(苹果充电接口检测到有液体用吹风机)

  • 平板电脑能当家教机吗(平板电脑可以当家教机用吗)

    平板电脑能当家教机吗(平板电脑可以当家教机用吗)

  • word怎么合并(word怎么合并成一页)

    word怎么合并(word怎么合并成一页)

  • 屏幕键盘怎么打中文(屏幕键盘怎么打数字)

    屏幕键盘怎么打中文(屏幕键盘怎么打数字)

  • 无雾加湿器和有雾加湿器区别(无雾加湿器和有雾加湿器哪个寿命长)

    无雾加湿器和有雾加湿器区别(无雾加湿器和有雾加湿器哪个寿命长)

  • windowsapps文件夹可以删除吗(windowsapps文件夹拒绝访问)

    windowsapps文件夹可以删除吗(windowsapps文件夹拒绝访问)

  • 苹果延时摄影可以拍多久(苹果延时摄影可以暂停吗)

    苹果延时摄影可以拍多久(苹果延时摄影可以暂停吗)

  • 电脑没电关机有损害吗(电脑没电关机有辐射吗)

    电脑没电关机有损害吗(电脑没电关机有辐射吗)

  • vivox30左边按键是干什么的(vivo30左边的键是什么)

    vivox30左边按键是干什么的(vivo30左边的键是什么)

  • 微信朋友圈的个性签名怎么改(微信朋友圈的个性签名怎么弄)

    微信朋友圈的个性签名怎么改(微信朋友圈的个性签名怎么弄)

  • qq号查找和精确查找的区别(qq号查找和精确查找是什么意思)

    qq号查找和精确查找的区别(qq号查找和精确查找是什么意思)

  • vivo手机的安全中心在哪儿(vivo手机的安全问题在哪里设置)

    vivo手机的安全中心在哪儿(vivo手机的安全问题在哪里设置)

  • ps怎么镜像翻转(ps怎么镜像翻转快捷键)

    ps怎么镜像翻转(ps怎么镜像翻转快捷键)

  • 知道微信号怎么查抖音号(知道微信号怎么登录微信账号)

    知道微信号怎么查抖音号(知道微信号怎么登录微信账号)

  • 安卓软件开发什么语言(开发安卓软件需要学什么)

    安卓软件开发什么语言(开发安卓软件需要学什么)

  • 宝马标志设计理念及含义(宝马汽车logo设计理念)

    宝马标志设计理念及含义(宝马汽车logo设计理念)

  • 电脑上大于等于号怎么打(电脑上大于等于≥怎么输入英文)

    电脑上大于等于号怎么打(电脑上大于等于≥怎么输入英文)

  • iphone6s plus电池容量(iphone6splus电池容量是多少)

    iphone6s plus电池容量(iphone6splus电池容量是多少)

  • 探探为什么收不到信息(探探为什么收不了验证码)

    探探为什么收不到信息(探探为什么收不了验证码)

  • 华为荣耀20是什么系统(华为荣耀20是什么充电器)

    华为荣耀20是什么系统(华为荣耀20是什么充电器)

  • 为什么下载不了库乐队(为什么下载不了tiktok)

    为什么下载不了库乐队(为什么下载不了tiktok)

  • linux查看磁盘空间命令教程(linux查看磁盘空间 命令fdisk)

    linux查看磁盘空间命令教程(linux查看磁盘空间 命令fdisk)

  • 车船税征收标准表
  • 企业其他税负率计算公式?
  • 开专票还是开普发票
  • 劳务报酬个人所得税怎么计算
  • 2019年一季度季报怎样填写
  • 工资发放流程以及如何记账
  • 小规模自开专票怎么交税
  • 防伪税控开具发票明细表
  • 车间一般性耗用材料会计分录
  • 购销业务账务处理
  • 差旅费超支金额允许报销吗
  • 企业间贴现手续怎么办理
  • 工业用地厂房要交契税吗
  • 旅游休闲用地
  • 分支机构享受了税收优惠,是由总机构备案还是分支机构备案?
  • 长期待摊费用账户按用途和结构分类应属于
  • 统借统贷合同需要交印花税吗
  • 如何倒算税前工资的公式
  • 未分配50g
  • 撤回和撤销是什么意思
  • 准备金税前扣除什么意思
  • 应付质保金到期怎么办
  • 物流服务费税率是多少
  • 公司购买理财产品如何做账
  • mac 双系统如何调整系统空间
  • 飞机票本身包含保险吗多少钱
  • 车辆 以旧换新
  • 一般纳税人销售自己使用过的汽车
  • php-mbstring
  • 以前年度多计提的附加税怎么冲回
  • 十分钟带你了解阿氏圆
  • 营改增预收款确认收入
  • Chat GPT实用案例——VUE+Chat GPT实现聊天功能教程
  • 企业所得税核定征收方法有哪两种
  • php 5
  • 汽车客运补充车道标志
  • 报废的设备怎么处理
  • 百度文心一言对未来商业的影响
  • create_proc_entry
  • php用mysql连接数据库并查询
  • 三代手续费返还是否需要缴纳增值税
  • 纳税人在电子税务局收到优惠政策
  • 研发费用归集范围有哪些
  • MySQL Proxy的安装及基本命令使用教程
  • 原值净值怎么算
  • 纸质承兑上的印花是什么
  • 增值税不得抵扣的情形
  • 阶段性减免社保费政策期限延长
  • 加计抵减与加计抵消区别
  • 去年的成本发票做错了需要补税吗
  • 商品损耗科目
  • 外购材料时所支付的增值税应如何处理
  • 现金发放工资有什么风险
  • 有限公司股东撤资退股
  • 固定资产抵债交不交增值税
  • 纳税申报表多缴了怎么办
  • 公司基本账户提现规定
  • 新成立公司实收资本没到位该怎么做账
  • 汇兑损益形成的基础是
  • 企业如何计算增值税
  • 盈余公积金计算方法
  • window10预览在哪里找
  • lumia1020手机
  • explorer.exe是啥意思
  • xp远程连接win7
  • oeloader.exe - oeloader是什么进程 有什么用
  • win7系统玩游戏卡顿怎么办
  • js编程实例
  • 怎样提升android的版本为最新版本?
  • node.js javascript
  • [置顶]马粥街残酷史
  • js异步编程的四种方法
  • 游戏客服怎么跟客户聊天
  • spring mvc jsp
  • 解决jQuery ajax请求在IE6中莫名中断的问题
  • 广东税务总局发票怎么开
  • 如何查询企业股票代码
  • 注销税务说明
  • 12366的客服辛苦吗
  • 国税发票什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设