- 浏览: 17557 次
- 性别:
- 来自: 南京
文章分类
最新评论
本文参考《Spring 3.x企业应用开发》这本书完成,作为自己学习的一个纪录。
第一步:先新建一个数据库sampledb,然后新建两张表t_user和t_login_log
因为我很多时候使用Derby开发测试,所以这里也同时记录上Derby的表格DDL
第二步:按照上一篇所写的做一个能用的基于Maven的服务。
第三步:在Maven中添加Spring的依赖
Mysql的Jdbc相关
AOP相关
第四步:建立包结构
com.firethewhole.maventest02.domain
com.firethewhole.maventest02.dao
com.firethewhole.maventest02.service
com.firethewhole.maventest02.web
第五步:根据数据库表t_user和t_login_log建立实体对象
第六步:数据操作层
需要给类加上Repository注解,对于需要注入的类,需要加上Autowired注解,这样Spring启动的时候会自动注入相关的类
需要在Spring配置文件中配置IOC相关的信息,在src/main/resources目录中
这里需要一个数据库连接池给jdbcTemplate来用,有cp30和dbcp可以使用,这里使用了Apache的dbcp2
当然如果使用Derby的话,稍微要改下jdbc配置
第七步:编写Service层,需要给类加上Service注解
第八步:这里需要将service层下面的类加入容器管理。
第九步:在web.xml中配置contextConfigLocation,Listener,DispatcherServlet
第十步:需要编写Controller层的代码
第十一步:配置试图解析器,在/WEB-INF/maventest02
第十二步:编写JSP来运行。
login.jsp
main.jsp
这样一个可以运行的Spring程序就建立好了。
在编写过程中我发生了很多错误,现在记录下来:
1:包名写错,明明是com.firethewhole.maventest03.dao,却写成了com.firethewholemaventest03.dao,错误很难找,一直以为自己写的是对的
2:将JSP中的${}写成了!{}
3:Mysql默认的用户名是root,写成了admin
4:tx:attributes写成了tx:attribute,少了一个s
5:当我在使用ApplicationContext的时候,只引用了spring-beans.jar,实际上这个接口在spring-context.jar包里面。
第一步:先新建一个数据库sampledb,然后新建两张表t_user和t_login_log
DROP DATABASE IF EXITST sampledb; CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8; CREATE TABLE t_user( user_id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(30), credits INT, password VARCHAR(32), last_visit DATETIME, last_ip VARCHAR(23) ) ENGINE=INNODB; CREATE TABLE t_login_log( login_log_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, ip VARCHAR(23), login_datetime DATETIME ) ENGINE=INNODB; INSERT INTO t_user(user_name,password) VALUES('admin','12345');
因为我很多时候使用Derby开发测试,所以这里也同时记录上Derby的表格DDL
create table t_user( user_id int not null generated by default as identity (start with 100, increment by 1), user_name varchar(30), credits int, password varchar(32), last_visit timestamp, last_ip varchar(23)); create table t_login_log( login_log_id int not null generated by default as identity (start with 100, increment by 1), user_id int, ip varchar(23), login_datetime timestamp); insert into t_user(user_name,password) values('admin','12345');
第二步:按照上一篇所写的做一个能用的基于Maven的服务。
第三步:在Maven中添加Spring的依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.1.2.RELEASE</version> </dependency>
Mysql的Jdbc相关
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbyclient</artifactId> <version>10.13.1.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1.1</version> </dependency>
AOP相关
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.7</version> </dependency>
第四步:建立包结构
com.firethewhole.maventest02.domain
com.firethewhole.maventest02.dao
com.firethewhole.maventest02.service
com.firethewhole.maventest02.web
第五步:根据数据库表t_user和t_login_log建立实体对象
public class User { private int userId; private String userName; private int credits; private String password; private Date lastVisit; private String lastIp; // 相关的Get Set方法 } public class LoginLog { private int loginLogId; private int userId; private String ip; private Date loginDatetime; // 相关的Get Set方法 }
第六步:数据操作层
需要给类加上Repository注解,对于需要注入的类,需要加上Autowired注解,这样Spring启动的时候会自动注入相关的类
@Repository public class UserDao { @Autowired private JdbcTemplate jdbcTemplate; // 具体函数可以查看附件,jdbc封装了普通JDBC操作的细节。 // DriverManager.getConnectin();conn.CreateStatement();stat.execute(); public int getMatchCount(String userName, String password) {..} public User findUserByName(String userName) {..} public void updateLoginInfo(User user) {..} }
@Repository public class LoginLogDao { @Autowired private JdbcTemplate jdbcTemplate; public void insertLoginLog(LoginLog loginLog) {..} }
需要在Spring配置文件中配置IOC相关的信息,在src/main/resources目录中
这里需要一个数据库连接池给jdbcTemplate来用,有cp30和dbcp可以使用,这里使用了Apache的dbcp2
<beans> <context:component-scan base-package="com.firethewhole.maventest01.dao" /> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" p:driverClassName="com.mysql.jdbc.Driver" p:username="root" p:password="1234" p:url="jdbc:mysql://localhost:3306/sampledb" /> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"/> </beans>
当然如果使用Derby的话,稍微要改下jdbc配置
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close" p:driverClassName="org.apache.derby.jdbc.ClientDriver" p:url="jdbc:derby://localhost:1527/sampledb"/>
第七步:编写Service层,需要给类加上Service注解
@Service public class UserService { @Autowired private UserDao userDao; @Autowired private LoginLogDao loginLogDao; public boolean hasMatchUser(String userName, String password) {..} public User findUserByName(String userName) {..} public void loginSuccess(User user) {..} }
第八步:这里需要将service层下面的类加入容器管理。
<beans> <context:component-scan base-package="com.firethewhole.maventest01.service" /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" /> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*"/> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:pointcut expression="execution(* com.firethewhole.maventest01.service..*(..))" id="serviceMethod"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/> </aop:config> </beans>
第九步:在web.xml中配置contextConfigLocation,Listener,DispatcherServlet
第十步:需要编写Controller层的代码
@Controller public class LoginController { @Autowired private UserService userService; @RequestMapping("/index.html") public String login() { return "login"; } @RequestMapping("/loginCheck.html") public ModelAndView loginCheck(HttpServletRequest request, LoginCommand loginCommand) { String userName = loginCommand.getUserName(); String password = loginCommand.getPassword(); boolean flg = userService.hasMatchUser(userName, password); ModelAndView result = null; if (!flg) { result = new ModelAndView("login", "error", "请输入正确的用户名和密码"); } else { User user = userService.findUserByName(userName); user.setLastIP(request.getRemoteAddr()); user.setLastVisit(new Date()); userService.loginSuccess(user); request.getSession().setAttribute("user", user); result = new ModelAndView("main"); } return result; } }
第十一步:配置试图解析器,在/WEB-INF/maventest02
<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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:component-scan base-package="com.firethewhole.maventest01.web"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/views/" p:suffix=".jsp"/> </beans>
第十二步:编写JSP来运行。
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登陆</title> </head> <body> <c:if test="${!empty error}"> <font color="red"><c:out value="${ error }"></c:out></font> </c:if> <form action="<c:url value="/loginCheck.html"/>" method="post"> 用户名:<input type="text" name="userName"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> </body> </html>
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>宝宝淘论坛</title> </head> <body> 亲爱的顾客:${user.userName},您好,您的积分有:${user.credits} </body> </html>
这样一个可以运行的Spring程序就建立好了。
在编写过程中我发生了很多错误,现在记录下来:
1:包名写错,明明是com.firethewhole.maventest03.dao,却写成了com.firethewholemaventest03.dao,错误很难找,一直以为自己写的是对的
2:将JSP中的${}写成了!{}
3:Mysql默认的用户名是root,写成了admin
4:tx:attributes写成了tx:attribute,少了一个s
5:当我在使用ApplicationContext的时候,只引用了spring-beans.jar,实际上这个接口在spring-context.jar包里面。
- maventest02.zip (44.2 KB)
- 下载次数: 1
发表评论
-
Spring基础:数据访问(3)
2017-01-15 09:29 442在开源世界里,有很多ORM框架使用,比如Hibernate,还 ... -
Spring基础:数据访问(2)
2016-12-31 10:55 537上一篇主要将了Spring JDB ... -
Spring基础:数据访问(1)
2016-12-27 08:22 386Spring JDBC通过模板和回调机制大大降低了使用JDBC ... -
Spring基础:AOP编程(5)
2016-11-30 07:35 383基于Schema的AOP编程 基于AspectJ的AOP编程已 ... -
Spring基础:AOP编程(4)
2016-11-27 12:17 417基于AspectJ的AOP编程 AspectJ的切点函数非常 ... -
Spring基础:AOP编程(3)
2016-11-19 10:44 383基于切面的AOP编程 通过Advice,可以创建方法前,后, ... -
Spring基础:AOP编程(2)
2016-11-15 23:40 414基于ProxyFactory的AOP编程 Spring只支持 ... -
Spring基础:AOP编程(1)
2016-11-14 01:08 421Java编程中的代理 Spring以IoC为基础,发展了另外 ... -
Spring基础:IoC容器(2)
2016-11-12 10:00 452容器注入类型 最常见的注入类型是字面值注入,像String和 ... -
Spring基础:IoC容器(1)
2016-11-10 08:15 411在IoC容器中装配Bean 4.1.2.RELEASE版本的 ... -
使用Eclipse创建基于Maven Web工程
2016-06-06 19:19 453第一步:创建一个maven-webapp类型的工程 完 ...
相关推荐
"Spring4 HelloWorld"是入门Spring框架的基础教程,主要涉及以下几个关键知识点: 1. **Spring框架概述**:Spring是一个开源的Java平台,它提供了一个全面的编程和配置模型,用于现代Java应用。Spring的核心特性...
Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。"helloworld spring mvc"项目是入门...通过实践这个项目,开发者可以逐步掌握Spring MVC的使用,为后续的复杂Web应用开发打下坚实基础。
本文将深入探讨如何利用Spring框架输出“HelloWorld”,并介绍相关的基础知识。 首先,Spring是一个开源的Java平台,它为创建复杂的、模块化的、松耦合的Java应用程序提供了强大的支持。它的核心特性包括依赖注入...
在Eclipse这个强大的Java集成开发环境中,创建一个Spring框架的HelloWorld程序是学习Spring入门的典型步骤。这个程序展示了如何在Eclipse中配置Spring环境,编写简单的Bean定义,并通过Spring的IoC(Inversion of ...
本示例DEMO "Spring的AOP示例DEMO HELLOWORLD" 将引导我们深入理解Spring AOP的核心概念,并通过一个简单的 HelloWorld 示例来展示其实现过程。 首先,面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性...
这个“HelloWorld”实例展示了Spring 5.0 MVC的基础用法,包括如何配置MVC环境、编写Controller以及展示结果。随着对Spring MVC的深入了解,你可以添加更多的功能,如处理POST请求、使用ModelAndView对象传递复杂...
这个"HelloWorld"实例是初学者学习Spring MVC的入门项目,它展示了如何配置、创建和运行一个基本的Spring MVC应用。下面将详细介绍这个实例中的关键知识点。 1. **Spring MVC架构**: Spring MVC遵循模型-视图-...
spring cloud 微服务helloworld项目,适合新手,项目基于spring cloud 微服务技术,使用了eureka注册公司,configserver配置中心,项目需要在本地新建配置中心配置文件
在本篇【SpringCloud学习第一天,helloWorld】的教程中,我们将初步接触并了解Spring Cloud这一微服务框架,以及如何创建一个基本的“Hello, World”应用。首先,我们需要理解Spring Cloud的核心概念和作用。 ...
本节我们将探讨SpringData的概述以及如何通过一个简单的"HelloWorld"示例来入门。 SpringData的核心目标是通过减少样板代码,使数据访问更加简单、高效。它支持多种数据存储技术,包括JPA(Java Persistence API)...
**Spring MVC HelloWorld Maven实例** Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。在这个实例中,我们将深入理解如何使用Maven构建一个基本的“Hello, World!”...
在这个“Spring MVC Helloworld实例”中,我们将会探讨如何利用Spring MVC 3.0.5版本创建一个简单的Hello World应用程序。这个实例包括了所有必要的jar包,使开发者能够快速地开始他们的开发工作。 首先,了解...
**Spring Boot Hello World 知识点详解** Spring Boot 是由 Pivotal 团队开发的框架,它旨在...理解并掌握这些概念是深入学习Spring Boot的基础,随着对框架的进一步了解,你将能够构建更复杂、功能丰富的应用程序。
接下来,我们使用Spring的XML配置文件来定义`HelloWorld`类的bean。在`Spring3`压缩包中的`applicationContext.xml`文件可以这样编写: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns...
这只是一个基础入门,Spring MVC的强大之处在于其灵活的配置、丰富的注解以及对其他Spring模块的无缝集成,可以满足复杂Web应用的需求。在实际开发中,你可以进一步学习`@RequestParam`、`@PathVariable`等注解以...
本示例“spring helloworld”将引导初学者入门Spring框架,通过一个简单的实例来理解其核心概念。 首先,我们需要了解Spring的基本架构。Spring是一个开放源代码的Java平台,它提供了全面的编程和配置模型,主要...
第一次共享自己的代码,Spring Hello World。代码比较简单,适合初学者,入门使用。高手就不要下载。呵呵。
在这个"springboot-helloworld"项目中,可能已经包含了这些基础文件,如pom.xml或build.gradle。 3. **"Hello, World!"示例**:在SpringBoot中,我们通常使用@Controller注解来定义一个控制器,然后通过@...
本篇文章将详细讲解在创建一个简单的Spring HelloWorld应用时,需要导入的jar包以及它们在Spring框架中的作用。 首先,我们需要理解Spring的核心组件,即Spring IoC(Inversion of Control)容器。IoC容器是Spring...