一.手动配置方式
1.web.xml中DispatcherServlet控制器的的配置
SpringMVC也是一种基于请求驱动的WEB框架,并且使用了前端控制器的设计模式。前端控制器就是DispatcherServlet控制器,只要满足web.xml文件中的【url-pattern】的规则,这个请求就会交给这个前端控制器(DispatcherServlet),然而前端控制器在收到请求后自己不进行任何处理,根据相应的【URL的映射规则】委托给其他的页面控制器进行处理请求。前端控制器只作为一个统一的访问点,进行全局的流程控制。
contextConfigLocation的值指定springmvc的配置文件位置
Servlet拦截匹配规则可以自已定义,拦截哪种URL合适?
当映射为@RequestMapping("/user/add")时,为例
1、拦截*.do、*.htm, 例如:/user/add.do
这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。
2、拦截/,例如:/user/add
可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。
弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。想实现REST风格,事情就是麻烦一些。后面有解决办法还算简单。
3、拦截/*,这是一个错误的方式,请求可以走到Action中,但转到jsp时再次被拦截,不能访问到jsp。
<servlet> <servlet-name>springmvcservlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class> <init-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:spring/springmvc.xmlparam-value> init-param> servlet> <servlet-mapping> <servlet-name>springmvcservlet-name> <url-pattern>/url-pattern> servlet-mapping>
手动指定spring配置文件的位置,需要使用ServletContext的初始化参数
<context-param> <param-name>contextConfigLocationparam-name> <param-value>classpath:spring/application-dao.xml,classpath:spring/application-service.xml,classpath:spring/application-transaction.xmlparam-value> context-param>
配置spring提供的监听器,用于监听servletContext对象的创建,同时为我们创建spring容器放在servletContext中
<listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> listener>
2.在springmvc.xml中配置1.处理器映射器 2.处理器适配器 3.视图解析器(注意默认使用了jstl,所以必须导入jstl包)
上述视图解析器配置了前缀和后缀两个属性,因此控制器类的视图路径仅需提供文件名,视图解析器将会自动添加前缀和后缀。
例如:1.视图解析器中设置了这两个属性时
2.Controller类中返回的ModelAndView设置了放回视图名:modelAndView.setViewName("items");
3.则访问controller成功后访问的url为...../WEB-INF/jsp/items.jsp
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">bean> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/">property> <property name="suffix" value=".jsp">property> bean>
3.编写controller的java代码
手动配置controller时对应的java类需实现Controller接口,并重写实现方法
public class ItemController implements Controller{ @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { String name = "普通name"; //返回ModelAndView ModelAndView modelAndView = new ModelAndView(); //相当于request的setAttribute(); modelAndView.addObject("name",name); //指定视图 modelAndView.setViewName("items"); return modelAndView; } }
4.在springmvc.xml中配置controller
<bean name="/queryItems.action" class="cn.controller.ItemController">bean>
二.注解方式
1.web.xml配置与以上手动配置controller的web.xml一样
2.springmvc.xml中配置注解映射器和注解适配器
方式一:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">bean>
方式二:
<mvc:annotation-driven>mvc:annotation-driven>
3.编写通过注解实现的controller的java代码
//使用@Controller说明此类是一个控制器 @Controller //为了对url进行分类管理,可以在这里定义根路径,比如此例子访问url为/item/queryItems @RequestMapping("/item") public class AnnotationController { @Autowired private ItemService itemService; /** * 查询item * @param itemQueryVo * @return */ //@RequestMapping实现方法和url的映射,一个方法对应一个url,一般值设置和方法名一样 @RequestMapping("/queryItems") public ModelAndView queryItems(ItemQueryVo itemQueryVo) { ModelAndView modelAndView = new ModelAndView(); ListitemsList = itemService.findItemsList(itemQueryVo); //相当于request的setAttribute(); modelAndView.addObject("itemsList",itemsList); //指定视图 modelAndView.setViewName("item/itemsList"); return modelAndView; }
4.springmvc.xml中配置注解的controller
<context:component-scan base-package="cn.controller">context:component-scan>