springMVC小结

一、 MVC配置

1.开启mvc【视图解析器】

【maven导包】

 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.3</version>
    </dependency>

【java方法】

//这个类代替Web.xml文件
/**
	配置监听器
*/
public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext){

        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
        annotationConfigWebApplicationContext.register(WebConfig.class);

        DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigWebApplicationContext);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", dispatcherServlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
        
    }
}
//这个类代替springmvc.xml文件
@EnableWebMvc【启用mvc配置】
@ComponentScan("com.luo")
public class WebConfig implements WebMvcConfigurer {

    /**
     * 配置消息转换器
     * @return
     */
    @Bean
    public InternalResourceViewResolver internalResourceViewResolver(){
        InternalResourceViewResolver internalResourceViewResolver =new InternalResourceViewResolver();
        internalResourceViewResolver.setSuffix(".jsp");
        internalResourceViewResolver.setPrefix("/WEB-INF/jsp/");
        return internalResourceViewResolver;
    }

}
//我的controller类
@Controller
public class TestController {

    @GetMapping("")
    public String a1(){
        return "hello";
    }
}

【xml方法】

<!--web.xml-->
  <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!-- 配置监听器 -->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:springMvc.xml</param-value>
        </init-param>

    </servlet>
    <!--    拦截器-->
    <servlet-mapping>
        <!--        指定servlet的引擎为Springmvc-->
        <servlet-name>springmvc</servlet-name>
        <!--        监听所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<!--springMvc.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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--扫描基包下的所有注解类-->
    <context:component-scan base-package="com.luo.controller"/>
    <!--视图解析器-->
    <bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
2.开启拦截器

【java方式】

//Webconfig.java
 /**
     * 配置在拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/*");
    }
//创建一个拦截器的	类
public class MyHandlerInterceptor implements HandlerInterceptor {
    /**
     * 预处理,controller方法执行前
     * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
     * return false不放行
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //可以用在登录之前
        System.out.println("加载之前");
        return true;
    }
    /**
     * 后处理方法,controller方法执行后,return之前执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("开启mvc但是在消息转换器之前");
    }
    /**
     * controller当中的return执行后,该方法会执行   完整请求完成后
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("最后");
    }
}

【xml方法】

  <mvc:interceptors>
        <mvc:interceptor>
            <!-- 拦截所有的请求,这个必须写在前面 -->
            <mvc:mapping path="/**"/>
<!--            &lt;!&ndash; 但是排除下面这些,也就是不拦截请求 &ndash;&gt;-->
            <mvc:exclude-mapping path="/aa"/>
<!--            &lt;!&ndash; 拦截器类 &ndash;&gt;-->
            <bean class="com.luo.Interceptor.MyHandlerInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
3.开启文件上传

【xml方式】

//在web.xml 里的servlet 里添加   <multipart-config/>  标签
 <form method="post" enctype="multipart/form-data" action="load">
            <input type="file"  name="file" multiple="multiple"/>
            <input type="submit" value="上传"/>
        </form>
 @PostMapping("load")
    public String a2(MultipartFile file){
        System.out.println("file="+file);
    return "hello";
    }

【java方式】

//在MyWebApplicationInitializer文件中添加这个 
registration.setMultipartConfig(new MultipartConfigElement("/"));
4.消息转换器
5.静态资源映射

【java方式】

   /**
     *  /**的意思是所有文件,包括文件夹中的子文件
     *   /*是所有文件,不包含子文件
     *   /是web项目的根目录
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //两个*表示以/assets开始的任意层级的路径都可以访问得到图片,如<img src="../assets/img/1.png">
        //一个*表示只可以访问assets目录下的图片文件
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

1. 当在Controller中 想让方法返回一个自定义的类型数据时。

 ① 在方法前加 @ResponseBody注解
 ② 在springmvc中 开启mvc配置   : <mvc:annotation-driven></mvc:annotation-driven>
 ③ 因为是自定义的所以需要 jackson{导入之后会自动使用}    maven导入
	 	    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.12.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.1</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.12.1</version>
    </dependency>

2.springMvc的事务开启方式

  1. maven导包
 <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.8</version>
    </dependency>
  1. XML配置文件开启
xmlns:tx="http://www.springframework.org/schema/tx"

  <!--  事务管理器-->
    <bean id="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <constructor-arg ref="dataSource"/>
    </bean>
    <!--声明式事务-->
    <tx:advice id="txAdvice" transaction-manager="transactionManger">
        <tx:attributes>
            <!--通过方法匹配 -->
            <tx:method name="test*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    <!--事务匹配-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.luo.service.*.*(..))"/>
    </aop:config>
  1. 注解的方式开启
 <tx:annotation-driven transaction-manager="transactionManger" order="0"/>

    <!--  事务管理器-->
    <bean id="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <constructor-arg ref="dataSource"/>
    </bean>

在ServiceImpl添加 @Transactional(rollbackFor = Exception.class)

3.maven强行打包

 <resources>
		<resource>
     	<directory>src/main/java</directory>
       		<includes>
        			 <include>*/**</include>
       		</includes>
   </resource>
   <resource>
     <directory>src/main/resources</directory>
       <includes>
         <include>*/**</include>
       </includes>
   </resource>
 </resources>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值