Servlet+JSP+JavaBean整合项目的总结

  1. 项目分层

本次项目的设计使用MVC模型来进行设计,MVC全称为model view controller,是模型视图控制器的缩写

  1. Model

模型层是用来获取数据库中的原生数据的,更细分可分为service层,dao层,pojo层,util层;其中pojo层中存放了很多个表实体类,最简单的理解就是一张数据表对应一个实体类(这也可能是片面的理解);

dao层:为持久层,dao层位于最底层主要就是用来与数据库进行交互操作 增删改查;

service层:主要用来对接dao层用来获取dao层所执行完操作的结果;

util层:主要就是用来做一些资源初始化操作以及一些通用方法的创建,例如获取连接数据库的对象,通用的DQL操作方法和通用的DML操作方法,关闭资源流的方法等

  1. View
    视图层用来对浏览器做出响应操作,jsp即属于该层;在jsp文件中主要用来做前端页面的展示、获取作用域中的共享数据以及将请求继续发送给下一个jsp或者是一个servlet
  2. Controller

控制器层用来进行业务逻辑的处理操作,servlet即属于该层;servlet主要就是用来调用model层来进行数据的处理操作,并根据返回的结果来判断做出如何的响应操作

  1. 项目整体的需求分析以及思路

此次项目的需求主要分为用户登陆、用户退出、用户的注册、用户信息的修改以及删除用户

  1. Dao层通用工具类的实现
  2. 在通用工具类中首先读取properties文件获取连接数据库的四个参数信息
  1. 在静态代码块中加在数据库驱动
  1. 创建获取连接对象的方法
  1. 创建关闭资源流的方法
  1. 创建通用的DML操作的方法

方法流程

第一步 :首先获取连接对象

第二步 :关闭JDBC的自动事务提交

第三步 :创建执行器对象

第四步 :通过getParameterMetaData()方法来获取SQL语句中占位符个数

第四步 :进行SQL语句的参数绑定操作

第五步 :执行SQL语句

第六步 :提交事务

第七步 :如果有异常则回滚事务

第八步 :返回受影响行数

代码实现

  1. 创建通用的DQL操作的方法

方法流程

第一步 :创建list集合对象

第二步 :获取连接对象

第三步 :创建执行器对象

第四步 :通过getParameterMetaData()方法来获取SQL语句中占位符个数

第五步 :进行SQL语句的参数绑定操作

第六步 :执行SQL语句,创建结果集对象并将获取的结果存放进去

第七步 :遍历结果集,在结果集中首先创建类的对象,接着通过getMetaData()方法获取一行结果集中所有的列信息,列的个数以及列名;接着依据列的个数进行循环,在该循环中首先通过类的模板获取所有类的属性,遍历一下所有属性如果匹配到与列名一致的属性则进行该属性对应的setter方法的创建,接着回调对应的方法将查询出列名中的值传入到实体类对应的属性中;最后将每一次循环所创建的实体类对象都存储到list集合中

第八步 :返回该集合对象

代码实现

  1. Servlet层通用类的实现

封装一个通用的service方法来提供给所有的servlet使用,该类不能被直接访问也不能被实例化;也就是该类的不在配置文件中进行映射关系的配置且将该类设置抽象类

实现思路

第一步 :创建ServletContext全局对象

第二步 :获取配置文件中的请求和响应编码格式

第三步 :设置请求和响应的编码格式

第四步 :获取request作用域中的方法名

第五步 :获取当前调用该service方法的对象的模板

第六步 :通过反射获取方法名对应的方法

第七步 :回调当前对象的该方法

代码实现

  1. 用户登陆功能的相关实现

用户登陆功能的逻辑为用户输入用户名和密码点击登陆后,首先需要去数据库中通过uname和pwd来查询匹配的数据,如果未查询到匹配数据则返还给用户提示:用户名或密码错误;如果查询成功接下来开始进行第二次数据库查询操作,这次查询所有用户信息,然后重定向到主界面将所有的用户数据进行展示

  1. Servlet中UserLogin

实现思路

第一步 :通过request作用域获取用户传递的uname,pwd以及methodName

第二步 :创建service层实现类对象

第三步 :调用其selByUnameAndPwd(Object...obj)方法根据uname和pwd进行查询操作,并将查询出的结果存放入容器中

第四步 :对容器的元素个数进行判断若size=0则代表查询失败,这时可将提示信息存储到session作用域中并将页面重定向到login.jsp提示用户”用户名或密码有误”

第五步 :若size>0则说明查询成功

第六步 :调用实现类对象的selAll()方法进行所有用户的查询操作

第七步 :将所有用户的数据存放到一个list集合中并将该list集合存储到session作用域中

第八步 :将页面重定向到userInfo.jsp

代码实现

  1. Service中selByUnameAndPwd(Object...obj)

实现思路

第一步 :创建dao层的实现类对象

第二步 :调用该对象的selByUnameAndPwd(Object...obj)方法

代码实现

  1. Service中selAll()

实现思路

第一步 :创建dao层的实现类对象

第二步 :调用该对象的selAll()方法

代码实现

  1. Dao中selByUnameAndPwd(Object...obj)

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DQL操作方法,将SQL以及uname和pwd作为参数参入

第三步 :将查询到的结果集存放入list集合中进行返回

代码实现

  1. Dao中selAll()

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DQL操作方法,将SQL作为参数传入

第三步 :将查询到的结果集存放入list集合中进行返回

代码实现

  1. login.jsp

该页面通过session作用域来获取”用户名或密码错误”的提示信息

  1. userInfo.jsp

该页面通过session作用域来获取所有用户的数据,并将数据展示到页面上

  1. 用户退出功能的相关实现

用户退出功能的逻辑为用户点击退出,然后服务器将该用户对应的session对象进行销毁操作然后跳转到登陆界面

  1. Servlet中UserLogout

实现思路

第一步 :获取session对象

第二步 :销毁该session对象

第三步 :重定向到login.jsp

代码实现

  1. userInfo.jsp

该页面的逻辑首先使用超链接的方法来实现页面的跳转,接着当用户点击退出按钮,询问一下用户”是否确认退出”;若客户点”是”则进行页面的跳转,如果点否则不进行任何操作

  1. 用户注册功能的相关实现

用户注册功能的逻辑为用户点击注册按钮,首先会跳转到一个注册界面;然后当用户输入完所有的信息点击表单进行提交后,此时就会进行数据的插入操作,将这条用户数据插入到数据库中;当数据库操作结果后返回受影响行数,如果受影响行数大于0则查询所有的用户数据,将查询出的用户数据存储到list集合中,然后将list集合存储到session作用域中,最后重定向到主界面;若受影响行数等于0,则重定向到注册界面并且返回一个”用户注册失败”的提示信息

  1. Servlet中UserRegister

实现思路

第一步 :获取request作用域中的uname,pwd,sex,age和birthday五个参数信息

第二步 :创建Service层的实现类对象

第三步 :调用该对象的addUser(Object...objs)方法,并且将uname,pwd,sex,age,birthday五个参数传入

第四步 :对受影响行数进行判断,如果受影响行数等于0,则重定向到用户注册界面并且返还一个用户提示信息

第五步 :如果受影响行数>0,则调用实现类对象的selAll()方法

第六步 :将查询出的所有的用户数据存放到一个集合中

第七步 :将集合存储到session作用域中,最后重定向到主界面并且返回给用户一个”注册成功”的提示信息

代码实现

  1. Service中addUser(Object...objs)

实现思路

第一步 :创建dao层实现类对象

第二步 :调用实现类对象的addUser()方法,并将uname,pwd,sex,

age,birthday五个参数传入

第三步 :返回受影响行数

代码实现

  1. Dao中addUser(Object...objs)

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DML操作方法,将uname,pwd,sex,age

,birthday五个参数参数

第三步 :返回受影响行数

代码实现

  1. userInfo.jsp

该页面中逻辑是使用超链接标签来实现,跳转到注册界面不进行任何数据库的交互操作

  1. register.jsp

该页面中的逻辑为表达的提交,表单的使用一个隐藏的input标签来存储方法名,然后在提交后将方法名提交到servlet中进行业务操作

  1. 用户信息的修改功能的相关实现

用户信息的修改功能的逻辑为用户点击修改按钮,然后在参数中拼接用户uid以及方法名,然后在数据库中根据uid来进行用户数据的匹配查询,接着重定向到用户数据修改界面

在修改界面中显示该用户的所有数据,uid不显示且用户名只能看但不能被修改,接着当用户完成数据的修改后点击提交按钮,这时对数据会进行一次修改操作,接着判断受影响的行数,若受影响行数为大于0则再查询一次所有用户的数据然后重定向到主界面,在界面中展示所有用户的数据信息并且在主界面中显示”用户修改成功”的提示信息

  1. Servlet中UserEdit

实现思路

第一步 :获取request作用域中的uid

第二步 :创建service层实现类对象

第三步 :调用实现类对象的selUserByUid(int uid)方法

第四步 :将查询出的用户数据存放到list集合中,并将list集合存储到session作用域中

第五步 :重定向到用户修改的界面

代码实现

  1. Servlet中UserUpdate

实现思路

第一步 :获取request作用域中的uid,uname,pwd,sex,age,

birthday六个参数

第二步 :创建service层实现类对象

第三步 :调用实现类对象的UpdateUserInfo(Object...objs)方法进行数据库数据的更新操作,将六个参数传入

第四步 :判断受影响行数,如果受影响行数大于0则调用实现类对象的selAll()方法来进行所有用户数据的查询操作

第五步 :将查询到的所有用户数据存放到一个list集合中

第六步 :将list集合存储到session作用域中

第七步 :重定向到主界面,并且返回一个”用户信息修改成功”的提示给用户

代码实现

  1. Service中selUserByUid(int uid)

实现思路

第一步 :创建dao层实现类对象

第二步 :调用实现类的selUserByUid(int uid)方法,将uid传入

第三步 :返回一个list集合

代码实现

  1. Dao中selUserByUid(int uid)

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DQL操作方法,将SQL和uid传入

第三步 :返回一个list集合

代码实现

  1. Service中UpdateUserInfo(Object...objs)

思想思路

第一步 :创建dao层实现类对象

第二步 :调用实现类的UpdateUserInfo(Object...objs)方法,将六个参数传入

第三步 :返回受影响行数

代码实现

  1. Dao中UpdateUserInfo(Object...objs)

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DML操作方法,将SQL和六个参数传入

第三步 :返回受影响行数

代码实现

  1. userInfo.jsp

该页面的实现逻辑为当用户点击编辑按钮后,提交的地址中应当拼接方法名和uid信息;且使用session作用域来获取传递过来的用户提示信息

  1. edit.jsp

该页面使用的实现逻辑为当用户点击提交表单后,将所有的数据信息提交到action所指定的地址,在地址中拼接方法名和uid

  1. 删除用户功能的相关实现

删除用户功能的相关逻辑为用户点击删除用户,首先判断该用户是否为自身如果是自身则重定向回主界面并提示用户”无法删除自身”,如果不为自身则在数据库中根据uid对该条数据进行删除的操作,返回受影响行数若该值为0则重定向到主界面提示用户”未删除成功”,若该值大于0则进行所有用户数据的查询操作,然后重定向到主界面并返回用户一个”用户数据删除成功”的提示信息

  1. Servlet中UserRemove

实现思路

第一步 :获取request作用域中的uname以及获取session中的uname进行比较如果相等则重定向会主界面并提示用户”无法将自身删除”

第二步 :获取request作用域中的uid

第三步 :创建service层实现类对象

第四步 :调用实现类对象的removeUserByUid(int uid)方法,将uid参数传入

第五步 :判断受影响行数如果该值为0则重定向当主界面并提示用户”用户数据删除失败”的提示信息

第六步 :若该值大于0则调用实现类对象的selAll()方法进行所有用户数据的查询操作

第七步 :将查询出的所有的用户数据添加到list集合中

第八步 :将list集合存储到session作用域中

第九步 :重定向到主界面并提示用户”用户数据删除成功”的提示

代码实现

  1. Service中removeUserByUid(int uid)

实现思路

第一步 :创建dao层实现类对象

第二步 :调用实现类对象的delUserByUid(int uid)方法,将uid作为参数传入

第三步 :返回受影响行数

代码实现

  1. Dao中delUserByUid(int uid)

实现思路

第一步 :编写SQL语句

第二步 :调用JDBC中通用的DML操作方法,并将uid作为参数传入

第三步 :返回受影响行数

代码实现

  1. userInfo.jsp

该页面的实现逻辑为当用户删除自己时,页面使用session作用域获取用户提示信息;当用户删除失败时,页面使用session作用域获取用户提示信息;用户点击删除时在地址后拼接方法名,uid以及uname三个参数,uid是用来后续根据uid进行用户数据删除操作的,uname参数是在判断是否为删除自己时使用的

  1. 项目中的注意之处

项目中以下我关注的几个点;路径的使用,接收到用户数据或共享数据之后的转换问题以及重定向或者请求转发的使用

  1. 路径的使用

无论是在servlet还是在JSP中,路径最好使用绝对路径以防出错,请求转发基于项目根目录,重定向基于服务器根目录

当跳转之后的界面需要前一个界面的参数信息,若是表单提交的方式可直接通过input标签来存储想要传递的数据;若为超链接则可使用地址拼接的方式拼接想要传递的数据;

  1. 接收到数据的转换问题
  2. getParameter

使用该方法所获取到的数据类型均为String类型,所以需要做强制类型的转换

  1. getAttribute

使用该方法所获取到的数据类型均为Object类型,也需要做类型强制转换

  1. 从数据库中查询到的数据

从数据库中查询到的数据类型与数据的原类型一一对应,无需做强制类型转换

String类型对应varchar

int类型对应number

Date类型对应date

  1. 响应处理结果方式的选择

由于请求转发会导致表单的重复提交问题,所以请使用重定向的方式进行页面的跳转操作

jsp删除时提示_Java修行第058-059天 Servlet+JSP+JavaBean整合项目总结相关推荐

  1. ldslite是什么启动项_windows文件夹删除时提示正在被使用无法删除怎么办?

    windows文件夹删除时提示正在被使用无法删除怎么办? 如下图所示: 相信不少朋友碰到过这种情况,在电脑上删除一个文件夹时提示"文件夹正在使用,操作无法完成,因为其中的文件夹或文件已在另一 ...

  2. 微信小程序-删除时提示是否确定删除

    微信小程序-删除时提示是否确定删除 效果 代码 wx.showModal({content: '确定要删除吗?',success: function (sm) {if (sm.confirm) {// ...

  3. PADS的layout单个元器件删除时提示“复用元素无法修改,首先打散复用模块”

    问题描述:在原理图中选中一个模块时,在layout下删除此模块时有单个电阻封装无法删除,提示"复用元素无法修改,首先打散复用模块". 经过实际操作,在ECO模式下,在没有加复用模块 ...

  4. SQL Server删除时提示需要支持文件(sqlsupport.msi)

    (版本为SQL Server 2008 R2) 问题如图 此文件可在安装程序所在文件夹内找到,路径X:SQL 2008\2052_chs_lp\x64\setup\sql2008support 选择后 ...

  5. 上传文件时提示系统找不到文件

    场景决定需求,需求产生方案,方案产生原理. 现在就是遇到个问题就是获取到问题在获取一个配置文件中的路径时提示系统找不到指定的路径,其实就是项目部署新环境后没有创建配置的的目录. 下面通过一个例子演示如 ...

  6. springboot项目打包时提示“程序包xxx不存在,找不到符号

    springboot项目打包时提示"程序包xxx不存在,找不到符号" springboot多包工程,在使用maven进行打包的时候,一直提示"程序包xxx不存在,找不到符 ...

  7. 基于javaweb的慢病报销管理信息系统(java+mysql+jdbc+servlet+jsp)

    基于javaweb的慢病报销管理信息系统(java+mysql+jdbc+servlet+jsp) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/m ...

  8. servlet jsp 经典总结

    如今,通用的浏览器取代了个性化的客户端,HTTP协议取代了个性化的协议,通用的ServerApp(Web服务器)简化了服务器端的开发. 1.软件的三种架构(了解) (1)主机.终端 a,特点:主机负责 ...

  9. java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag

    开发工具:IntelliJ IDEA for Mac 开发项目:struts2-demo 构建工件:Maven 问题描述:在 jsp 中使用了 jstl 标签 <c:forEach>,浏览 ...

最新文章

  1. 5G 对无线通讯芯片产业链的影响
  2. oracle 基础1
  3. JSON序列化(stringify)对象时排除某些属性的两种方法
  4. 使用DELPHI编写一个小的控件
  5. 9个高招,让企业WiFi速度飞起来!
  6. icoding复习6 图
  7. mac 用户 文件夹 权限_Mac视频播放软件推荐
  8. 第四周Java学习总结
  9. 拓端tecdat|数据感知游客的森林公园游憩需求
  10. 通话时自动中断音乐播放_您知道用户在何处以及为何中断通话吗?
  11. ensp服务器配置文件,ensp配置web服务器
  12. 安全私人云储存时代 H3C Magic M2脱颖而出
  13. xls与csv文件区别
  14. 驯服最难以捉摸的野兽──创新
  15. 【PWA学习】4. 使用 Push API 实现消息推送
  16. 【CG物理模拟系列】开篇:介绍(下)
  17. 二战企*查*查-企业-数-据爬虫
  18. 英语语音篇 - 看词能读
  19. 百宝箱-Rime配置
  20. 国科大数字图像处理(复习与整理)

热门文章

  1. vue接收jsp发送的post请求_vue与后台交互之post用法
  2. python操作系统课程设计_操作系统课程设计.pdf
  3. Python:isinstance()和type()
  4. python 图像处理_Python常用库-Pillow图像处理
  5. 有没有比python更简单的语言排名_编程语言4种更快更简单实现Python数据可视化的方法...
  6. python 多进程 调用模块内函数_进程创建fork()和multiprocessing模块Process类
  7. vue v-html图片chubu,「Vue」v-html生成的图片大小无法调整的解决办法
  8. OpenShift 4 之AMQ Streams(2) - 用Kafka Connect访问数据源
  9. OpenShift 4 之Kafka(1)-部署Strimzi Operator运行Kafka应用
  10. OpenShift 4 之Istio-Tutorial (9) 访问限流