上一篇说到了springboot+mybatis+security的整合,这里在上一篇的基础上增加springMVC模块的简单整合。
先来看下大概流程:
1.配置pom.xml
2.新建一个config包,存放所有配置文件,并将之前的WebSecurityConfig.java配置类移动到这个包里面
3.新建WebMvcConfig.java配置类
4.在目录src/main/webapp下新建一个WEB-INF->views目录,并在views目录下新建一个index.jsp文件(如果配置好pom.xml文件后没有这个目录,需要刷新下项目目录)
5.修改SysUserController.java类的注解和添加方法
1.配置pom.xml
在原有基础上添加如下依赖
<!-- jsp解析 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
然后在标签下的标签下新添加一个资源文件如下:
<resource>
<directory>${project.basedir}/src/main/webapp</directory>
</resource>
保存后可能需要手动maven update下(大部分不用)
刷新项目看看有没有出现src/main/webapp目录,有表示添加成功。
完整pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zoulang</groupId>
<artifactId>frame</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖包 -->
<dependencies>
<!-- ########################### web base ########################### -->
<!-- 支持web的起步依赖。起步依赖:类似spring-boot-starter-xx的依赖为起步依赖 -->
<!-- spring web application -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除内嵌logging,避免与log4j冲突(如果没有引入log4j则不需要排除) -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<!-- 排除内嵌tomcat -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Srping Boot 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- jsp解析 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- ########################### drivers ########################### -->
<!-- oracle jdbc -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1.0</version>
<!-- 依赖的范围
compile:默认值,表示被依赖的maven项目会参与项目编译、运行、测试、打包。是一个强依赖。
test:仅参与测试代码的编译和运行,如junit
runtime:被依赖项目在运行期间动态参与
provided:由服务器/servelet容器提供,非传递性,不会打包
system:需要显示提供一个本地jar包路径
-->
<scope>system</scope>
<systemPath>${basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
<!-- mysql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- ########################### database and cache things ########################### -->
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- druid 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- ########################### auth ########################### -->
<!-- spring security 权限控制 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- ########################### tools ########################### -->
<!-- commons lang 3 -->
<!-- ########################### others ########################### -->
<!-- log4j2 日志管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- log4j1 切换到 log4j2 的桥接包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
<build>
<!-- 资源文件配置 -->
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
<resource>
<directory>${project.basedir}/src/main/webapp</directory>
</resource>
</resources>
<plugins>
<plugin>
<!-- maven的核心插件compile插件默认只支持java1.3,需要使用java高版本,必须指定该插件 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<bootclasspath>${env.JAVA_HOME}/jre/lib/rt.jar;${env.JAVA_HOME}/jre/lib/jce.jar</bootclasspath>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
<!-- 支持springboot插件,打包成jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.新建config包及移动WebSecurityConfig.java到该目录下
项目结构如下图:
3.新建WebMvcConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
@Configuration
//@EnableWebMvc // 添加该注解后将替换掉默认的配置,不使用该注解时只是重新配置部分内容
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 解决跨越问题
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
/* 设置访问源地址 */
.allowedOrigins("*")
.allowCredentials(true)
/* 设置访问源请求方法 */
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
/* 设置访问源请求头 */
.allowedHeaders(
"X-PINGOTHER",
"Content-Type",
"X-Requested-With",
"accept",
"Origin",
"Access-Control-Request-Method",
"Access-Control-Request-Headers",
"Authorization",
"x-xsrf-token")
.allowCredentials(true);
}
/**
* 配置内容协商,为同一个url指向的资源提供不同的展现形式,实现最佳匹配
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
/* 是否通过请求Url的扩展名来决定media type */
configurer.favorPathExtension(true)
/* 不检查Accept请求头 */
.ignoreAcceptHeader(true)
.parameterName("mediaType")
/* 设置默认的media type */
.defaultContentType(MediaType.TEXT_HTML)
/* 请求以.html结尾的会被当成MediaType.TEXT_HTML */
.mediaType("html", MediaType.TEXT_HTML)
/* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON */
.mediaType("json", MediaType.APPLICATION_JSON)
/* 请求以.xml结尾的被当成MediaType.APPLICATION_XML */
.mediaType("xml", MediaType.APPLICATION_XHTML_XML);
/* 其他 */
}
/**
* 配置视图解析
* 如果在application.properties里面配置了
* spring.mvc.view.prefix=XX
* spring.mvc.view.suffix=XX
* 那么这里就不必配置,二者配置其一即可
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
registry.enableContentNegotiation(new MappingJackson2JsonView());
}
/**
* 配置静态资源
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/**");
registry.addResourceHandler("/app/**").addResourceLocations("/app/");
registry.addResourceHandler("/files/**").addResourceLocations("/files/");
}
}
4.在src/main/webapp目录下新建WEB-INF/views/index.jsp
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>this is my first springMVC config</p>
</body>
</html>
5.修改SysUserController.java
修改注解@RestController为@Controller,并添加方法:
@RequestMapping("/index")
public String index() {
return "index";
}
SysUserController.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.zoulang.frame.modules.sys.model.SysUser;
import cn.zoulang.frame.modules.sys.service.SysUserService;
@Controller
//@RestController
@RequestMapping("/user")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@RequestMapping("/query")
public List<SysUser> findUserByName() {
return sysUserService.findAll();
}
@RequestMapping("/index")
public String index() {
return "index";
}
}
6.测试
启动项目,浏览器输入地址http://localhost:8899/user/index 输入用户名密码(之前配置security时数据库中的账号密码),访问到index.jsp页面。
注:其中很多配置都可以直接通过application.properties配置,我们使用代码配置更方便理解工作原理,各个模块有问题的地方可以去相关官网查看。