Servlet的一些操作
一、编辑和修改特定库存信息
要在显示数据库库存信息的页面上,通过点击页面进行跳转,跳转到修改数据库信息的页面上,然后修改后提交,再跳回到原来的页面。首先,在原页面上的表格的段标签<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的一些操作相关推荐
- 在idea中完成创建maven工程,搭建MVC框架并完成和servlet相似的操作
一.创建maven工程 打开idea,点击文件>创建->项目...,选择Maven后点击下一步 填写项目的名称以及存放地址,点击 完成 即可完成 Mavne 项目的创建. ...
- 在idea中创建maven工程,搭建spring MVC框架,完成和servlet相似的操作
1.创建一个maven项目,配置在前文有 2.配置spingmvc(因为是maven所以不用导入jar包) 1.新建一个项目,spingmvc-02-hell,添加web资源的支持,确定导入了Spin ...
- 在idea中创建maven工程,搭建MVC框架,完成和servlet相似的操作
1.创建maven项目 1.1 File -> New Module,进入创建项目窗口. 1.2 点击Next,填写GroupId.ArtifactId和Version 1.3 填写Module ...
- 将数据库的操作代码从servlet中剥离,封装到DAO中
工厂设计模式是所有设计模式中最简单的设计模式!!!(就是通过工厂来创建一些对象) 工厂模式的典型应用场景:创建对象(当我们感觉到创建对象是件很痛苦的事,会用工厂模式) 工厂模式:简单工厂,工厂方法,抽 ...
- Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作
前面三篇文章讲述了如何配置MyEclipse和Tomcat开发JSP网站.如何配置Servlet简单实现表单提交.如何配置MySQL实现JSP数据库查询. 这篇文章主要讲述Servle ...
- Servlet常用操作(基础)
---------------------------------------------------------------------------------------------- [版权申明 ...
- java 操作数据库
最近开始学习 jsp+servlet web开发, 操作数据库必不可少,此文章详细记录了java 连接mysql的步骤 1.下载mysql-connector-java-3.1.10-bin 这个ja ...
- 001 Servlet 介绍
Servlet(Server Applet),全称Java Servlet.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语 ...
- 初学Java Web(4)——Servlet学习总结
经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...
最新文章
- 生命的意义是什么?B站一位up主把这个「终极问题」甩给了AI
- 列表转字符串,再转回来,完全一致
- GPT-3:被捧上天的流量巨星,却有重大缺陷,很危险...
- Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法
- 十五、类与封装的概念
- phpcmsV9上传文件类型的设置
- 程序员过了 30 岁就没人要了?!
- 水滴直播风波背后:事关隐私的恐慌和“委屈”的周鸿祎
- [vb] Set 语句
- [转]_int64、long long 的区别
- 【图像增强】基于matlab同态增晰图像增强【含Matlab源码 962期】
- linux程序库设置错误,Linux--C库函数ferror中文翻译
- PANTONE国际色卡CMYK配方表
- 双组百分比堆积柱形图的制作
- 2022制冷与空调设备运行操作培训试题及答案
- Python之建模数值逼近篇–最小二乘拟合
- 大学十年__献给计算机专业的所有学子
- canvas基本使用,以及七巧板绘制
- 利用 Python-user-agents 解析 User_Agent
- python培训资料共享
热门文章
- 爬了10000张NASA关于火星探索的图片,我发现了一个秘密
- QT Creator 输入中文变繁体的解决方法
- 药店java源码_基于jsp的药店-JavaEE实现药店 - java项目源码
- cos66度等于多少度 用计算机怎么算,三角函数值表(三角函数计算方法及快速查询表)...
- 【嵌入式05】Ubuntu下opencv新手操作:(打开图片及视频)
- 性能测试之tcpcopy引流工具介绍
- 【七天入门Go语言】 GC垃圾回收三色标记 | 第七天
- 大学计算机实验6实验报告,东华大学计算机病毒课实验六宏病毒实验报告
- Android WebRTC实现音视频对讲
- 一支口红用了5年_一支口红用多久最好 口红一般用多久