最近看了“跟开涛学 SpringMVC”,想自己总结一下,算是复习了,下面介绍的是使用spring3.x注解方式新建一个web工程的helloword。
为什么要使用spring的注解?
1、可以大大减少spring的配置(抛弃了繁琐的的spring配置)
2、不用去继承框架的某个接口,这样就降低了与框架的耦合(低侵入)
基于注解的spring MVC
1、创建一个web 工程
2、在web.xml文件中配置如下内容
<servlet> <servlet-name>myspring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myspring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
备注:默认是在WEB-INF目录下查找myspring-servlet.xml文件,前面的myspring需要与<servlet-name>myspring</servlet-name>对应起来。很多视频或者资料说是跟工程名对应,这个是不正确的 。
如果有多个配置文件,则可以使用“,”或则“空格”分隔,也可以使用正则表达式来匹配多个配置文件,例如:
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/servlet1.xml, /WEB-INF/servlet2.xml, /WEB-INF/servlet2/ss*.xml </param-value> </context-param>
备注:添加上面这个配置,则是自定义配置文件的位置,当然WEB-INF目录下查找myspring-servlet.xml文件还是会自动加载的,彼此相互不影响。
由于自己在开发的过程中发现在默认的配置文件中(myspring-servlet.xml)中写一些spring的配置信息无法识别,因此,将spring的配置不写在这个默认的配置文件中,而是指明其他的具体文件中。
3、指定显示页面的类型,和页面存放的位置
<!-- ViewResolver 视图解析类--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
目的是指明显示的页面在/WEB-INF/jsp/目录下面,并且是以jsp结尾的文件。
备注: InternalResourceViewResolver 支持JSP和JSTL的技术支持,如果想使用JSTL则需要引入相关的jar包。
4、引入spring框架的处理包
<!--Spring3.1开始的注解 HandlerMapping --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> <!--Spring3.1开始的注解 HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!--线程安全的访问session --> <property name="synchronizeOnSession" value="true" /> </bean>
5、创建一个“控制器”,
5.1 需要在类上添加@Controller 注解,表示这个类是一个控制器类
5.2 里面的方法需要添加注解@RequestMapping(value = "/hello"),指定的访问路径
@Controller public class HelloWorldController { @RequestMapping(value = "/hello") public ModelAndView helloWorld() { //1、收集参数 //2、绑定参数到命令对象 //3、调用业务对象 //4、选择下一个页面 ModelAndView mv = new ModelAndView(); //添加模型数据 可以是任意的POJO对象 mv.addObject("message", "Hello World!"); //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面 mv.setViewName("hello"); return mv; } }
在spring配置文件中把该类交给spring容器管理
<bean class="adtec.function1.controller.HelloWorldController"/>
备注:如果地址栏输入http://server:port/project/hello.do则会执行helloWorld()方法,处理完该方法之后页面会跳转到前面配置的/WEB-INF/jsp/hello.jsp页面,在页面中使用${message},则会把Hello World!打印出来。
<!-- 切记,这不是必需的!除非你把注解的 Controller 一个个的注册到容器中。相信大家还是喜欢用 context:compnent-scan 吧。不要认为在 Spring MVC 中才提到 context:component-scan,就认为它只能扫描 @Controller。component-scan 默认扫描的注解类型是 @Component,不过,在 @Component 语义基础上细化后的 @Repository, @Service 和 @Controller 也同样可以获得 component-scan 的青睐 --> <context:component-scan base-package="org.zachary.spring3.anno.web" />
在浏览器地址栏中输入:http://localhost:8080/myspring/hello.do