概述
看到自己第一次写的SSM框架搭建,简直惨不忍睹!很想把他给删了,但是我觉得应该把它保留,以提醒自己多么“渺小”,只有不断学习才能强大自我!
这篇博客也是我边看《精通Spring 4.x 企业应用开发实战》边写博客,记录自己搭建框架的历程,加强印象!
一、环境准备:
- jdk 1.8
- eclipse(没有使用IDEA,有兴趣的朋友可以试一下)
- apache-maven-3.3.9
- mysql 5.7
- spring 4.3.2.RELEASE
二、新建Maven工程
目录结构如下:
1.先配置pom.xml文件:
首先是依赖的Spring的jar包
<!-- 依赖的spring模块类库 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
这些都是常规配置,可以直接去maven仓库寻找对应的jar包,下载方法啥的网上一大堆,不再赘述。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
这些jar也是Spring开源的jar,不过第一个是用来连接数据库的,这里直接使用的是Spring薄层封装的jdbc,并没有使用mybatis或者hibernate持久层框架。MVC也是使用的Spring MVC。
<!-- 依赖的数据库驱动类 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 依赖了的连接池类库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commons-dbcp.version}</version>
</dependency>
<!-- 依赖的web类库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${servlet-jstl.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
以上这些是数据库连接驱动,数据库连接池,web相关的jar与Junit测试的包。
三、Spring配置文件
<!-- 1.扫描类包,将标注Spring注解的类自动转化为bean,同时完成bean注入 -->
<context:component-scan base-package="com.smart.dao" />
<context:component-scan base-package="com.smart.service" />
<!-- 加载配置属性文件 -->
<context:property-placeholder
ignore-unresolvable="false" location="classpath:jdbc.properties" />
<!-- 2.定义一个DBCP实现的数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 定义jdbc模板bean -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 3.配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 通过AOP配置提供事务增强 -->
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceMethod"
expression="(execution(* com.smart.service..*(..))) and (@annotation(org.springframework.transaction.annotation.Transactional))"></aop:pointcut>
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"></aop:advisor>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"></tx:method>
</tx:attributes>
</tx:advice>
每一个配置注解已经说明其作用,唯独不太理解的是AOP事物增强的作用在那里?还要继续努力才是。
四、web.xml 配置
<!-- 1.从类路径下加载Spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/smart-context.xml</param-value>
</context-param>
<!-- 2.负责启动Spring容器监听器,它将引用1位置配置的上下文参数活的Spring配置文件的地址 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 3.Spring MVC的主控servlet -->
<servlet>
<servlet-name>smart</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- spring MVC处理的URL -->
<servlet-mapping>
<servlet-name>smart</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
可以看出,web.xml的配置是非常简洁的,对于这次简单的小demo足矣!
五、xxx-servlet.xml 配置
<!-- 1.扫描web包,应用Spring MVC的注解 -->
<context:component-scan base-package="com.smart.web"></context:component-scan>
<!-- 2.配置视图解析器,将ModelAndViewj及字符串解析为具体的页面 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
这个也极其简单,先说其路径是存放在WEB-INF下,如果没有在文件中配置其所在位置,默认实在这个位置找名字如xxx-servlet.xml的配置文件。这里指定视图解析的类,与视图拼装的路径。再就是扫描Spring MVC的注解。
六、控制器编写
package com.smart.web;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.smart.domain.User;
import com.smart.service.UserService;
/**
* @author 作者 louys:
* @version 创建时间:2017年9月13日 上午8:51:45 类说明
*/
@Controller
public class LoginController {
@Autowired
private UserService userService;
@RequestMapping(value = "/index.html")
public String loginPage() {
return "login";
}
@RequestMapping(value = "/loginCheck.html")
public ModelAndView loginCheck(HttpServletRequest req, LoginCommand loginCommand) {
boolean isValidUser = userService.hasMatchUser(loginCommand.getUserName(), loginCommand.getPassword());
if (!isValidUser) {
return new ModelAndView("login", "error", "用户名或者密码错误!");
} else {
User user = userService.findUserByUserName(loginCommand.getUserName());
user.setLastIp(req.getLocalAddr());
user.setLastVisit(new Date());
userService.loginSuccess(user);
req.getSession().setAttribute("user", user);
}
return new ModelAndView("main");
}
}
映射路径配置为/loginCheck.html,会被配置的默认servlet处理器拦截,然后派发下去找到对应的处理器,处理该次请求;请求结果以及视图会放在ModelAndView中,即模型视图里面。再由配置的视图解析器找到对应的jsp页面,jsp页面取出放在model里面的数据,显示出来。
代码已经上传,大家可以参考,不对的地方还望大家给出宝贵意见。菜鸟在这里谢过~
代码路径:https://github.com/ls0111/Test
也可以在CSDN上面下载,地址:(上传审核有点慢,明天上传地址)
最后
以上就是追寻哈密瓜为你收集整理的极简Spring框架搭建Demo的全部内容,希望文章能够帮你解决极简Spring框架搭建Demo所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复