目录
1. ssm框架的搭建
1.1 maven项目的创建
1.2 导入所需的包到pom.xml文件中
1.3 导入数据库连接文件、日志文件、redis连接文件
1.3.1 数据库连接文件
1.3.2 日志文件
1.3.3 redis连接文件
1.4 导入spring-mybatis、spring-mvc、spring-base、spring-redis四种集成文件
1.4.1 spring-mybatis集成文件
1.4.2 spring-mvc集成文件
1.4.3 spring-base集成文件
1.4.4 spring-redis集成文件
1.5 导入web.xml
1.6 导入所需的工具包(util)文件
·1.6.1 适用于支持java web应用跨资源源共享(CORS)的首个统一解决方案的文件
1.6.2
1.6.3 处理请求编码问题文件
1.6.4 继承了感知器
1.7 运行结果
2. 获取注解的参数
注:将jkd版本切换至1.8,web.xml的版本切换至3.1
4.0.0
com.nara
ssmdemo
1.0-SNAPSHOT
war
ssmdemo Maven Webapp
http://www.example.com
UTF-8
1.8
1.8
junit
junit
4.12
test
org.springframework
spring-context
5.3.18
org.springframework
spring-tx
5.3.18
org.springframework
spring-jdbc
5.3.18
org.springframework
spring-test
5.3.18
org.springframework
spring-web
5.3.18
org.springframework
spring-webmvc
5.3.18
org.springframework
spring-orm
5.3.18
org.springframework
spring-aspects
5.3.18
org.mybatis
mybatis
3.5.6
org.mybatis
mybatis-spring
2.0.6
com.github.pagehelper
pagehelper
5.1.2
mysql
mysql-connector-java
5.1.44
org.apache.commons
commons-dbcp2
2.1.1
org.apache.commons
commons-pool2
2.4.3
org.slf4j
slf4j-api
1.7.36
ch.qos.logback
logback-classic
1.2.10
redis.clients
jedis
2.9.0
org.springframework.data
spring-data-redis
1.7.2.RELEASE
com.fasterxml.jackson.core
jackson-core
2.9.4
com.fasterxml.jackson.core
jackson-databind
2.9.4
org.projectlombok
lombok
1.18.22
provided
javax.servlet
javax.servlet-api
3.1.0
provided
ssmdemo
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tmpdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
注:tmpdb是数据库的名称
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB
redis.host=localhost
redis.port=6379
redis.maxTotal=10
redis.maxIdle=5
redis.testOnBorrow=true
helperDialect=mysql
text/html;charset=UTF-8
text/json;charset=UTF-8
application/json;charset=UTF-8
contextConfigLocation
classpath*:spring-*.xml
org.springframework.web.context.ContextLoaderListener
encodingFilter
com.zking.ssmdemo.util.EncodingFilter
encodingFilter
/*
corsFilter
com.zking.ssmdemo.util.CorsFilter
corsFilter
/*
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:spring-mvc.xml
1
true
SpringMVC
/
package com.zking.ssmdemo.util;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 配置tomcat允许跨域访问
*
* @author Administrator
*
*/
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
HttpServletRequest req = (HttpServletRequest) servletRequest;
// Access-Control-Allow-Origin就是我们需要设置的域名
// Access-Control-Allow-Headers跨域允许包含的头。
// Access-Control-Allow-Methods是允许的请求方式
httpResponse.setHeader("Access-Control-Allow-Origin", "*");// *,任何域名
httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,jwt");
//允许客户端,处理一个新的响应头jwt
httpResponse.setHeader("Access-Control-Expose-Headers", "jwt");
// axios的ajax会发两次请求,第一次提交方式为:option,直接返回即可
if ("OPTIONS".equals(req.getMethod())) {
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
package com.zking.ssmdemo.util;
import org.springframework.cache.interceptor.KeyGenerator;
import java.lang.reflect.Method;
public class CustomKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for(Object param: params) {
sb.append(param.toString());
}
return sb;
}
}
package com.zking.ssmdemo.util;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 中文乱码处理
*
*/
public class EncodingFilter implements Filter {
private String encoding = "UTF-8";// 默认字符集
public EncodingFilter() {
super();
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// 中文处理必须放到 chain.doFilter(request, response)方法前面
res.setContentType("text/html;charset=" + this.encoding);
if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
if (null != s && !s.trim().equals("")) {
this.encoding = s.trim();
}
}
}
package com.zking.ssmdemo.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @author L
* @site www.xiaomage.com
* @company xxx公司
* @create 2022-11-09 15:40
*/
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext ctx;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ctx = applicationContext;
}
public static T getBean(String id) {
return (T)ctx.getBean(id);
}
}
自定义的注解也有(Mylog AOP。。。)
value,name两个自定义参数