文章目录
一、 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="/**"/>
<!-- <!– 但是排除下面这些,也就是不拦截请求 –>-->
<mvc:exclude-mapping path="/aa"/>
<!-- <!– 拦截器类 –>-->
<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的事务开启方式
- maven导包
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
- 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>
- 注解的方式开启
<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>