- 浏览: 16033 次
- 性别:
- 来自: 南京
文章分类
最新评论
本文参考《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 409在开源世界里,有很多ORM框架使用,比如Hibernate,还 ... -
Spring基础:数据访问(2)
2016-12-31 10:55 499上一篇主要将了Spring JDB ... -
Spring基础:数据访问(1)
2016-12-27 08:22 342Spring JDBC通过模板和回调机制大大降低了使用JDBC ... -
Spring基础:AOP编程(5)
2016-11-30 07:35 343基于Schema的AOP编程 基于AspectJ的AOP编程已 ... -
Spring基础:AOP编程(4)
2016-11-27 12:17 375基于AspectJ的AOP编程 AspectJ的切点函数非常 ... -
Spring基础:AOP编程(3)
2016-11-19 10:44 355基于切面的AOP编程 通过Advice,可以创建方法前,后, ... -
Spring基础:AOP编程(2)
2016-11-15 23:40 371基于ProxyFactory的AOP编程 Spring只支持 ... -
Spring基础:AOP编程(1)
2016-11-14 01:08 384Java编程中的代理 Spring以IoC为基础,发展了另外 ... -
Spring基础:IoC容器(2)
2016-11-12 10:00 406容器注入类型 最常见的注入类型是字面值注入,像String和 ... -
Spring基础:IoC容器(1)
2016-11-10 08:15 367在IoC容器中装配Bean 4.1.2.RELEASE版本的 ... -
使用Eclipse创建基于Maven Web工程
2016-06-06 19:19 417第一步:创建一个maven-webapp类型的工程 完 ...
相关推荐
Spring4 HelloWorld初学Spring,java bean通过applicationContext.xml配置SpringIoC容器生成。
spring cloud 微服务helloworld项目,适合新手,项目基于spring cloud 微服务技术,使用了eureka注册公司,configserver配置中心,项目需要在本地新建配置中心配置文件
第一次共享自己的代码,Spring Hello World。代码比较简单,适合初学者,入门使用。高手就不要下载。呵呵。
这是spring MVC的HelloWorld完整实例,包含jar包
[INFO] SpringStart:SpringStart:war:V1.0.0 [INFO] +- log4j:log4j:jar:1.2.17:compile [INFO] +- org.apache.openejb:javaee-api:jar:5.0-1:provided [INFO] +- javax.faces:jsf-api:jar:1.2_04:provided [INFO] +...
根据学习笔记整理的HelloWorld,需要自行下载Spring3相关的包
博文链接:https://hintcnuie.iteye.com/blog/198673
spring-mvc-helloworld 可以通过jetty启动,访问 http://localhost:8010/spring-mvc-helloworld/hello/world
博客示例代码,Spring boot 自学笔记(一) hello world 代码
spring和rabbitmq整合的helloworld
spring5.0的mvc项目实例,HelloWorld实例,基于eclipse oxygen jee 的maven project
1. 先配置 nacos server 2. 启动 ProviderApplication.java类 3. 启动 ConsumerApplication.java类 4. 浏览器中输入 http://localhost:8082/say/hello
我自己写的Spring MVC的一个HelloWold,从建HelloWorld工程,搭建环境Install spring,配置web.xml,配置SpringMVC的配置文件springDispatcherServlet-servlet.xml,添加控制器类,建jsp页面,部署 Tomcat,最后运行...
采用spring3.0 mvc 注解的方式,在页面显示helloworld
spring4-mvc-gradle-xml-hello-world, Gradle + spring 4 MVC Hello World 示例( XML ) Gradle --spring-4 MVC Hello Worldspring 4 MVC + JSP视图+ XML配置模板,使用Gradle构建工具。使用的###1. 技术Gradle 2.0...
spring-boot-helloWorld:spring-boot的helloWorld版本 spring-boot-mybaits-annotation:注解版本 spring-boot-mybaits-xml:xml配置版本 spring-boot-mybatis-mulidatasource:springboot+mybatis多数据源最简解决...
编译通过了,是在Eclipse平台开发Spring程序的小例子。入门可以看看~~
Spring入门,基本配置信息,JavaBean的书写,配置文件的格式,配置文件的要求,Spring 所需的jar包,applcationContext的相关介绍
使用SpringData JPA来简化数据库操作的基本实现步骤