SpringMVC简单学习笔记

来源:互联网 发布:软件测试方法有哪些 编辑:程序博客网 时间:2024/05/21 09:11
                                          
Spring MVC学习简单笔记(一)
一:SpringMVC的几个核心的总结:
MVC——(Model-View-Controller)框架C层的作用就是:将Web请求封装成数据对象,调用业务逻辑层来处理对象,返回处理结果及相应的视图层给用户作为请求的响应.
在搭建的Spring MVC的时候和Spring的jar包共用,它是SpringFrameWork的后续产品.这里的一些包
在spring 的官方API 文档中,给出所有包的作用概述,现列举常用的包及相关作用:
org.springframework.aop-4.1.5.RELEASE.jar :与Aop 编程相关的包
org.springframework.beans-4.1.5.RELEASE.jar :提供了简捷操作bean 的接口
org.springframework.context-4.1.5.RELEASE.jar :构建在beans 包基础上,用来处理资源文件及国际
化。
org.springframework.core-4.1.5.RELEASE.jar :spring 核心包
org.springframework.web-4.1.5.RELEASE.jar :web 核心包,提供了web 层接口
org.springframework.web.servlet-4.1.5.RELEASE.jar :web 层的一个具体实现包,
DispatcherServlet也位于此包中。
SpringMVC的工作原理
1:这个从Servlet的容器Tomcat启动开始谈起了(这里使用Apache下的Tomcat服务器来说的,也可以使用其他的服务器,原理是一样的).Web项目的部署和启动说起了,首先会加载web.xml读取加载信息,这里根据web.xml的配置加载前端控制器--DispatcherServlet,在加载的时候会完成一系列的初始化的操作。
(2 )根据servlet 的映射请求(.do 请求),并参照“控制器配置文(这里要说到映射器)
件”(即spmvc-servlet.xml 这样的配置)文件,把具体的请求分发给特定的后端控制器进行处理(比
如上例会分发给HelloWorld 控制器进行处理)
(3 )后端控制器调用相应的逻辑层代码,完成处理并返回视图对象( ModelAndView )给前端处理器。
(4 )前端控制器根据后端控制器返回的ModelAndView 对象,并结合一些配置(后面有说明),返回一
个相应的页面给客户端。
(1):总司令--DispatchServlet:(前端控制器)现在的Front Crotroller模式最主要的作用就是:将用户的各个请求分发给后端处理器;(一个Servlet就处理了所有的请求)与SpringIOC容器来集成更好的使用Spring,和Spring无插件的集成.使用Bean来管理对象,将*.do的请求分发给后端处理器.(可以配置多个)
在SpringMVC中配置DispatcherServlet在web.xml中配置:(前端控制器)
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
<!-- 分发*.do的请求给后端处理器--login.do,request.do-->
</servlet-mapping>
<!-- Servlet:是单例的,-->
<!--
实例化:用户请求;
:load-on-startup;
-->
<!-- 启动顺序,tomcat一启动就实例化该Servlet,不会等用户请求才实例该Servlet,-->
接下来就是SpringMVC-servlet.xml(这里的一个命名规则是:servlet-name-servlet.xml);这里有一点有说清楚的,这个SpringMVC-servlet.xml要放在WEB-INF下和web.xml中在同一目录.(这里是没有使用项目管理工具Maven的)
这个里面的配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!--配置映射处理器-->
</beans>
二:(ModelAndView):这个对象就是包含视图和业务数据的混合对象;知道返回相应的页面; ModelAndView mav=new ModelAndView("hello.jsp");
三:HandleMapping:(作用:将用户的请求映射到控制器上)映射处理器
1简单的说明一下HandleMapping:
在SpringMVC中使用映射处理器可以把web请求映射到正确的处理器上,为了开发方便Spring内置了许多的映射器,为了良好的扩展性,还容许用户自定义映射器;
下面来说一下两个最常用的映射器:
BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping
说明一下继承关系:AbstractHandlerMapping的
(1)映射处理器都能把请求传递到处理器执行链接,(HandlerExecutionChain)上,并且处理器执行链接必须
包含能处理该请求的处理器(实质就是处理器链上动态添加了了此处理器,可以结合filter工作原理理解),而且处理器链接也能包含一系列拦截器。
这里讲解SimpleUrlHandlerMapping的使用规则:
首先在SpringMVC-servlet.xml中配置bean
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop name="/lx/*/login.do">login</prop><!--这里说明一点只要是login.do的请求便能够访问到login的控制器中去,这里是简单基础的写法,如果业务复杂的就可以用通配符来写的-->
</props>
</property>
</bean>
还可以通过这样的写法来写:ant的写法来完成的;
<property name="mappings">
<value>
/lx/*/login.do=login
</value>
</property>
<!-- 这里是不使用注解的方式 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/lx/*/login.do">lxlogin</prop>
</props>
</property>
</bean>
<!-- 配置后端控制器 -->
<bean id="lxlogin" class="com.lx.LxLogin" ></bean>
接下来编写后端控制器这里使用注解的方式
启用注解:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>
组件扫描的定义:在SpringMVC中使用如下配置
<context:component-scan base-package="com.lx"></context:component-scan>
在这里使用包扫描来指定一个路径,  指定一个包路径,spring会自动扫描该包及其子包所有组件类,当发现组件类定义前有特定的注解标记时,就将该组件纳入到Spring容器中,等价于原来的XML配置bean的功能。
常见的自动扫描注解标记有:
@Controller:控制层组件注解;
@Service:业务层组件注解;
@Respository    持久化层组件注解;
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性
1、 value, method;
value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method:指定请求的method类型, GET、POST、PUT、DELETE等;

2、 consumes,produces;
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、 params,headers;
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestParam的注解:将Web请求和参数的绑定
@RequestMapping(value="/lxAOPlogin.do",method=RequestMethod.POST)
public String login(@RequestParam("username") String username,
@RequestParam("password1") String password,Model model)
model.addAttribute("username",username);
注释和注解的区别
1:概念的理解
注释:对代码的解释;
注解:对代码的标记,标记这些代码的有些特殊属性;(JDK1.5开始的)例如SpringMVC,MyBatis中就使用了:@Controller @RequestMapping @RequestParam,@Service--元注解.编译时注解,运行时注解
注解本身就是一种标记,不具备任何的逻辑,如果要具有某项功能的时候就要写代码来读取注解的值来完成相应的操作的。例如SpringMVC中的包扫描.
@Documented是描述注解的API.
关于注解在java.lang.annotation中();
2:定义自定义注解的方式:@interface这里使用
@Target()来做目标,来做类,方法,属性;
@Retention()表示注解的周期;(SOURCE,CLASS,RUNTIME);
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
将使用在方法级别的使用在类上就包这个错误;
The annotation @RequestMapping is disallowed for this location
例如最常用的@Override就是重写父类中的方法的注解.(抛砖引玉)
四---SpringMVC的视图解析图
1:先说在SpringMVC-servlet.xml中配置使用SpringIOC的依赖注入的方式管理:具体代码如下:这里的返回给用户的请求的结果视图的都是.jsp的;
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!--配置前缀,如果是在Web-Root下 就可以使value="/"这里的“/jsp/"是说在Web-Root下的jsp文件夹下,不建议在WEB-INF下建立文件夹入page就在访问页面的时候就抱404的,-->
<property name="prefix" value="/jsp/" ></property>
<!--配置后缀这里的.jsp就组装好了-->
<!--在ModelAndView的返回对象是返回一个字符串就会经过前缀和后缀的添加就会访问的对应的页面了-->
<property name="suffix" value=".jsp" ></property>
</bean>
Web开发中 如何有效的访问静态资源解决方法
1需求分析,在前端控制器的Servlet配置的拦截器的请求格式是/,意味着所有的静态资源都要进入到前端控制器的,那么来解决自己的网页如何访问到这些静态资源呐,要知道这些静态资源是不在一个文件夹下 的。
2:解决思路分析:这里就使用的SpingMVC中的mvc了来看案例:这里的拦截访问解决思路是不按照文件夹的目录来配置,而是按照静态资源的后缀来配置的,后缀的种类是有限的,这样我想应该是比较便捷的吧.
<!--静态资源映射这里是在WEB-INF下的,这里的/**/*就是针对所有的目录的说的,可以理解一下Spring配置事务时,配置通知的格式的-->
<mvc:annotation-driven/>
<mvc:resources location="/" mapping="/**/*.css"/>
        <mvc:resources location="/" mapping="/**/*.js"/>
        <mvc:resources location="/" mapping="/**/*.html"/>
        <mvc:resources location="/" mapping="/**/*.png"/>
        <mvc:resources location="/" mapping="/**/*.jpg"/>
        <mvc:resources location="/" mapping="/**/*.gif"/>
这里的都是一些最简单的总结了,以后再修改,大神不喜欢多给小弟提提意见哈。

0 0
原创粉丝点击