关闭

SpringMVC的近期小结

84人阅读 评论(0) 收藏 举报
分类:

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

0
0
查看评论

近期小结

开学来都一个多月了,感觉什么好象都没做,倒是也没闲着,但现在的心态和本科时的心态完全不同了,总在思考我们的人生,说得夸张一点就是我们人生的意义吧,呵呵,不知道是不是到我们这个阶段的学生都在经常思考这个问题,问了几个同学,似乎都有这方面的思考,但很少具体的做自己的人生规划,至多也是很随便的计划一下近期...
  • henry_dx
  • henry_dx
  • 2008-03-22 11:01
  • 233

我近期的目标

感觉很久没有来csdn来了,昨天在sina blog上写了一篇心情,挺舒服的。前几天因为要忙可恶的课程设计,没有时间来更新blog,也没有时间来亲笔写,十分的惭愧。马上就暑假了,我也要去祖国的首都去看看,更是加大了我的愧疚感。事情总是有些事于愿违。希望自己能挺下来。前一段日子玩linux,玩make...
  • beta2
  • beta2
  • 2006-07-03 13:57
  • 1604

近期面试小结

Tecent: 聊项目。 视图的生命周期: init-初始化程序viewDidLoad-加载视图viewWillAppear-UIViewController对象的视图即将加入窗口时调用;viewDidApper-UIViewController对象的视图已经加入到窗口时调用;viewWill...
  • SkySuperWL
  • SkySuperWL
  • 2016-08-31 09:35
  • 203

CNN的近期进展与实用技巧(上)&&人脸识别简史与近期进展

前言大神写的总结文章,转来看看CNN的近期进展与实用技巧(上) 人脸识别简史与近期进展
  • hmxiaobao
  • hmxiaobao
  • 2016-05-03 21:05
  • 510

近期语法使用小结

12、void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。 memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的...
  • jingzhewangzi
  • jingzhewangzi
  • 2014-09-26 22:58
  • 464

近期MySQL升级小结

一些笔记
  • nirendao
  • nirendao
  • 2016-11-22 22:43
  • 291

近期小结(2013.5.27~2013.6.23)

一段比较忙碌的时间总算过去了,但是貌似也要迎来下一个忙碌的时期了。         这段时间主要就是在修改毕业论文,毕业论文很烦地改了又改,然后是毕业设计答辩。         论文初稿很早就写好了,但是修改了好久还...
  • kuangbin2009
  • kuangbin2009
  • 2013-06-23 10:39
  • 647

【2016-02-23】近期小结

1)如何在Action或Servlet中获得webRoot下的文件的File对象? HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_...
  • qq_18875541
  • qq_18875541
  • 2017-04-06 16:07
  • 68

近期问题小结

前段时间工作上的事情太多了,终于搞定了PVR,这段时间太清闲,于是又拿出自己的板子玩。总结下这段时间的一些笔记,备忘。 主要遇到的问题有:1.svc: failed to register lockdv1 RPC service (errno 111).mount: mounting 19...
  • lqrensn
  • lqrensn
  • 2011-06-11 13:46
  • 1273

近期小结( ——2013.8.16)

慢慢地一个暑假都快过去了。貌似一个暑假也没干到什么事情。这个博客也好久没有更新了,好久没有写总结了,T_T.......      这个暑假一直呆在学校,感觉连回家的时间都没有。7月初也就是在学校办理毕业手续,参加毕业典礼,和一些同学吃散伙饭,之后领了毕业证和学位证,...
  • kuangbin2009
  • kuangbin2009
  • 2013-08-16 19:20
  • 543