SSM框架理解

最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫不客气地指出。

Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

SSM框架整合
要让几个框架相互配合,配置文件怎么写,项目的目录结构怎么设计对我这样一个新手来说实在很头疼。
目前我也只刚刚写过一个用户登录的demo,在此记录一下。

项目目录结构

-LoginDemo
-src
-项目主包
-controller
-mapper
-entity
-service
-web
-WEB-INF
-log4j.properties
-spring-mybatis.xml
-springMVC-config.xml
-web.xml
-index.jsp
-pom.xml

需要引入的包
pom.xml

  1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
4 <modelVersion>4.0.0</modelVersion>
5 <name>LoginDemo</name>
6 <groupId>com.cyan</groupId>
7 <artifactId>ssm</artifactId>
8 <packaging>war</packaging>
9 <version>1.0-SNAPSHOT</version>
10 <url>http://maven.apache.org</url>
11
12
13 <build>
14 <finalName>ssm</finalName>
15 <plugins>
16 <!--mybatis 逆向工程插件-->
17 <plugin>
18 <groupId>org.mybatis.generator</groupId>
19 <artifactId>mybatis-generator-maven-plugin</artifactId>
20 <version>1.3.2</version>
21 <configuration>
22 <verbose>true</verbose>
23 <overwrite>true</overwrite>
24 </configuration>
25 </plugin>
26 <plugin>
27 <groupId>org.apache.maven.plugins</groupId>
28 <artifactId>maven-compiler-plugin</artifactId>
29 <configuration>
30 <source>1.6</source>
31 <target>1.6</target>
32 </configuration>
33 </plugin>
34 </plugins>
35 </build>
36
37
38 <properties>
39 <spring.version>4.1.1.RELEASE</spring.version>
40 </properties>
41
42
43
44 <dependencies>
45 <!-- springframe start -->
46 <dependency>
47 <groupId>org.springframework</groupId>
48 <artifactId>spring-core</artifactId>
49 <version>${spring.version}</version>
50 </dependency>
51
52 <dependency>
53 <groupId>org.springframework</groupId>
54 <artifactId>spring-web</artifactId>
55 <version>${spring.version}</version>
56 </dependency>
57
58 <dependency>
59 <groupId>org.springframework</groupId>
60 <artifactId>spring-oxm</artifactId>
61 <version>${spring.version}</version>
62 </dependency>
63
64 <dependency>
65 <groupId>org.springframework</groupId>
66 <artifactId>spring-tx</artifactId>
67 <version>${spring.version}</version>
68 </dependency>
69
70 <dependency>
71 <groupId>org.springframework</groupId>
72 <artifactId>spring-jdbc</artifactId>
73 <version>${spring.version}</version>
74 </dependency>
75
76 <dependency>
77 <groupId>org.springframework</groupId>
78 <artifactId>spring-webmvc</artifactId>
79 <version>${spring.version}</version>
80 </dependency>
81
82 <dependency>
83 <groupId>org.springframework</groupId>
84 <artifactId>spring-aop</artifactId>
85 <version>${spring.version}</version>
86 </dependency>
87
88 <dependency>
89 <groupId>org.springframework</groupId>
90 <artifactId>spring-context-support</artifactId>
91 <version>${spring.version}</version>
92 </dependency>
93
94 <dependency>
95 <groupId>org.springframework</groupId>
96 <artifactId>spring-test</artifactId>
97 <version>${spring.version}</version>
98 </dependency>
99 <!-- springframe end -->
100
101 <!--aspectj start-->
102 <dependency>
103 <groupId>org.aspectj</groupId>
104 <artifactId>aspectjweaver</artifactId>
105 <version>1.8.6</version>
106 </dependency>
107
108 <dependency>
109 <groupId>org.aspectj</groupId>
110 <artifactId>aspectjrt</artifactId>
111 <version>1.8.6</version>
112 </dependency>
113 <!--aspectj end-->
114
115 <!--c3p0-->
116 <dependency>
117 <groupId>com.mchange</groupId>
118 <artifactId>c3p0</artifactId>
119 <version>0.9.5.1</version>
120 </dependency>
121
122 <!--servlet/jsp api start-->
123 <dependency>
124 <groupId>javax.servlet</groupId>
125 <artifactId>servlet-api</artifactId>
126 <version>2.5</version>
127 </dependency>
128
129 <dependency>
130 <groupId>javax.servlet.jsp</groupId>
131 <artifactId>jsp-api</artifactId>
132 <version>2.1</version>
133 <scope>provided</scope>
134 </dependency>
135 <!--servlet/jsp api end-->
136
137 <!--junit4-->
138 <dependency>
139 <groupId>junit</groupId>
140 <artifactId>junit</artifactId>
141 <version>4.11</version>
142 <scope>test</scope>
143 </dependency>
144
145 <!--mybatis-->
146 <dependency>
147 <groupId>org.mybatis</groupId>
148 <artifactId>mybatis</artifactId>
149 <version>3.3.0</version>
150 </dependency>
151 <!--mybatis spring整合-->
152 <dependency>
153 <groupId>org.mybatis</groupId>
154 <artifactId>mybatis-spring</artifactId>
155 <version>1.2.3</version>
156 </dependency>
157
158 <!--mysql driver-->
159 <dependency>
160 <groupId>mysql</groupId>
161 <artifactId>mysql-connector-java</artifactId>
162 <version>5.1.6</version>
163 </dependency>
164
165 <!--jstl-->
166 <dependency>
167 <groupId>jstl</groupId>
168 <artifactId>jstl</artifactId>
169 <version>1.2</version>
170 </dependency>
171
172 </dependencies>
173 </project>

配置文件
web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
5 version="3.1">
6
7 <!-- Spring ApplicationContext 载入 -->
8 <listener>
9 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10 </listener>
11
12 <!-- SpringMVC核心Servlet -->
13 <servlet>
14 <servlet-name>springMVC-config</servlet-name>
15 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
16 <init-param>
17 <param-name>contextConfigLocation</param-name>
18 <param-value>classpath:/WEB-INF/springMVC-config.xml</param-value>
19 </init-param>
20 </servlet>
21
22 <!-- 拦截所有请求 -->
23 <servlet-mapping>
24 <servlet-name>springMVC-config</servlet-name>
25 <url-pattern>/</url-pattern>
26 </servlet-mapping>
27
28 <!-- spring配置文件加载 -->
29 <context-param>
30 <param-name>contextConfigLocation</param-name>
31 <param-value>classpath:WEB-INF/spring-mybatis.xml</param-value>
32 </context-param>
33
34 </web-app>

spring-mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:p="http://www.springframework.org/schema/p"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
7 xsi:schemaLocation="http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
9 http://www.springframework.org/schema/context
10 http://www.springframework.org/schema/context/spring-context-3.2.xsd
11 http://www.springframework.org/schema/tx
12 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
13
14 <!-- 自动搜索bean -->
15 <context:annotation-config/>
16 <context:component-scan base-package="com.cyan" />
17
18 <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
19 <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
20 <property name="url" value="jdbc:mysql://localhost:3306/Demo"/>
21 <property name="username" value="root"/>
22 <property name="password" value="2233"/>
23 </bean>
24
25 <!-- mybatis核心bean -->
26 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
27 <property name="dataSource" ref="datasource"/>
28 <!-- 这句配置mapper配置文件的位置 如果采用注解的方式这句可以省去 -->
29 <!--<property name="mapperLocations" value="classpath:/WEB-INF/Mappers/*.xml" />-->
30 </bean>
31
32 <!-- 自动搜索mapper接口 -->
33 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
34 <property name="basePackage" value="com.cyan.Mapper" />
35 </bean>
36
37
38 <!-- 事务处理 -->
39 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
40 <property name="dataSource" ref="datasource"/>
41 </bean>
42
43 <tx:advice id="txAdvice" transaction-manager="txManager">
44 <tx:attributes>
45 <tx:method name="insert*" propagation="REQUIRED"/>
46 <tx:method name="delete*" propagation="REQUIRED"/>
47 <tx:method name="update*" propagation="REQUIRED"/>
48 <tx:method name="select*" propagation="SUPPORTS"/>
49 </tx:attributes>
50 </tx:advice>
51
52 <aop:config>
53 <aop:pointcut id="serviceCut" expression="execution(public * Service.*.*(..))" />
54 <aop:advisor pointcut-ref="serviceCut" advice-ref="txAdvice" />
55 </aop:config>
56
57
58 </beans>

springMVC-config.xml

 1 <beans xmlns="http://www.springframework.org/schema/beans"
2 xmlns:context="http://www.springframework.org/schema/context"
3 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="
5 http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-3.0.xsd
9 http://www.springframework.org/schema/mvc
10 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
11
12 <!--spring可以自动去扫描base-pack下面或者子包下面的java文件,
13 如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean-->
14 <context:component-scan base-package="com.cyan.Controller">
15 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
16 <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
17 </context:component-scan>
18
19 <mvc:annotation-driven />
20 <mvc:default-servlet-handler/>
21
22 <!-- 配置jsp文件的前后缀 “/”代表的是项目设定的Resource目录 -->
23 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
24 <property name="prefix" value="/"/>
25 <property name="suffix" value=".jsp" />
26 </bean>
27
28 </beans>

数据库表结构

详细类设计
-mapper
UserMapper

 1 package com.cyan.Mapper;
2
3 import com.cyan.Model.User;
4 import org.apache.ibatis.annotations.Param;
5 import org.apache.ibatis.annotations.Select;
6
7 import javax.annotation.Resource;
8 import java.util.List;
9
10 /**
11 * Created by cyan on 16/3/29.
12 */
13
14 public interface UserMapper {
15 @Select("select * from LoginDemo")
16 public List<User> selectUser();
17 @Select("select * from LoginDemo where username=#{username}")
18 public List<User> selectUserByUsername(@Param("username")String username);
19
20 }

-entity
User

 1 package com.cyan.Entity;
2
3 /**
4 * Created by cyan on 16/3/29.
5 */
6 public class User {
7 private int id;
8 private String username,password,slogan;
9
10 public int getId() {
11 return id;
12 }
13
14 public void setId(int id) {
15 this.id = id;
16 }
17
18 public String getUsername() {
19 return username;
20 }
21
22 public void setUsername(String username) {
23 this.username = username;
24 }
25
26 public String getPassword() {
27 return password;
28 }
29
30 public void setPassword(String password) {
31 this.password = password;
32 }
33
34 public String getSlogan() {
35 return slogan;
36 }
37
38 public void setSlogan(String slogan) {
39 this.slogan = slogan;
40 }
41
42 }

-service
IUserService

 1 package com.cyan.Service;
2
3 import com.cyan.Entity.User;
4
5 /**
6 * Created by cyan on 16/3/31.
7 */
8 public interface IUserService {
9 public User getUserByName(String name);
10 public boolean verify(String username,String pwd);
11 }

UserService

Spring中的几个标签@Component(声明一个类是Spring容器管理的类,可以细分为后面提到的三个标签)、@Controller(控制层)、@Service(服务层)、@Repository(持久层)。标签的作用是让Spring根据名字关联到这个类。

@Autowired标签默认以byType的形式注入,使用这个标签是不需要getter和setter方法的。(这次代码中因为用户名密码校验部分要用到get方法所以写上了)
可以配合@Qualifier标签根据bean的id来装配。

 1 package com.cyan.Service;
2
3 import com.cyan.Mapper.UserMapper;
4 import com.cyan.Entity.User;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Service;
7
8 /**
9 * Created by cyan on 16/3/31.
10 */
11
12 @Service("userService")
13 public class UserService implements IUserService{
14
15 @Autowired
16 private UserMapper userMapper;
17
18 public void setUserMapper(UserMapper userMapper) {
19 this.userMapper = userMapper;
20 }
21
22 @Override
23 public User getUserByName(String name) {
24 return userMapper.selectUserByUsername(name).get(0);
25 }
26
27 @Override
28 public boolean verify(String username, String pwd) {
29 if(userMapper.selectUserByUsername(username).get(0).getPassword().equals(pwd))
30 return true;
31 else return false;
32 }
33
34 }

-controller
Login

 1 package com.cyan.Controller;
2
3 import com.cyan.Service.IUserService;
4 import org.springframework.beans.factory.annotation.Autowired;
5 import org.springframework.stereotype.Controller;
6 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.bind.annotation.RequestMethod;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 /**
13 * Created by cyan on 16/3/29.
14 */
15
16 @Controller
17 public class Login {
18
19 @Autowired
20 private IUserService userService;
21
22 @RequestMapping("/index")
23 public String index(){
24 return "index";
25 }
26
27 @RequestMapping(value ="/login",method = RequestMethod.POST)
28 public String login(HttpServletRequest req, HttpServletResponse resp){
29 String username=req.getParameter("username");
30 String pwd=req.getParameter("password");
31 if(userService.verify(username,pwd)){
32 req.getSession().setAttribute("user",userService.getUserByName(username));
33 return "success";
34 }
35 else return "index";
36
37 }
38 }

jsp页面
index.jsp

 1 <%--
2 Created by IntelliJ IDEA.
3 User: cyan
4 Date: 16/3/29
5 Time: 15:55
6 To change this template use File | Settings | File Templates.
7 --%>
8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
9 <html>
10 <head>
11 <title>Login</title>
12 </head>
13 <body>
14 <form action="/login" method="post">
15 用户名:<input type="text" name="username" id="username"/>
16 <br>
17 密码:<input type="password" name="password" id="password"/>
18 <br>
19 <input type="submit" value="登录"/>
20 </form>
21 </body>
22 </html>

success.jsp

 1 <%@ page import="com.cyan.Entity.User" %><%--
2 Created by IntelliJ IDEA.
3 User: cyan
4 Date: 16/3/31
5 Time: 23:45
6 To change this template use File | Settings | File Templates.
7 --%>
8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
9 <html>
10 <head>
11 <title>LoginSuccess</title>
12 </head>
13 <body>
14 登录成功!
15 <%
16 User user=(User)session.getAttribute("user");
17 %>
18 用户名:<%=user.getUsername()%><br>
19 个性签名:<%=user.getSlogan()%><br>
20 </body>
21 </html>

运行结果

>作者:cyan
>欢迎访问我的博客www.cyancyr.me

>项目源码下载 https://github.com/verlen/SSMDemo

http://www.cnblogs.com/verlen11/p/5349747.html

SSM框架理解(转)的更多相关文章

  1. ssm框架理解

    SSM框架理解 最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫 ...

  2. SSM框架理解搭建(虽然是网上拼的,但是实际按照搭建是可以的)——

    SpringSpring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象.Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地 ...

  3. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  4. SSM 框架 ---项目整合

    一.SSM框架理解 Spring(业务层) Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象. Spring的核心思想是IoC(控 ...

  5. Maven创建Web项目、、、整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  6. SSM框架中IoC、DI与AOP的理解

    框架封装了普通项目中程序员需要重复书写的代码和调用过程,就比如说在传统的jsp项目中,我们的controller接收到前端的请求然后程序员就需要去开发Dao层,里面还涉及数据库的连接和存储过程的代码, ...

  7. SpringMVC--从理解SpringMVC执行流程到SSM框架整合

    前言 SpringMVC框架是SSM框架中继Spring另一个重要的框架,那么什么是SpringMVC,如何用SpringMVC来整合SSM框架呢?下面让我们详细的了解一下. 注:在学习SpringM ...

  8. 从项目中理解SSM框架

    我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...

  9. 关于Java Web结构和SSM框架的理解

    Java Web常见的三层结构 表现层:也就是Web层,常见的框架有Spring MVC.Struts2 ,并包括用于展示的界面,如JSP界面:业务层:Service层,专注于业务逻辑的实现:持久层: ...

随机推荐

  1. Qt Quick鼠标事件处理、键盘、计时器

    在<Qt Quick 事件处理之信号与槽>中介绍了 QML 中怎样使用内建类型的信号以及怎样自己定义信号,这次我们来看看怎样处理鼠标.键盘.定时器等事件.这些时间在处理时,一般是通过信号来 ...

  2. Swift - 内存泄露原因(循环强引用)及解决办法

    Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情 ...

  3. 进阶-案例九: WD中实现export 到Excel,Doc,Txt.

    1.导出excel 文件代码 导出事件代码: METHOD onactionimport . *导出excel: DATA: lo_node TYPE REF TO if_wd_context_nod ...

  4. 10165 - Stone Game(Nim游戏)

    UVA 10165 - Stone Game 题目链接 题意:给定n堆石子,每次能在一堆取1到多个.取到最后一个赢,问谁赢 思路:就裸的的Nim游戏,利用定理求解 代码: #include <s ...

  5. Javascript实现简单的富文本编辑器

    <span style="font-size:14px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T ...

  6. Android L动画入门

    Android L带来了许多新特性,其中就包括了大量的动画效果,你可以在自己的应用中使用.本文中我将详解这些动画和如何在应用中使用.本文中的所有代码可以在github上找到. 波纹和强调 现在安卓支持 ...

  7. 怎样高速正确的安装 Ruby, Rails 执行环境

    对于新入门的开发人员,怎样安装 Ruby, Ruby Gems 和 Rails 的执行环境可能会是个问题,本页主要介绍怎样用一条靠谱的路子高速安装 Ruby 开发环境. 次安装方法相同适用于产品环境! ...

  8. android之LruCache源代码解析

    移动设备开发中,因为移动设备(手机等)的内存有限,所以使用有效的缓存技术是必要的.android提供来一个缓存工具类LruCache,开发中我们会经经常使用到,以下来他是怎样实现的. 在package ...

  9. hdu 4707 Pet 2013年ICPC热身赛A题 dfs水题

    题意:linji的仓鼠丢了,他要找回仓鼠,他在房间0放了一块奶酪,按照抓鼠手册所说,这块奶酪可以吸引距离它D的仓鼠,但是仓鼠还是没有出现,现在给出一张关系图,表示各个房间的关系,相邻房间距离为1,而且 ...

  10. SAE php 研究(2)

    1.在SAE新建项目打印出phpinfo <?php  print phpinfo(); ?> 2. 可见:PHP Version 5.3.8 [使用的是php5.3.8编译的] 3. 可 ...