Spring3.0读书笔记----(二)快速入门
1 实例功能简介
简单的登录模块。登录页面提供一个带用户名/密码的输入表单,用户填写并提交表单后,服务器程序检查是否有匹配的用户名/密码。如果用户名/密码不匹配,返回到登录页面,并给出提示。如果用户名/匹配,记录用户的成功登录日志,更新用户的最后登录时间和IP并给用户增加5个积分,然后重定向到欢迎页面。
2 环境准备
环境准备包括数据库表的创建(MySQL数据库)、项目工程的创建、规划Spring配置文件。
2.1 创建库表
DROP DATABASE IF EXISTS sampledb;
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
USE sampledb;
-- 创建用户表
CREATE TABLE t_user(
user_id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(30),
credits INT,
user_password VARCHAR(32),
last_visit DATETIME,
last_ip VARCHAR(23)
);
-- 创建用户登录日志表
CREATE TABLE login_log(
login_log_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
ip VARCHAR(23),
login_datetime DATETIME
);
-- 插入初始化数据
INSERT INTO t_user(user_name,user_password) VALUES('admin','123456');
COMMIT;
2.2 建立工程
以前一直用的MyEclipse,后来据说大牛都是使用Eclipse,可以锻炼动手能力,那么就以Eclipse创建一个maven构建web项目为例。
2.2.1 new一个Maven Project
进入maven project页面之后,选择第二栏,点击next
在Filter中输入maven-archetype-webapp(建立web项目的模型)或者输入maven-archetype-quickstart(非web项目),这两种是比较常用的模型。现在以webapp(web项目为例)。
输入maven项目的基本信息
Group Id:一般来说groupId是由三个部分组成,每个部分之间以"."分隔,第一部分是项目用途,比如用于商业的就是"com",用于非营利性组织的就是"org";第二部分是公司名,比"tengxun"、"baidu"、"alibaba";第三部分是你的项目名。
Artifact Id:Maven构建的项目名称或者根目录的名称,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式。
Version:当前版本
Package:默认包结构,也可以不填
2.2.2 修改JDK
eclipse建立maven项目时,新建的项目往往是JDK1.5,项目会报红叉,所以要更改JDK在pom.xml中配置
<build>
<finalName>springtest</finalName>
<plugins>
<!-- 指定JDK1.7 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
配置完了之后点击项目名,右击选择“Build Path”——》“Configrue BuildPath”出现如图:
点击”JRE System Library[JavaSE-1-7]”(不能eclipse可能出现的版本不一样),再点击“edit”
选择“Workspace defaultJRE(jdk1.7.0_79)”然后选择 Finish
2.2.3 把maven项目转换为web项目
点击项目,右击-》选择Properties-》选择maven下的Project Facets
如果先前Dynamic web Module有打勾,先把勾去掉,Apply-》OK
重复上一步可以看到Dynamic web Module上没有打上勾,打勾,后出现 Furtherconfiguration available
点击Further configuration available,出现Modify web modulssettings,在Content directory上填入src/main/webapp ,并在Generate web.xml deploymentdescriptor上打勾-》OK-》Apply-》OK
最后的结果
2.2.3 规划Spring文件及配置
在pom.xml中引入依赖项,包括spring核心类库和测试框架,使用Spring-jdbc连接数据库
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.0.5.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
在Maven项目src/main/resources目录下创建applicationContext.xml的Spring配置文件,配置结果如下:
<!-- 1.扫描类包,将标注Spring注解的类自动转为Bean,同时完成Bean的注入 -->
<context:component-scan base-package="com.baobao.springtest.dao"/>
<!-- 2.定义一个使用DBCP实现的数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sampledb"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 3.定义jdbc模板Bean -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 4.扫描service类包,应用Spring的注解配置 -->
<context:component-scan base-package="com.baobao.springtest.service"/>
<!-- 5.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 6.通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务 -->
<!--
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(*com.baobao.springtest.service..*(..))" id="serviceMethod"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
-->
然后对web,xml文件进行配置,使得web容器能够自动启动Spring容器:
<!-- 1.从类路径下加载Spring配置文件,-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- classpath关键字特指类路径下加载 ,多个文件可以用逗号和空格分割,建议使用逗号 -->
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 2.负责启动Spring容器的监听器,它将引用1处上下文参数获得Spring配置文件地址 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 3.SpringMVC的主控Servlet -->
<servlet>
<servlet-name>baobao</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 4.SpringMVC处理的URL -->
<servlet-mapping>
<servlet-name>baobao</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
接下来配置SpringMVC的文件相关信息,该文件名与定义的servlet名有一个契约:
即采用<servlet 名>-servlet.xml的形式,并将文件放在WEB-INF下,这样可以无需再
通过web.xml的contextConfigLocation上下文参数进行声明。因为SpringMVC的servlet
会自动将该文件或者Spring其他的配置文件(-dao.xml、-service.xml等)进行拼装。
配置后效果使所有请求被SpringMVC截获后,首先根据请求的URL查找目标的处理控
制器,并将请求参数封装“命令”对象一起传给控制器处理,控制器调用Spring容器中的业
务Bean完成业务处理工作并返回结果视图。以下是配置信息:
<!-- 扫描web包,应用Spring的注解 -->
<context:component-scan base-package="com.baobao.springtest.web"/>
<!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- prefix指定在视图名前所添加的前缀 -->
<property name="prefix" value="/WEB-INF/"/>
<!-- suffix指定在视图名后所添加的后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
3 总结
通过一个简单的实例运用SpringMVC、SpringJDBC以及Spring的声明式事务技术熟悉
Maven项目下搭建Spring的容器