SpringMVC的近期小结

首先使用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是否生成

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boom_man/article/details/79280937
个人分类: Java-Web应用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭