主要演示纯java配置springmvc+jdbcTemplate+Freemarker
与上一片(http://blog.youkuaiyun.com/niugang0920/article/details/79448171)列子相比主要变动了,pom.xml,SpringMvcConfig.java,及WEB-INF/views/下面页面的变化,重复代码就不在这里列出了
1.pom.xml
<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>spring</groupId>
<artifactId>javaconfig</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>2_springjavaconfig_freemarker</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Generic properties -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Web -->
<jsp.version>2.2</jsp.version>
<jstl.version>1.2</jstl.version>
<servlet.version>3.1.0</servlet.version>
<!-- Spring -->
<spring-framework.version>4.3.7.RELEASE</spring-framework.version>
<!-- Logging -->
<logback.version>1.0.13</logback.version>
<slf4j.version>1.7.5</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- 其他web依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!--FreeMarker作为视图解析 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<!-- <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId>
<version>${jsp.version}</version> <scope>provided</scope> </dependency> -->
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<!-- 使用SLF4J和LogBack作为日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency>
<!--对json和xml格式的支持 -->
<!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId>
<version>2.5.3</version> </dependency> -->
<!--配置springmvc信息转化为json所需的json包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.6</version>
</dependency>
<!-- file upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 非必需,可简化IO操作 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<!--aspectj依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<!--mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.SpringMvcConfig.java变化
package com.niugang;
import javax.servlet.ServletContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerView;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import freemarker.cache.WebappTemplateLoader;
/**
*
* @author niugang springmvc java配置文件
*/
@Configuration // 说明此类为配置文件类
@EnableWebMvc // 开启springmvc
@ComponentScan("com.niugang") // 组件扫描
public class SpringMVCconfig extends WebMvcConfigurerAdapter {
/**
* freemaker作为视图解析器
*
* @return
*/
@Bean
public FreeMarkerViewResolver viewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setContentType("text/html;charset=utf-8");
/*
* 如果注释 resolver.setPrefix("/WEB-INF/views/");
* 下面config需要tplCfg.setTemplateLoader(new
* WebappTemplateLoader(servletContext,"/WEB-INF/views/"));
*/
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
resolver.setViewClass(FreeMarkerView.class);
return resolver;
}
/**
* 配置freemarker
* @param servletContext
* @return
*/
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer(ServletContext servletContext) {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
@SuppressWarnings("deprecation")
freemarker.template.Configuration tplCfg = new freemarker.template.Configuration();
tplCfg.setDefaultEncoding("UTF-8");
tplCfg.setTemplateLoader(new WebappTemplateLoader(servletContext));
freeMarkerConfigurer.setConfiguration(tplCfg);
return freeMarkerConfigurer;
}
/**
* 配置静态资源的处理 对静态资源的请求转发到容器缺省的servlet,而不使用DispatcherServlet
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
ExceptionControllerAscept.java 用于异常处理
package com.niugang.aop;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* controller层统一异常处理
*
* @author niugang
*
*/
@Aspect
@Component
@EnableAspectJAutoProxy
public class ExceptionControllerAscept {
private Logger logger = LoggerFactory.getLogger(ExceptionControllerAscept.class);
/**
* 匿名切点的方式
* @param ex
* @throws ServletException
* @throws IOException
*/
@AfterThrowing(value = "execution(public * com.niugang.controller..*.*(..))", throwing = "ex")
public ModelAndView aroundAdvice(Exception ex) throws ServletException, IOException {
/*RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes r = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = r.getRequest();
HttpServletResponse response = r.getResponse();*/
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
//第一如果是 RuntimeException
if (ex instanceof RuntimeException) {
logger.error("抛出运行时异常{}", ex.getMessage());
modelAndView.addObject("errorMsg", ex.getMessage());
return modelAndView;
}
modelAndView.addObject("errorMsg", "未知异常");
return modelAndView;
}
}
WEB-INF/views下页面变化
index.html
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
纯java配置方式构建spring框架<br>
<!--${msg}-->
<hr>
纯java配置访问jdbc
<a href="list">数据列表</a>
<hr>
纯java配置访问aop处理异常
<a href="error">异常</a>
</body>
list.html
<!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=UTF-8">
<title>数据展示</title>
<style type="text/css">
table {
border-collapse: collapse;
margin: 0 auto;
}
table, td, th {
border: 1px solid black;
padding: 15px;
}
</style>
</head>
<body>
<a href="toAdd" >添加</a>
<table>
<thead>
<tr>
<th>用户名</th>
<th>年龄</th>
<th>电话</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<#if users??> <#list users as user>
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.phone}</td>
<td><a href="javascript:void(0)" onclick="edit('${user.id}')" >编辑</a>
<a href="javascript:void(0)" onclick="del('${user.id}')">删除</a>
<a href="javascript:void(0)" onclick="detail('${user.id}')">详情</a>
</td>
</tr>
</#list> </#if>
</tbody>
</table>
</body>
<a href="javascript:history.back(-1)">返回</a>
</html>
detail.html
<!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=UTF-8">
<title>详情页面</title>
</head>
<body>
<h2>详情</h2>
姓名<input type="text" readonly value="${user.name}">
年龄<input type="text" readonly value="${user.age}">
电话<input type="text" readonly value="${user.phone}">
<a href="javascript:history.back(-1)">返回</a>
</body>
</html>
add.html
<!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=UTF-8">
<title>ADD PAGE</title>
</head>
<body>
<h2>增加信息 </h2>
<form action="save" method='post'>
姓名:<input type="text" name="name">
<p>
年龄:<input type="text" name="age">
<p>
电话:<input type="text" name="phone">
<p>
<input type="submit" value="æäº¤">
</form>
</body>
</html>
error.html
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
${errorMsg}
<a href="javascript:history.back(-1)">返回</a>
</body>
</html>
微信公众号:
JAVA程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。