写在前面
1.刚跟小yao交流一下说这块还是很像以前的jdbc的,那一个部分的crud。
所以我觉得可以对比来看看吧,都是小白理解------
2第一这块开始结合了前后端的东西,通过最重要的http这种协议来实现前后端的交互,不再是控制台小白了,所以说这么一想我觉得这块最重要的就是理解一下http里面的转发和重定向,另外一些具体细节(比如说绝对路径啊,相对路径啊),出现的bug可以一起分享一下
3.另外我觉得就是从技术的角度,理解一下业务的流程和细节。你如说你crud整完 ,高低应该给用户看一眼,再比如说,你删除的时候,高低问下用户是不是确认删除。
整体的知识性的定义
1.servlet的生命周期、几个重要方法的重写的关系(doget、dopost、service):
Servlet的生命周期包含了下面4个阶段:
1.加载和实例化
2.初始化–init()
3.请求处理–service()
4.服务终止–destroy()
service()方法的职责:核心方法
可以重写doget、dopost方法,默认访问service
service()方法为Servlet的核心方法,客户端的业务逻辑应该在该方法内执行,典型的服务方法的开发流程为:
解析客户端请求-〉执行业务逻辑-〉输出响应页面到客户端
2.转发和重定向的区别(包括绝对相对路径的问题):
转发就是不涉及到url,不会产生新的reuqest请求,那我理解就是转发到新的jsp页面里面,request直接内置了,你通过这个requset数据的绑定直接扔到,下一个新的jsp页面里面。
重定向:就是产生一个新的需求,这个需求还要通过xml去拦截一下,然后再走一个继承servlet的service。
我觉得其实本质都是一样的都是再进去一个servlet。
转发
request.setAttribute("persons",s1);
RequestDispatcher rd=request.getRequestDispatcher("showall.jsp");
rd.forward(request,response)
重定向
String url=request.getContextPath()+"/findall";
response.sendRedirect(url);
路径问题:是有相对与浏览器地址,还是服务器地址这种复杂说法。
我理解就是加/ 那就是绝对路径–得从8080来开始算
相对路径不加/从应用开始算。
我这里测试了一下,重定向的时候我直接加相对路径一点毛病没有。
String url="findall";
response.sendRedirect(url);
3.jsp的原理、加载执行过程(第一次和第二次)解决了什么问题:
转载:
https://blog.csdn.net/weixin_42529699/article/details/81303861
自己理解:
1.jsp–java servlet page 这么说就很清晰了,就是一个servlet只是放在前端里面融合了一下
2.加载分第一次加载和第二次加载:第一次的话会编译成class文件,再执行service方法。如果第二次没有更改代码的话直接调用service方法就ok了。service方法在jsp里面隐藏了,包括各种输入输出流都是简化了,然后内置的request等对象等等。。。。
3.解决问题:就是能够实时动态展示,不至于写死在后端里面。
4.新手问题:具体怎么融合进去,当时在for里面写前端表格的问题给我愁坏了。
4.整个web框架-从浏览器到服务器再到数据库
tomcat就是服务器应用
层次分析
1.前端
最前面的是各种页面,用来与客户互动,请用户进行输入,对用户的命令进行反馈。这里面前期用的是html,然后一键表格发送。
一些要说的
1.隐藏ID,我觉得不应该让客户更改信息的时候把自己ID改了吧,毕竟在数据库里他也是是主键,不能动啊
<input type="text" value="<%=request.getParameter("id")%>" hidden="true" name="id">
2.删除提示
2.service层
我的理解就是service层有多少,那么dao层就有多少功能点,因为比较简单清晰,这次我是把dao层所有功能封装到一起了,就是增删改查功能点都在一起了。
service层我觉得是这一部分的重点,从刚开始你要从request上面拽下来用户发过来的信息,再到回传的时候,进行数据绑定,转发dao层回传的数据给前端。后期涉及到重定向贴近现实需求。
service层的话实现的话,用的是继承HttpSevrlet类。也可以继承servlet类,先不讨论。
3.dao层
有前面jdbc扎实的底子,这一块可以说是最简单的。也有一部分细节问题。其实就是传参的问题,入口点参数要清晰。比如说更改信息这一块,一定要待着id一直带到dao层,带到数据库。
这时候,前端页面我设计的是隐藏了id.–前面有说–
4.不得不说的核心 web.xml
这个东西就相当于路口指挥的交警,指挥着请求的方向,告诉它到底去哪个servlet。很重要,很重要,很重要。
5.差点忘了的实体类和DBUTIL-也是很重要的,我们封装这两个,减少代码量。
service层的代码分享
查询
public class getperson extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter writer=response.getWriter();
List<person> s1;
Persondao persondao=new Persondao();
try {
s1 = persondao.getall();
//需要将绑定数据的request发送到指定的页面 ---绑定和转发
request.setAttribute(