首先使用Spring和SpringMVC编写项目
第一步:配置Spring和SpringMVC的环境,也就是项目启动时Spring和SpringMVC要起作用
目标:web.xml中
1.Spring的配置
首先配置Spring的启动,Spring需要随着Web项目启动或者Servlet进来时,Spring需要存在。
随着web启动Spring需要启动就使用listener方式:Spring配置的方式有3种,我也只学习和使用了其中一种listener方式
如下:
<listener>
<description>Spring的监听器</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Spring beans文件配置的地址-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
listener和context-param配置完成后,在项目启动后为加载到ServletContext中
注意点1.ContextLoaderListener继承自ContextLoader启动后会在上下文即ServletContext中找到contextConfigLocation取出其中的值
即我们的applicationContext.xml
注意点2.classpath:和classpath*:的区别:classpath*
范围广会从导入的jar包中去找,因为有些jar包会有默认配置过的xml
以上Spring的随web项目启动就配置好了
2.SpringMVC的配置
首先SpringMVC的目的是为了处理请求的,对请求进行拦截分析是否是我们需要处理的对吧,然后找到Controller或者Action去执行其中代码,返回ModelAndView和视图解析器(JSP-JavaServer Page 或者thymeleaf等)然后范围给前端,大致过程是这样,
所以他是一个Servlet毋庸置疑!!所以开始配置SpringMVC
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<description>spring mvc 配置文件</description>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- / 拦截所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
注意点1.:SpringMVC的配置过程中 init-param是通过get和set方法对其中的参数进行配置他和Spring的listener不同,虽然名字相同哦.所以相应的你还想修改DispatcherServlet的其他值也可以去他的当前类或者父类中找到,配置即可
注意点2.SpringMVC的HandlerMapping在使用过程分为两步 1.注册 2.查找 SpringMVC是一个Servlet 他的启动也就是DispatchServlet启动时间会因为配置有所不同,我们在其中配置load-on-startup
即可在web启动时就进行Servlet初始化过程,即注册过程
注意点3:Servlet配置过程中必须配置ServletMapping即拦截模式,这里一般配置为/
,也有配置为/*
,那么他们有什么区别呢?
/
优先级低于/*
,
那么优先级如何排序
/servlet
具体优先级最高
/*
会拦截所有请求
*.do
拦截后缀
/
没有找到进这个
这个问题仔细说会在下面进行
一个url到前端页面究竟是怎样的!关于这个问题我已经写了4篇左右博客了,每次印象都会更加深刻,在这里谢谢龙哥,~v~
首先发起一个请求(即请求一个资源(可能是静态or需要代码处理后的)),知道有两种就行
发起请求就要有人处理这个请求对不对,那么谁处理呢!
请求是服务器来处理的,具体来说是服务器上的tomcat或者iis服务器对吧,对应的是ip地址+端口
我们前台请求如果不加端口,http是80,https是443,那么我们一般使用的是域名,怎么转变成ip地址呢
域名只是为了好记,域名是由域名提供商提供的,他们记录了域名的ip地址。每一次都问他是不是很烦?那么步骤如下
1.浏览器缓存
2.系统缓存(etc,有的进行host欺骗,说多了,你们不要干坏事~v~)
3.路由器缓存
4.DNS缓存
5.域名服务器
进行递归查找,找到就不找了,找不到页面就显示
360显示如下:
您访问的网页出错了!
网络连接异常、网站服务器失去响应
那么找到了呢?接着说
请求中的除host+port剩下就是uri(统一资源定位符)
统一资源定位符就是为了找到资源
Tomcat服务器中的web.xml中配置了Servlet就是为了判断请求是谁,他要找谁,找的顺序是什么,这里就会涉及到刚才的/*
or/
1.如果是静态资源,img
,js
等他该怎么找呢?假设现在SpringMVC即DispatchServlet的servlet-mapping配置为/
他的优先级是最低的,他会先找web.xml中有没有配置如下:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
有?那就走的是defaultServelt处理静态资源 (但是资源一般都不放在webapp目录下都放在WEB-INF目录下,所以他找不到的)
没有?那就去DispatchServlet中找静态资源,看有没有如下:
<mvc:resources location="/image" mapping="/**"/>
有:返回!
没有:404!
/*
会在解析器中找目录下的.jsp找不到
所以综上所述用/
如果是Controller请求
我们找到handler他会调用Service方法….很多很多,然后返回一般是两种吧,String or ModelAndView
如果是ModelAndView会找到他对应的jsp,进行渲染然后返回
如果是String返回即可
前端接收到Html之后:
会将Html部分解析成DOM树
CSS部分解析成DOM树
CSS+HTML 为Render Tree 渲染树,因为加上css样式后可能有些就不显示了
下面进行布局和绘制
在自上而下 深度遍历的过程中 涉及到link,script,img会进行异步加载
涉及到js问题就来了
如果在head中且没有defer or onload话操作了dom就会报错
js的执行顺序
按自上而下执行
优先外部后内部
defer执行页面是否加载完毕
onload页面是否加载完毕
read 页面dom是否生成