javaEE009.04 book商城_修改book(未整合修改和添加功能)、所有servlet页面报错的原因和解决办法、转发不能用但是重定向能用的问题解决

系列文章目录

前言

前面讲了删除和添加,我们一提到就要能够想到删除和添加的区别
那么区别是什么呢
区别就是添加需要用户输入数据(你得给他一个输入数据的页面)
删除则不需要用户已输入数据
我们这里的修改,需不需要用户输入数据呢?
需要,所以我们既可以单独给它一个修改的页面,也可以和添加功能一起共用页面

一、修改book(未整合修改和添加功能)

如何把值带到修改页面

先不整合,这样比较清晰,本质上是要整合的,后面我们和添加功能整到一起
下面说说具体实现

在这里插入图片描述
下个问题,点击修改按钮的时候,不仅要跳转页面,还需要把现有的数据带过去
数据怎么带过去
两个办法
1、跟之前一样传参数
但是要传5个参数
在这里插入图片描述
但是这样,参数实在太多了,对于字段很多的表,操作是不友好的,并且地址栏对长度是有限制的,也浪费空间
我们看看怎么优化
我们能不能传一个数据就都传送过去呢?
实际上我们只要传一个bookId过去就行了
通过bookId可以调用底层的接口,全部数据都可以查出来
在这里插入图片描述

我们看代码里面,应该要有一个getbookById( )
但是现在没有,那么我们就要给它加一个
在这里插入图片描述

最后在修改页面取值就行了
在这里插入图片描述
最后就是真正进行修改操作了

修改操作

跟之前的添加和删除差不多,依次添加三层

在这里插入图片描述
servlet(表现)层
在这里插入图片描述
这里注意 updateBook ( ) 里面传的值的 Book
如果一个一个参数传就太不专业了,没有使用到面向对象,能使用面向对象尽量使用面向对象,能少传值就少传值
返回值可以 void 也可以是 int 其实我建议使用int 这样执行结果 如果 是0 的话 就说明没有返回数据,也就没有修改
void 只是执行了,执行成功没有实际上是不知道的,所以我们返回值设置成 void

后面就很简单了,和之前的逻辑一样,接口,实现类

dao层 返回值 可以自行改成int
dao层:
在这里插入图片描述
注意千万不要漏掉 where id=?,否则全部改了就尴尬了
在这里插入图片描述
service层
在这里插入图片描述
在这里插入图片描述
servlet层
在这里插入图片描述

二、所有servlet都报错的原因和解决办法

捣鼓来捣鼓去,突然玩奔了,弄了一下午
在这里插入图片描述
弄了一下午,有点想哭
最后我总结出出现这几个原因,一定要定位在这几个原因
1、
1、可能是Tomcat没有配置好,才会出现继承 HttpServlet都会报错
不要瞎找原因了,坑我都踩过一遍了

2.5版本 没有注册,可能之前删了服务器,又重新配置了,之前的就没有注册了

说说我的详细解决办法
鼠标右击项目工程——》Build Path——》点击comfigure Build Path进入----->选择java Bulid Path------>在左边点击Libraries--------->选择Add Librar

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决完成
在这里插入图片描述
打开Properties->java Bulid path->Libraries->Add Libraries->Server Runtime,选择tomcat服务器,如果server Runtime里面是空的,是因为还没有添加服务器,添加运行时环境: Window->Preferences->Server->runtime Enviroment->add, 选择tomcat版本确定,这样工程中的 红色的浪线标记就不见了.

转发不能用但是重定向能用的问题

转发不能用但是重定向能用的问题,这个一般是被表现迷惑了
比如,用转发的时候,页面死活跳不过去,而重定向可以,单身重定向不能使用
在这里插入图片描述
在这里插入图片描述

了解一下 转发和重定向的区别
1.转发 request.getRequestDispatcher("/pages/sj-makeFriends-index.jsp").forward(request, response);

2.重定向 response.sendRedirect(request.getContextPath()+"/pages/sj-person-homepage.jsp");
转发和重定向都可以使得浏览器请求转向,首先转发是服务器内部的转发,所以在写目标路径是不需要工程名字,
如1,并且转发后,浏览器的地址栏隐藏了转发的目标地址,增强了网站的安全性,通过转发传递资源时可以使用
request.getRequestDispatcher("/pages/sj-makeFriends-index.jsp?method=type").forward(request, response);这种拼接
的方式传递参数,也可以通过,向request域中添加属性的方式传递参数,request.setp…(“method”,methodValue)这种形式传递。
重定向是服务器告诉浏览器去访问那个资源,因此浏览器地址栏会改变,而且不能利用向request域添加属性的方式传递参(request.setp…(“method”,methodValue),request对象生命周期是一次请求,因此重定向会丢掉添加的属性,这是一种直接
访问目标资源的方式。

所以重定向是不能使用域的
所以上图里面我们必须使用转发,而转发又报错了,首先我没要明确一个条件,就是重定向是可以的
所以肯定转发也是可以的,一定是域出了问题
注释掉域就可以了,然后再想办法解决
写代码解决并不难,但是定位不到问题所在才是最重要的,如果问题原因都定位不准,那么只会做很多无用功,浪费时间
在这里插入图片描述
这样就可以把问题定位在前端了,去前端找问题
在这里插入图片描述
我们看bean里面的Book类,确认确实是这个问题
在这里插入图片描述
改正之后,成功展示出了所有数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值