xml文件
JSoup解析xml和html(可以爬虫)
这里说错了java框架解析web.xml是内置隐藏解析细节的,而 jsoup是给我们程序员用的
Document继承Element继承Node
XPATH是类似JSTL这样的辅助解析技术
浏览器与服务器的交互![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e0db7c1d105f85ff19be1dd582514794.png)
常见Web服务器软件
tomcat安装卸载启动及目录解读
启动
访问
启动报错与多tomcat应用启动
第一种报错
第二种报错也就是多tomcat启动端口占用
修改tomcat配置文件
tomcat项目部署
假设我们部署一个hello项目,新建了该文件夹并发入受访问资源
war包部署,将war包复制到webapps目录下,会自动解压;删除war包会自动删除项目
配置文件部署项目
不关闭服务器进行部署(热部署):将来不需要这个项目直接删除配置或者重命名变更为临时文件即可
IDEA集成tomcat测试项目(现在我们一般使用maven的pom集成的tomcat插件)
创建一个web项目
默认访问的是index.jsp可以配置修改默认访问的首页资源
热部署
Servlet:属于JAVAEE企业级应用规范(规范也可以叫接口),JDK整合服务器开发规范(变相整合了tomcat服务器接口Servlet,可以理解为依赖了tomcat接口的jar包)形成JAVAEE开发规范。
web请求过程
tomcat会创建Web容器然后查找请求的的类然后去执行它的Service方法,这个调用是Tomcat进行调用。Spring的@Controller注入对象过程其实也是把这些接口动态代理实现Servlet以便被远程访问
Servlet接口的几个方法
多个用户同时访问即多线程下,如果对象是单例都获取对象进行操作时的数据存在安全隐患所以在Servlet中类的成员变量只定义不修改
Servlet3.0及以上版本支持无Web.xml,注解配置![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a4681665f898f5302ee6e461bedd0ba0.png)
idea的tomcat服务器集成配置文件
实际idea会用这一份配置文件启动tomcat可以与实际tomcat的文件server.xml进行比较
当我们在ide为项目启动配置启动端口时这里的配置文件发生变化
在这个空间下是第三种部署项目的方式,daBase是项目存放路径对应idea左边侧边栏的项目目录结构
项目目录:一个是工作空间项目也就是代码区,tomcat部署web项目是编译后的out目录里的实际访问区
Servlet体系结构
GenericServlet隐藏了无用的init和其他一些方法,我们只要继承它就好
Http再继承GenericServle封装了判断请求方式的处理逻辑
GET提交(浏览器直接访问)
POST提交
浏览器访问Serivelt访问资源
HTTP协议、请求与响应
Request对象
服务器创建在系统进程中,监控请求,一旦有,就会把网络流信息序列化成对象Request(对象也可以看做是数据包但不完全是,因为忽略了method部分)在后台处理
request继承体系
request属于规服务器规范接口,由tomcat提供实现(javase——早期jdk javaee——后期jdk——补充服务器功能接口)
从request 里拿数据
get在请求头里通过getHeader即可,但post需要从请求体获取,用getReader读取字符流数据,getInoutStream获取前端上穿的一些流文件
通用型的方法
转发(服务器内资源转发)
登录案例
封装获取参数后的赋值操作对应Spring参数用对象接收时的情况
响应消息
响应头
响应体
还有这种图片的响应体
Response
重定向:
对转发的思考:当我们用上Spring 调用其他的controller服务时,我们不需要用request转发,因为都在spring容器中我们可以直接调用,当使用分布式的时候我们用httpclient发送请求并携带参数访问即可——相当于携带参数的重定向访问。
路径写法
服务器返回网页源代码给浏览器渲染的原理:浏览器通过write写这些源码进行渲染
输出字节数据
生成一个图片数据二进制字节数据返回页面(跟二维码道理是一样的)
点击切换图片
ServletContext(Spring容器封装的就是它)
域对象共享数据
资源访问
web下的资源访问
web环境下这两者等价了
web的web-inf下的资源访问
项目src目录下下的文件读取
文件下载
中文文件名不显示或解析异常的问题(原因是不同浏览器对文件名的解码方式不同,所以我们要根据请求头的浏览器信息来对文件名返回进行不同的编码)
会话
其实是不针对用户的情况下完成对客户端的识别。针对的是客户端,比如不登录情况下个性化设置了网页显示,将来我再次访问该网页,服务器就会获取设置的cookie进行对应返回不同的网页源代码流信息
第一次为本次页面浏览建立cookie——同源请求标记物
第二次访问时携带该cookie访问,让服务器认识“我”
访问CookieDemo资源获取到CookieDemo5的Cookie
Cookie案例
编码显示异常问题
Session
Cookie和Session都是会话存储技术,只是保存的地方不一样而已,Session依靠名为Jseesionid的Cookie区分客户端。请求到服务器默认就会返回给客户端一个这样的cookie
要想session不变,需要我们设置cookie持久化
Session数据不丢失
本地tomcat才能持久化,idea的工作空间的tomcat不行
idea为什么掩饰不出session数据不丢失(也会持久化,但是重启项目时它的工作空间目录会先删除work目录再新建,这是idea为了保证每次保证启动的项目都是干净的)
Session案例
JSP——JAVA SERVER PAGES(一个特殊的页面,JAVA代码的特殊表现形式,用页面展示代码运行的数据,也可以看做一个特殊的Controller)
当我们访问jsp,进入idea工作空间目录会生成一个work目录,tomcat服务器启动也有这个work目录
这个jsp目录存放编译后的class文件
实际上可以看成一个依赖的jar包,它会获取java代码的信息然后结合jsp的标签部分统一处理成网页源码流信息返回给页面
本质是一个Servlet,只有Servlet能接受网络请求
HttpJspBase重写Service方法这里叫_JspService(),这里封装了jsp的简化操作。总的过程就是把jsp——》jsp.java——》jsp.class——>封装了简化操作响应给客户端浏览器输出流
jsp脚本:本质是模板技术,模板——>网页源代码
jsp案例
JSP
配置错误展示页面
jsp的复用
JSEL标准标签库(外部依赖jar包的实现技术,方便jsp开发)
内置对象
MVC模式
替代jsp中出现大量java代码,只写少量的java代码的技术——el表达式+jstl表达式
这里el是对jsp语法的封装包括jsp的8大对象都做了封装,然后还新增了几个封装的对象
JSTL——JSP标准标签库(EL用于取值,jstl用于替代部分逻辑代码)
JSTL案例
web综合案例CRUD
过滤器(优先级最高的Servlet)
注解配置用@WebFileter
配置文件配置
拦截配置:
@WebFilter内的东西都可以用配置文件的方式替代
多个过滤器
过滤器案例
上面的代码要放行部分资源
监听器
如果将来要创建容器,使用Spring就是通过listener监听启动读取配置文件(这个逻辑被封装在框架内部了,翻看源码会有相应操作)创建容器包括数据库配置文件都初始进内存
配置文件配置listener
注解配置Listener
创建servletcontext时指定走这个监听器
配置的方式
注解的方式