一、编辑和修改特定库存信息

        要在显示数据库库存信息的页面上,通过点击页面进行跳转,跳转到修改数据库信息的页面上,然后修改后提交,再跳回到原来的页面。首先,在原页面上的表格的段标签<td>上加入这样的语句:

 <td><a th:text="${fruit.name}" th:href="@{/edit(id=${fruit.id})}">苹果</a></td>

在该表字段上就会生成一个超链接,点击向服务器发出edit请求。新建一个servlet类处理该请求,如下:

@WebServlet("/edit")
public class EditServlet extends ViewBaseServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取到请求中的id字段String sid=req.getParameter("id");//判断字符串是否为空,然后转成intif(sid!=null&&!("".equals(sid))){int fid=Integer.parseInt(sid);//通过JDBC获得对应id的Fruit对象Fruit f= GetFruitFid.getFruitFid(fid);//将f保存到request的保存域里面req.setAttribute("Fruit",f);
//将查找到的信息渲染到页面上super.processTemplate("edit",req,resp);System.out.println(f);}}
}

修改信息的页面如下所示。该页面中获得了要修改的数据的信息,并且修改后提交一个名为update的请求。

<form th:action="@{update}" method="post"><!--因为一般id对用户没用,设置不显示--><input type="hidden" name="fid" th:value="${Fruit.id}"/><!--在表的声明中加上object=。后面使用Fruit中的属性前面就不用加Fruit,但是这样的变量前面用*而不是$--><table id="tb_fruit" th:object="${Fruit}"><tr><th>水果:</th><!--request域不用写出来,直接写里面保存的属性Fruit--><td><input type="text" name="name" th:value="*{name}"/></td></tr><tr><th>数量:</th><td><input type="text" name="num" th:value="*{num}"/></td></tr><tr><th>单价:</th><td><input type="text" name="price" th:value="*{price}"/></td></tr><tr><th colspan="3"><input type="submit" value="提交"></th></tr></table></form>

同样新建一个servlet类处理update请求,修改数据库后利用客户端重定向显示新的库存信息。

@WebServlet("/update")
public class UpdateServlet extends ViewBaseServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");String name=req.getParameter("name");String num=req.getParameter("num");String price=req.getParameter("price");String fid=req.getParameter("fid");int count=UpdateFruit.updateFruit(Integer.parseInt(fid),name,Integer.parseInt(num),Integer.parseInt(price));System.out.println(count);//回到index页面上显示修改的结果resp.sendRedirect("index");}
}

二、删除和添加信息

        在库存页面上添加能够对数据库进行删除和增加的内容。首先添加删除功能,先在页面上添加下行:

                <!--添加删除功能,竖线的作用是让thymeleaf识别字符串并自动拼接--><td th:text="${'删除'}" th:onclick="|delFruit(${fruit.id})|"></td>

在页面上生成一个删除选项,点击后如下所示:      

在html的head部分添加一个js文件,在js中定义delFruit函数如下:

function delFruit(id) {//confirm弹出一个页面,确认删除后发送del请求if (confirm('是否确认删除')){window.location.href='del?id='+id;}}

然后新建一个servlet类响应这个带id信息的del请求,再利用JDBC对数据库中对应id的数据进行删除。

再添加删除功能如下,在库存显示页面添加一列:

  <td><a th:text="${'添加'}" th:href="@{/new.html}"></a></td>

然后定义添加页面的form表单如下:

 <p class="f30 center">编辑库存信息</p><form action="insert" method="post"><table id="tb_fruit"><tr><th>水果:</th><td><input type="text" name="name"/></td></tr><tr><th>数量:</th><td><input type="text" name="num"/></td></tr><tr><th>单价:</th><td><input type="text" name="price" /></td></tr><tr><th colspan="3"><input type="submit" value="添加"></th></tr></table></form>

  Notations:新建的这个new.html没有thymeleaf渲染,使用thymeleaf中的语法修饰action会发送不了请求。

        同样,新建一个servlet对其响应,使用JDBC增添数据库中的信息,最后使用客户端重定向重新访问库存页面。

三、分页操作

        对库存信息进行分页显示,每页显示五条信息。对前端页面加入如下的分页按钮:

 <div style="margin-left: 20%;width: 60%"><input type="button" value="首页" th:onclick="|page(1)|" th:disabled="${session.pageNo==1}"/><input type="button" value="上一页" th:onclick="|page(${session.pageNo-1})|" th:disabled="${session.pageNo==1}"/><input type="button" value="下一页" th:onclick="|page(${session.pageNo+1})|" th:disabled="${session.pageNo==session.totalPage}"/><input type="button" value="尾页" th:onclick="|page(${session.totalPage})|" th:disabled="${session.pageNo==session.totalPage}"/></div>

其中,onclick后面的语句表示有一个js的函数page,传入参数为会话作用域中保存的当前页数pageNo。而disabled则表示该按钮何时禁用,如在第一页的时候禁用上一页按钮,在尾页禁用下一页按钮。

page函数功能向服务器端发送含有当前页面信息的请求,如下:

function page(pageNo){window.location.href="index?pageNo="+pageNo;
}

响应该请求的servlet函数定义如下:

@WebServlet("/index")
public class GetServlet extends ViewBaseServlet {@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//默认情况下显示第一页int pageNo=1;if (req.getParameter("pageNo")!=null && !("".equals(req.getParameter("pageNo")))){pageNo=Integer.parseInt(req.getParameter("pageNo"));}List<Fruit> l=new ArrayList<Fruit>();//利用JDB获得数据库中的数据,并将每行数据封装成一个Fruit类//该list的size就是存储fruit的总条数,除以每页条数加一就是总页数l=GetFruit.getFruit();int totalPage=(l.size())/5+1;//获得要显示的页面上的List<Fruit> l1=new ArrayList<Fruit>();for (int i=(pageNo-1)*5;i<pageNo*5&&i<l.size();i++){l1.add(l.get(i));}//创建会话并将Fruit类的ArrayList保存在保存域里面HttpSession hs=req.getSession();hs.setAttribute("FruitList",l1);//在会话中也保存页数信息hs.setAttribute("pageNo",pageNo);hs.setAttribute("totalPage",totalPage);//此处的视图名称是Fruit//下面的函数会将逻辑视图Fruit名称对应到物理视图名称上去//物理视图名称是 view-prefix+逻辑视图名称+view-suffix//而这三者分别对应 /             index       .htmlsuper.processTemplate("index",req,resp);}
}

              

Servlet的一些操作相关推荐

  1. 在idea中完成创建maven工程,搭建MVC框架并完成和servlet相似的操作

    一.创建maven工程         打开idea,点击文件>创建->项目...,选择Maven后点击下一步 填写项目的名称以及存放地址,点击 完成 即可完成 Mavne 项目的创建. ...

  2. 在idea中创建maven工程,搭建spring MVC框架,完成和servlet相似的操作

    1.创建一个maven项目,配置在前文有 2.配置spingmvc(因为是maven所以不用导入jar包) 1.新建一个项目,spingmvc-02-hell,添加web资源的支持,确定导入了Spin ...

  3. 在idea中创建maven工程,搭建MVC框架,完成和servlet相似的操作

    1.创建maven项目 1.1 File -> New Module,进入创建项目窗口. 1.2 点击Next,填写GroupId.ArtifactId和Version 1.3 填写Module ...

  4. 将数据库的操作代码从servlet中剥离,封装到DAO中

    工厂设计模式是所有设计模式中最简单的设计模式!!!(就是通过工厂来创建一些对象) 工厂模式的典型应用场景:创建对象(当我们感觉到创建对象是件很痛苦的事,会用工厂模式) 工厂模式:简单工厂,工厂方法,抽 ...

  5. Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作

    前面三篇文章讲述了如何配置MyEclipse和Tomcat开发JSP网站.如何配置Servlet简单实现表单提交.如何配置MySQL实现JSP数据库查询.         这篇文章主要讲述Servle ...

  6. Servlet常用操作(基础)

    ---------------------------------------------------------------------------------------------- [版权申明 ...

  7. java 操作数据库

    最近开始学习 jsp+servlet web开发, 操作数据库必不可少,此文章详细记录了java 连接mysql的步骤 1.下载mysql-connector-java-3.1.10-bin 这个ja ...

  8. 001 Servlet 介绍

    Servlet(Server Applet),全称Java Servlet.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语 ...

  9. 初学Java Web(4)——Servlet学习总结

    经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...

最新文章

  1. 生命的意义是什么?B站一位up主把这个「终极问题」甩给了AI
  2. 列表转字符串,再转回来,完全一致
  3. GPT-3:被捧上天的流量巨星,却有重大缺陷,很危险...
  4. Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法
  5. 十五、类与封装的概念
  6. phpcmsV9上传文件类型的设置
  7. 程序员过了 30 岁就没人要了?!
  8. 水滴直播风波背后:事关隐私的恐慌和“委屈”的周鸿祎
  9. [vb] Set 语句
  10. [转]_int64、long long 的区别
  11. 【图像增强】基于matlab同态增晰图像增强【含Matlab源码 962期】
  12. linux程序库设置错误,Linux--C库函数ferror中文翻译
  13. PANTONE国际色卡CMYK配方表
  14. 双组百分比堆积柱形图的制作
  15. 2022制冷与空调设备运行操作培训试题及答案
  16. Python之建模数值逼近篇–最小二乘拟合
  17. 大学十年__献给计算机专业的所有学子
  18. canvas基本使用,以及七巧板绘制
  19. 利用 Python-user-agents 解析 User_Agent
  20. python培训资料共享

热门文章

  1. 爬了10000张NASA关于火星探索的图片,我发现了一个秘密
  2. QT Creator 输入中文变繁体的解决方法
  3. 药店java源码_基于jsp的药店-JavaEE实现药店 - java项目源码
  4. cos66度等于多少度 用计算机怎么算,三角函数值表(三角函数计算方法及快速查询表)...
  5. 【嵌入式05】Ubuntu下opencv新手操作:(打开图片及视频)
  6. 性能测试之tcpcopy引流工具介绍
  7. 【七天入门Go语言】 GC垃圾回收三色标记 | 第七天
  8. 大学计算机实验6实验报告,东华大学计算机病毒课实验六宏病毒实验报告
  9. Android WebRTC实现音视频对讲
  10. 一支口红用了5年_一支口红用多久最好 口红一般用多久