springMVC ——Controller配置方式

摘要:
contextConfigLocation的值指定了springmvc的配置文件位置。Servlet侦听匹配规则可以自己定义。哪个URL适合拦截?当映射为@RequestMapping时,例如1,块*。do和*。htm,如/user/add Do这是最传统、最简单、最实用的方法--解决中文乱码的过滤器--˃characterEncodingFilterorg.springframework.web。filter CharacterEncodingFilterSpring MVCorg。弹簧框架。网状物servlet DispatcherServletcontextConfigLocationclasspath:spring/springmvc。xml</param值></init param></servlet><servlet映射><serservlet名称>springmvc</servat名称><!
一.手动配置方式(开发中主要用注解方式,可以直接看标题二:注解方式)

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。

<!--解决中文乱码问题的过滤器-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--设置编码集-->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!--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配置文件(springmvc的配置文件可以不用指定了,上面的contextConfigLacation已经指定好springmvc的配置文件)的位置,需要使用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 implementsController{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throwsException {
        String name = "普通name";
        //返回ModelAndView
        ModelAndView modelAndView = newModelAndView();
        //相当于request的setAttribute();
        modelAndView.addObject("name",name);
        
        //指定视图
        modelAndView.setViewName("items");
        returnmodelAndView;
    }

}

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转换解析器(springmvc默认使用jackson,导入依赖即可)就默认加载了,实际开发用这个-->
      <mvc:annotation-driven></mvc:annotation-driven>    

3.编写通过注解实现的controller的java代码

//使用@Controller说明此类是一个控制器
@Controller
//为了对url进行分类管理,可以在这里定义根路径,比如此例子访问url为/item/queryItems
@RequestMapping("/item")
public classAnnotationController {
    
    @Autowired
    privateItemService itemService;
    
    /*** 查询item
     * @paramitemQueryVo
     * @return
     */
    //@RequestMapping实现方法和url的映射,一个方法对应一个url,一般值设置和方法名一样
    @RequestMapping("/queryItems")
    publicModelAndView queryItems(ItemQueryVo itemQueryVo) {
        ModelAndView modelAndView = newModelAndView();
        List<ItemCustom> itemsList =itemService.findItemsList(itemQueryVo);
        //相当于request的setAttribute();
        modelAndView.addObject("itemsList",itemsList);
        //指定视图
        modelAndView.setViewName("item/itemsList");
        returnmodelAndView;
    }

4.springmvc.xml中配置注解的controller

        <!--扫描单个 -->
        <!--<bean class="cn.controller.AnnotationController"></bean> -->
<!--扫描包下的 --> <context:component-scan base-package="cn.controller"></context:component-scan>

免责声明:文章转载自《springMVC ——Controller配置方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Git和Github库详细使用教程random_state 参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pageoffice

一、选择文件打开 1.postup.exe安装 2.导入jar包:pageoffice.jar 理论上不需要印章功能下面两个不需要导入,我只用到了第一个jar包,用于导出word文档在线编辑并保存. 3.再web.xml中添加下面代码: <!-- PageOffice Begin --> <servlet>...

SpringMVC的孪生兄弟WebFlux

一、入门文字介绍 官方口水话简短翻译:   Spring WebFlux是一个非阻塞的Web框架,用于利用多核,短时间可一处理大量并发连接。 非阻塞式   在servlet3.1提供了非阻塞的API,WebFlux为之有自己的一套手段,   使用非阻塞的方式可以利用较小的线程或硬件资源来处理并发 函数式编程端点   Spring5必须配备java8,函数式...

[Java] SpringMVC工作原理之一:DispatcherServlet

一、DispatcherServlet 处理流程 在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。在看 DispatcherServlet 类之前,我们先来看一下请求处理的大致流程: Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用...

在Spring中配置Hibernate事务

     本文主要探讨怎么用Spring来装配组件及其事务管理。在J2EE工程里连接到一个简单的数据库并不是什么难题,但是如果要综合组装企业类的组件就变得复杂了。一个简单的组件有一个或多个数据库支撑,所以,我们说到整合两个或多个的组件时,我们希望能够维持跨组件的许多数据库的运作的原子性。   J2EE提供了这些组件的容器,可以保证处理的原子性和独立性。在没...

Spring batch学习 (1)

          Spring Batch 批处理框架 埃森哲和Spring Source研发                          主要解决批处理数据的问题,包含并行处理,事务处理机制等。具有健壮性 可扩展,和自带的监控功能,并且支持断点和重发。让程序员更加注重于业务实现。           Spring Batch 结构如下      ...

springmvc多环境配置-profiles

1 pom.xml添加profiles标签 <profiles> <!--pro 线上环境--> <profile> <id>hdapp_pro</id> <properties> <db.main.url>jdbc...