javaweb
一、servlet
servlet是一个容器,tomcat是一个servlet容器(服务器)。servlet单例,线程不安全,(尽量不要再sevlet中定义成员变量和判断)。
客户端请求服务端,服务端响应页面。用户点击提交表单,通过action("jsm")(指向服务器端的一个组件)携带表单的数据请求add(java类addServlet)组件。jsm调用dao,里面有一个add方法,通过add方法交互持久层。
servlet:调用用户发给的数据。调用dao中的方法完成添加。在控制台打印。
客户端发送请求,服务端把请求封装成request。通过request就可以获取客户端的信息。
1.如何让jsm和addServlet对应起来,可以写xml文件。<servlet-mapping>就是映射器。
2.用户发送请求action=jsm
3.xml中找url-pattern = /add
4.然后找servlet-name = addServlet
5.在找和mapping中对应的addServlet
6.最后找全类名
7.最后tomcat执行addServlet中的请求方法。
一个servlet可以对应多个servlet-mapping,在servlet中获取到底是哪一个url请求过来的,执行不同的业务逻辑
如何提高相应速度,设置servlet的初始化时机,可以通过<load-on-startup>来设置数值越小启动越靠前。
post需要设置中文乱码get不需要(tomcat8)
servlet生命周期:对应初始化initial(),service(),destory()。
二、HTTP协议
客户端发送HTTP请求。
Http请求响应包含请求和响应
请求:
1.请求行:请求方式,请求地址,请求的协议版本
2.请求消息头:包含了很多信息,比如我的浏览器型号,我能接受的内容的类型版本,以及cookie等。
3.请求主体:三种情况,get方式没有请求体,但是有一个queryString。post方式有请求体,form data。json格式有请求体request payload。
响应:
1.响应行:协议,响应状态码,响应状态。
2.响应头:服务器告诉浏览器响应的内容(媒体信息,编码,内容长度),tomcat的信息。
3.响应主体:响应实际的内容(比如add.html页面时,响应的内容就是<html><head><body><form>....)
什么时Http无状态?
服务器无法判断两次请求是同一个客户端还是不同的客户端发过来的。
带来的现实问题。
第一次请求将商品添加到购物车,第二次亲求是结账。如果服务器无法区分是同一个用户,那么就会结错账。
如何解决?
通过会话跟踪技术来解决无状态的问题
会话跟踪技术
客户端第一次发送请求给服务器,服务器会看看客户端有没有携带session信息,如果没有,就创建一个session,并分配给客户端一个sessionID。
客户端下一次请求,服务器就会根据客户端携带的ID知道它是第二次请求,以此来区分是同一个用户。
三、会话
常用API
req.getSession //获取当前会话没有就创建
req.getSession(false) //没有就不创建
session.getId //得到当前id
session.getMaxInactiveInterval() //不操作时的会话时长,默认30分钟
什么是保存作用域?
session保存作用域是和具体的某一个session对应(ID),保存一个键值对。
常用API:
session.setAttribute(k,v)
session.getAttribute(k)
服务器端内部转发和重定向
客户端并不知道有转发,地址栏仍然是demo06
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2dRJnaYG-1649760061365)(C:/Users/Jsm/AppData/Roaming/Typora/typora-user-images/image-20220308085209153.png)]
客户端重定向 响应
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdP6mS0W-1649760061366)(C:/Users/Jsm/AppData/Roaming/Typora/typora-user-images/image-20220308085330001.png)]
四、Thymeleaf视图模板技术
渲染视图,把数据跟页面结合起来。
五、四大作用域
request //一次请求有效,servlet1设置,在servlet2中获取不到。因为客户端要请求两次
session //在会话时间内有效。
applicaton //不同客户端都能请求到。除非tomcat停掉
六、中央控制器
七、IOC
八、Filter
新建类实现Filter接口,然后实现其中的三个方法。
配置注解或者写xml。
过滤器链,每个过滤器过滤的内容不一样。执行的顺序根据字母排序。如果是在配置文件中则谁先配的先执行谁。
事务管理不能以dao层管理,要在service层
``
新建类实现Filter接口,然后实现其中的三个方法。
配置注解或者写xml。
过滤器链,每个过滤器过滤的内容不一样。执行的顺序根据字母排序。如果是在配置文件中则谁先配的先执行谁。
事务管理不能以dao层管理,要在service层