1.springMVC Controller配置方式
一.手动配置方式
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。
<!-- springMVC前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- contextConfigLocation配置springmvc加载的配置文件;如果不配置默认加载的是/WEB-INF/servlet名称-servlet.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 第一种:*.action 以.action结尾的由DispatcherServlet解析 -->
<!-- <url-pattern>*.action</url-pattern> -->
<!-- 第二种:/ 所有的访问地址都由DispatcherServlet解析,对于静态文件的解析需要配置不让DispatcherServlet解析;使用此种方式可以实现RESTful风格的url-->
<url-pattern>/</url-pattern>
</servlet-mapping>
手动指定spring配置文件的位置,需要使用ServletContext的初始化参数
<!-- 手动指定spring配置文件的位置,需要使用ServletContext的初始化参数 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/application-dao.xml,classpath:spring/application-service.xml,classpath:spring/application-transaction.xml</param-value>
</context-param>
配置spring提供的监听器,用于监听servletContext对象的创建,同时为我们创建spring容器放在servletContext中
<listener>
<!-- 配置spring提供的监听器,用于监听servletContext对象的创建,同时为我们创建spring容器放在servletContext中,需导spring-web-4.3.8.RELEASE.jar
默认情况下:这个配置只能加载位置是在WEB-INF目录中的spring配置文件,同时文件名必须是applicationContext.xml(所以spring配置文件在其它位置时需要手动指定配置文件位置)
-->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.在springmvc.xml中配置1.处理器映射器 2.处理器适配器 3.视图解析器(注意默认使用了jstl,所以必须导入jstl包)
上述视图解析器配置了前缀和后缀两个属性,因此控制器类的视图路径仅需提供文件名,视图解析器将会自动添加前缀和后缀。
例如:1.视图解析器中设置了这两个属性时
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
2.Controller类中返回的ModelAndView设置了放回视图名:modelAndView.setViewName("items");
3.则访问controller成功后访问的url为...../WEB-INF/jsp/items.jsp
<!-- 配置处理器映射器 在配置Controller时需要指定bean的name;bean的name作为url进行查找 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 配置处理器适配器 ;所有的处理器适配器都实现了HandlerAdapter接口 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 视图解析器 ;解析jsp,默认使用jstl标签,所以必须导jstl包 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置view的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 设置view的后缀 -->
<property name="suffix" value=".jsp"></property> <!-- 指定前后缀后modelAndView.setViewName("");自动在前后加上前后缀 -->
</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
<!-- 配置Controlle -->
<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>可以代替上边注解映射器和注解适配器 ,它默认加载很多参数绑定方法
比如json转换解析器就默认加载了,实际开发用这个-->
<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();
List<ItemCustom> itemsList = itemService.findItemsList(itemQueryVo);
//相当于request的setAttribute();
modelAndView.addObject("itemsList",itemsList);
//指定视图
modelAndView.setViewName("item/itemsList");
return modelAndView;
}
4.springmvc.xml中配置注解的controller
<!-- 扫描单个 -->
<!-- <bean class="cn.controller.AnnotationController"></bean> -->
<!-- 扫描包下的 -->
<context:component-scan base-package="cn.controller"></context:component-scan>
1.springMVC Controller配置方式的更多相关文章
- springMVC controller配置方式总结
第一种:不配置controller 的bean.(注解的方式) 在dispatch-servlet.xml中,在beans节点下配置context:component-scan节点 <!-- 启 ...
- Spring MVC Controller配置方式
第一种 URL对应Bean如果要使用此类配置方式,需要在XML中做如下样式配置 以上配置,访问/hello.do就会寻找ID为/hello.do的Bean,此类方式仅适用小型的应用系统 第二种 为UR ...
- SpringMVC Controller配置方法有哪几种
第一种 URL对应Bean 如果要使用此类配置方式,需要在XML中做如下样式配置 <!-- 表示将请求的URL和Bean名字映射--> <bean class="org.s ...
- SpringMVC初写(一)SpringMVC的配置方式
1.Spring概述a)SpringMVC是什么?SpringMVC是Spring框架内置的MVC实现.SpringMVC就是一个Spring内置的MVC子框架MVC:Model-View-Contr ...
- SpringMVC:Controller配置总结
西部开源-秦疆老师:SpringMVC系列博客 , 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! SpringMVC:Controlle ...
- springmvc的系统学习之配置方式
资源:尚学堂 邹波 springmvc框架视频 一.springMVC 工作流程 页面请求---->控制器(Controller DispatcherServlet)----& ...
- SpringMVC的注解方式配置
SpringMVC支持使用注解方式配置,比配置文件方式更加灵活易用,是SpringMVC使用的主流模式. 1.在配置文件中开启SpringMVC的注解 <!-- 开启包扫描 --> < ...
- SpringMVC(一)-- springmvc的系统学习之配置方式
资源:尚学堂 邹波 springmvc框架视频 一.springMVC 工作流程 页面请求---->控制器(Controller DispatcherServlet)----& ...
- SpringMVC基于代码的配置方式(零配置,无web.xml)直接继承WebMvcConfigurerAdapter
基于配置文件的web项目维护起来可能会更方便,但是有时候我们会有一些特殊的需求,比如防止客户胡乱更改配置,这时候我们需要给配置隐藏到代码中. 1.创建一个动态web项目(无需web.xml) 2.右键 ...
随机推荐
- adb devices无法连接mumu模拟器
解决方案: 如果你的android环境能够直接访问 adb 的相关指令.只需要把mumu模拟器打开 然后打开cmd -> 输入 adb connect 127.0.0.1:7555 就能直接连上 ...
- jd-gui反编译报错// INTERNAL ERROR //
最近在反编译class和jar包的时候,发现部分class无法反编译出来,换了最新版本的jd-gui和多个版本都不行,只能放弃了 解决方案:GitHub上找Luyten这个工具反编译 luyten是P ...
- 更改组织属性-以更改maxrecordsforexporttoexcel为例
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复232或者20161101可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Thymeleaf对象的使用:数字对象
Thymeleaf主要使用 org.thymeleaf.expression.Numbers 类处理数字,在模板中使用 #numbers 对象来处理数字. 开发环境:IntelliJ IDEA 201 ...
- Spring Boot 2 单元测试
开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 IDEA新建一个Spring Boot项目后,pom.xml默认包含了Web应用和单元测试两个依赖包.如下 ...
- 一个页面从输入url到加载到内容,这个过程经历了什么
首先,当浏览器接收到url,会查看本地缓存(浏览器缓存-系统缓存-路由器缓存)中是否有,有则直接显示 没有则进行DNS域名解析,将域名解析成IP地址,通过ip地址去访问相应的服务器, 浏览器访问服务器 ...
- 最小化MarkdownPad 2安装体积(win10)
一.原因 MarkdownPad2在Win10当中可能无法正常运行,右侧预览界面会出现错误"This view has crashed!"查阅官网FAQ得知大多数情况下安装Awes ...
- 设计模式-State(行为模式)-很好的实现了对象的状态逻辑与动作实现的分类,状态逻辑在State的派生类实现,动作可以放在Context类中实现。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Context.h #pragma once class State; class Context { public: C ...
- Python连载44-XML其他注意点
一.XML文件注意点 1.内容中不能出现尖括号 例如:下面是不合法的 <grade>成绩<90</grade> 解决方案:使用实体引用<EntityReferenc ...
- 从Python安装到语法基础,这才是初学者都能懂的爬虫教程
Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...