纯Java配置SpringMvc-Freemarker-JdbcTemplate

本文介绍如何使用纯Java配置来搭建SpringMVC、JdbcTemplate和Freemarker的环境。通过修改pom.xml引入相关依赖,并调整SpringMVC配置文件和视图模板,实现了一个简单的Web应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要演示纯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,分布式,微服务。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值