使用注解来开发SpringMVC
因为原生SpringMVC的配置的繁琐,所以可以依靠注解来配置开发SpringMVC
在原生的配置中需要在SpringMVC-servlet.xml中分别配置
处理器映射器
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
处理器适配器
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
如果使用注解开发的话就不需要在进行处理器映射器和处理器适配器的配置只需要进行视图解析器的配置,他们将有这三行代码代替且无需在进行Handler的配置
<!-- 自动扫描包,实现支持注解的IOC -->
<context:component-scan base-package="com.zhangguo.springmvc01" />
<!-- Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!-- 支持mvc注解驱动 -->
<mvc:annotation-driven />
SpringMVC-servlet.xml
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 自动扫描包,实现支持注解的IOC -->
<context:component-scan base-package="com.zhangguo.springmvc01" />
<!-- Spring MVC不处理静态资源 -->
<mvc:default-servlet-handler />
<!-- 支持mvc注解驱动 -->
<mvc:annotation-driven />
<!-- 视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/view/" />
<!-- 后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
web.xml和原生的没有区别
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<servlet>
<!--名称 -->
<servlet-name>springmvc</servlet-name>
<!-- Servlet类 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 启动顺序,数字越小,启动越早 -->
<load-on-startup>1</load-on-startup>
<!--关联SpringMVC的配置文件-->
<init-param>
<!--SpringMVC配置参数文件的位置 -->
<param-name>contextConfigLocation</param-name>
<!--默认名称为ServletName-servlet.xml -->
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
</servlet>
<!--所有请求都会被springmvc拦截 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--/*也是拦截所有请求,但包括jsp,但在SpringMVC.xml中已为url添加jsp后缀,会产生死循环-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
在.java中就要依靠注解 @Controller 和 @RequestMapping
分别和SpringMVC-servlet.xml产生联系形成组件
和产生url与视图直接形成联系
而@Controller进一步的解释:
代表这个类会被Spring接管,其类下的所有的方法如何返回值是String类型并且有
具体页面可以跳转那么就会被视图解析器解析
而Controller的方法中return出去的字符串也就为前端视图的地址
然后根据SpringMVC-servlet.xml中进行前缀和后缀的拼接来获得URL
如果没有找到则会报'404'
package com.zhangguo.springmvc01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/Hello")
public class HelloWorld {
@RequestMapping("/h1")//真实路径为 /Hello/h1
public String HelloController(Model model) {
model.addAttribute("msg", "Hello Spring MVC!");//视图中msg节点可直接取到此值
return "test1";
/*控制器相较于原生方式也简化许多
ModealAndView mv = new ModelAndView();
mv.addobject("msg","Hello Spring MVC")
mv.SetViewName("h1")*/
}
}
在代码中 return"test1"的默认访问方式为转发,
如果想要重定向访问的话只需要加上redirect:
return "redirect:/jsp/test1.jsp"
注意:用了redirect和forword就不会走视图解析器,就需要手动把前缀和后缀拼接上