1. 程式人生 > >使用SSM框架搭建Web伺服器實現登入功能(Spring+SpringMVC+Mybatis)

使用SSM框架搭建Web伺服器實現登入功能(Spring+SpringMVC+Mybatis)

SSM框架搭建流程

上面連結總結的流程很好,但是該流程沒有加入DAO這一層,經過分析本專案原始碼,流程應該是這樣的:

database–>Entity.java–>mapper.xml–>Mapper.java–>Dao.java–>DaoImpl.java–>Service.java–>ServiceImpl.java–>Controller.java–>login.jsp

  • 根據需要建立資料庫、資料表、欄位;
  • 根據表中欄位建立實體類;
  • 在Mapper中實現對資料庫的增刪改查操作;
  • 設計DAO(data access object)資料操作物件介面;
  • 設計Service,通過DAO獲取物件,然後進行業務邏輯實現;
  • 設計控制層Controller,用於從頁面獲取請求,呼叫Service處理並將處理結果返回給頁面。

根據上面所列,下面就按照這個流程進行設計。

資料庫設計

使用MySQL資料庫:

  • 建立資料庫 DB_TEST
CREATE DATABASE DB_TEST;
  • 建立使用者表 T_USER
CREATE TABLE T_USER (
    ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
    USERNAME VARCHAR(16) NOT NULL,
    PASSWORD VARCHAR
(16) NOT NULL );
  • 插入一條使用者資訊
INSERT INTO T_USER (USERNAME,PASSWORD) VALUES ("admin","123");

建立USER實體類

public class User {

   private int id;
   private String username;
   private String password;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public
String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

Mapper實現增刪改查

  • UserMapper介面,定義通過使用者名稱獲取使用者物件的方法
public interface UserMapper {

    public User getUserByName(String username);
}
  • usermapper.xml,用於操作資料庫,實現介面中的方法
  <mapper namespace="com.crm.mapper.UserMapper">

    <resultMap type="com.crm.entity.User" id="userMap">
        <id property="id" column="id" />
        <result property="username" column="username" />
        <result property="password" column="password" />        
    </resultMap>

    <!-- 此處select標籤的id值對應Mapper類中方法名 -->
    <select id="getUserByName" parameterType="string" resultMap="userMap">
            <!-- 此處寫sql語句,#{Mapper類傳入的引數} -->
            select * from T_USER where username = #{username}
    </select>
</mapper>

DAO 資料操作物件

  • DAO介面 UserDao.java
public interface UserDao {
    //介面方法,通過使用者名稱得到User物件
    public User findUserByName(String username);
}
  • DAO介面實現 UserDaoImpl.java

@Repository對應資料訪問層Bean

@Repository(value=”userDao”)註解是告訴Spring,讓Spring建立一個名字叫“userDao”的UserDaoImpl例項。

當Service需要使用Spring建立的名為“userDao”的UserDaoImpl例項時, 
就可以使用@Resource(name =”userDao”)註解告訴Spring,Spring把建立好的userDao注入給Service即可。

@Repository("userDao")
public class UserDaoImpl implements UserDao {
    //註解引用Mapper類資源
    @Resource(name = "userMapper")
    private UserMapper userMapper;

    /* 根據使用者名稱查詢使用者物件 */
    public User findUserByName(String username) {
        //呼叫Mapper類從資料庫中得到User物件
        return userMapper.getUserByName(username);
    }
}

業務層 Service

  • 業務層介面 UserService.java
public interface UserService {
    // 通過使用者名稱及密碼核查使用者登入
    public User checkLogin(String username, String password);
}
  • 業務層介面實現類 UserServiceImpl.java

@Service對應的是業務層Bean

這樣當Action需要使用UserServiceImpl的的例項時,就可以由Spring建立好的”userService”注入給Action:在Action只需要宣告一個名字叫“userService”的變數來接收由Spring注入的”userService”即可

@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    /* 登陸驗證 */
    public User checkLogin(String username, String password) {
        //根據使用者名稱例項化使用者物件
        User user = userDao.findUserByName(username);
        if (user != null && user.getPassword().equals(password)) {
            return user;
        }
        return null;
    }
}

控制層 Controller

@Controller對應表現層的Bean,也就是Action

注意:如果@Controller不指定其value【@Controller】,則預設的bean名字為這個類的類名首字母小寫,如果指定value【@Controller(value=”UserAction”)】或者【@Controller(“UserAction”)】,則使用value作為bean的名字。

@Scope(“prototype”)表示將Action的範圍宣告為原型

可以利用容器的scope=”prototype”來保證每一個請求有一個單獨的Action來處理,避免struts中Action的執行緒安全問題。

spring 預設scope 是單例模式(scope=”singleton”),這樣只會建立一個Action物件,每次訪問都是同一Action物件,資料不安全。

struts2 是要求每次次訪問都對應不同的Action,scope=”prototype” 可以保證當有請求的時候都建立一個Action物件

@RequestMapping(“/user”)

RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

本專案中,該Controller類RequestMapping(”user”) 
該Controller類的login方法RequestMapping(”login”) 
所以登入頁面中使用者登入的 action=”/ssm/user/login”

@Controller
@Scope(value="prototype")
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @RequestMapping(value="/login",method=RequestMethod.POST)
    public String login(User user,Model model) throws Exception {
        user=userService.checkLogin(user.getUsername(), user.getPassword());
        if(user!=null){
            model.addAttribute(user);
            return "welcome";// 路徑 WEB-INF/pages/welcome.jsp            
        }
        return "fail";
    }
}

頁面 JSP

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>使用者登入</title>
</head>

<body>
    <form action="/ssm/user/login" method="post" id="myform">
        <input type="text" id="username" name="username"/>
        <input type="password" id="password" name="password"/>
        <input type="submit" value="提交" id="login" />
    </form>
</body>

</html>

DEMO工程中的所有配置檔案

applicationContext.xml

這個檔案是Spring公共配置檔案,下面分塊進行解析。

  • 資料庫配置檔案database.properties的引入
    <bean id="property"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
            <!-- classpath 即src根目錄 -->              
            <value>classpath:database.properties</value>
            </list>
        </property>
    </bean>
  • 資料庫連線池的配置

資料庫連線池可以讓伺服器預先與資料庫建立部分連線,存入記憶體中,以減少連線資料庫的耗時操作。 
此處定義使用C3P0連線池的資料來源。

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">

        <!-- 指定連線資料庫的JDBC驅動 -->
        <property name="driverClass">
            <value>${mysql.driver_class}</value>
        </property>

        <!-- 連線資料庫所用的URL -->
        <property name="jdbcUrl">
            <value>${mysql.connection.url}</value>
        </property>

        <!-- 連線資料庫的使用者名稱 -->
        <property name="user">
            <value>${mysql.connection.username}</value>
        </property>

        <!-- 連線資料庫的密碼 -->
        <property name="password">
            <value>${mysql.connection.password}</value>
        </property>

        <!-- 設定資料庫連線池的最大連線數 -->
        <property name="maxPoolSize">
            <value>30</value>
        </property>

        <!-- 設定資料庫連線池的最小連線數 -->
        <property name="minPoolSize">
            <value>2</value>
        </property>

        <!-- 設定資料庫連線池的初始化連線數 -->
        <property name="initialPoolSize">
            <value>2</value>
        </property>

        <!-- 設定資料庫連線池的連線的最大空閒時間,單位為秒 -->
        <property name="maxIdleTime">
            <value>10</value>
        </property>
    </bean>
  • 自動掃描配置

使用< context:component-scan>標籤後,spring可以自動去掃描base-pack下面或者子包下面的java檔案,如果掃描到有@Component @[email protected]等這些註解的類,則把這些類註冊為bean

    <context:component-scan base-package="com.crm.*">
        <!-- 不掃描註解為controller的型別 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
  • 整合Mybatis

SqlSessionFactoryBean是一個工廠bean,它的作用就是解析配置(資料來源、別名等)。

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <!-- 引用上面已經配置好的資料庫連線池 -->
        <property name="dataSource" ref="dataSource" />

        <!-- Mybatis的配置檔案路徑 -->
        <property name="configLocation" value="classpath:mybatis.xml" />

        <!-- mapper配置路徑 -->
        <property name="mapperLocations">
            <list>
                <value>classpath:com/crm/mapper/*.xml</value>
            </list>
        </property>
    </bean>
  • Mapper掃描配置

dao需要配置,如果數量大不適合一個個配置,需要使用mapper自動掃描來批量進行配置。

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.crm.mapper" />
    </bean>
  • Mybatis事務管理配置
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

資料庫配置檔案database.properties

mysql.driver_class=com.mysql.jdbc.Driver
<!-- DB_TEST為新建的資料庫名 -->
mysql.connection.url=jdbc:mysql://localhost:3306/DB_TEST
<!-- 登入資料庫的使用者名稱密碼 -->
mysql.connection.username=root
mysql.connection.password=root

日誌管理檔案 log4j.properties

此處省略,入門階段暫不考慮這麼高階的日誌用法。

Mybatis配置檔案

通過使用別名,可以縮短類名的長度,但是隻能在配置檔案中使用。

<configuration>
    <!-- 別名 -->
    <typeAliases>
        <typeAlias type="com.crm.entity.User" alias="user" />
    </typeAliases>
</configuration>

web配置檔案

此配置檔案註釋比較清楚,就不單獨解析了。

    <display-name>crm</display-name>

    <!--一個server下如果有多個專案,要對webAppRootKey進行配置,讓log能將日誌寫到對應專案根目錄下-->
    <context-param>
           <param-name>webAppRootKey</param-name>
           <param-value>crm.root</param-value>
    </context-param> 

    <!-- 由Sprng載入的Log4j配置檔案位置 -->
    <context-param>
           <param-name>log4jConfigLocation</param-name>
           <param-value>classpath:log4j.properties</param-value>
    </context-param>

    <!-- Spring預設重新整理Log4j配置檔案的間隔,單位為millisecond -->
    <context-param>
           <param-name>log4jRefreshInterval</param-name>
           <param-value>60000</param-value>
    </context-param>

    <!-- Web 專案 Spring 載入 Log4j 的監聽  -->
    <listener> 
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 

    <!-- 設定Spring容器載入配置檔案路徑 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:springContext/*Context.xml</param-value>
    </context-param>

    <!-- 載入Spring容器配置 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 防止記憶體洩漏的監聽器 -->
      <listener>
        <listener-class>
            org.springframework.web.util.IntrospectorCleanupListener
        </listener-class>
      </listener>

    <!-- 配置Springmvc核心控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc.xml</param-value>
        </init-param>
        <!-- 立馬啟動servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- servlet-mapping配置 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 解決工程編碼過濾器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 設定預設開啟頁面列表 -->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

springmvc配置檔案

之前掃描專門忽略了Controller,在此處掃描。

例如在Controller類中常有類似return welcome這樣的語句

其實完整的應該是return WEB-INF/pages/welcome.jsp

    <!-- 註解Controller掃描器 -->
    <context:component-scan base-package="com.crm.controller"/>

    <!-- 靜態資源訪問 -->
     <mvc:resources location="/img/" mapping="/img/**"/>  
     <mvc:resources location="/js/" mapping="/js/**"/> 
     <mvc:resources location="/common/" mapping="/common/**"/>   

    <!-- 註解功能的預設配置,處理器和對映器 -->
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

    <!-- 前後綴配置 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

相關推薦

使用SSM框架搭建Web伺服器實現登入功能(Spring+SpringMVC+Mybatis)

SSM框架搭建流程 上面連結總結的流程很好,但是該流程沒有加入DAO這一層,經過分析本專案原始碼,流程應該是這樣的: database–>Entity.java–>mapper.xml–>Mapper.java–>Dao.java–>D

用MVP框架網路獲取資料實現登入功能

<?xml version="1.0" encoding="utf-8"?> xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" an

ssm框架搭建-整合logback實現日誌管理(spring5.0)

ssm(spring+springmvc+mybatis)框架搭建:整合mybatis-generato程式碼生成器,很純淨的基本搭建。 搭建環境:idea+Tomcat 8+jdk 8    用Maven進行管理 1.專案結構: 2.檔案對應說明,在readme裡

SSM 框架搭建 web 專案的思路整理

一、SSM框架 SSM 框架是三個框架的簡稱:spring,springMVC,MyBatis 1、Spring Spring 是一個開源框架,一個輕量級的,非侵入的 JEE 框架,兩個核心概念:控制反轉(IoC)和麵向切面程式設計(AOP)。控制反轉

IDEA多模組SSM框架搭建(IDEA+tomcat+maven+mysql+spring+spring mvc+mybatis)總結

Tomcat版本:8.5.27  jdk版本:1.8 Idea版本:2017.3.5 1.建立一個根模組 不勾選任何值,直接next      根模組建立成功如下: src目錄不需要可以刪除 2.建立javadao模組

SSM框架Web程式的流程(Spring SpringMVC Mybatis

SSM框架的Web程式主要用到了三個技術: Spring:用到了註解和自動裝配,就是Spring的兩個精髓IOC(反向控制)和 AOP(面向切面程式設計)。SpringMVC:用到了MVC模型,將邏

Django-Web框架實現登入功能

我們開啟../sign/templates/index.html檔案,實現一個登入功能。新增如下程式碼: <!DOCTYPE html> <html> <head> <title>Django Page</title> <

Android實現登入功能,Android與伺服器資料互動,使用tomcat、mysql實現登入的demo程式,web端和android均可實現登入

1.使用到的開發工具為:Eclipse(Java EE),Android Studio,MYSQL 5.7.21;2.首先在MYSQL資料庫建表,我這裡使用的資料庫視覺化操作軟體為:navicat premium:如圖:這裡你可以取自己喜歡的資料庫名字,但是為了方便起見,我建

ssm框架整合實現登入功能

一、準備所需的jar包1.1所需jar包 1.Spring框架jar包  2.Mybatis框架jar包  3.Spring的AOP事務jar包  4.Mybatis整合Spring中介軟體jar包  5.aspectj框架jar包  6.aop聯盟jar包  7.資料庫驅動

nginx功能之一 搭建web伺服器

一      nginx的優點           1、可以高併發連線           官方測試Nginx能夠支撐5萬併發連線,實際生產環境中可以支撐2~4萬併發連線數。           原因,主要是Nginx使用了最新的epoll(Linux2.6核心)和kq

web前端練習1----實現登入功能

效果圖: 思路: 1html+css 完成基本佈局 2Ajax請求資料完成登入功能 3把登入成功後的 token和使用者名稱傳到下個頁面 程式碼:我把所有程式碼:html css js 都寫在了一個檔案裡 Login.html <!DOCTYPE htm

ssm配置完成shiro,實現登入驗證的功能

花了一天時間,算是完成了shiro登入驗證的這一基本功能。 https://www.w3cschool.cn/shiro/andc1if0.html 這個教程可以多看看,核心的基礎功能很重要。 實現shiro 第一步,引入所需要的依賴 在pom.xml檔案中加入 &

如何自己成功搭建一個SSM框架WEB專案

工作中我們或多或少都需要自己搭建一個框架,現在常見的Java開源框架組合方式主要為:SSH,spring+springMVC+JDBC,SSM。 其中SSM目前無論是培訓機構培訓亦或是招聘。都會將會使用SSM框架作為一個重要能力來作為培訓或是招聘的重要目標之一,下面我將自己

SSM框架搭建------基於簡單的使用者登入註冊

新建一個web project 為SSM 配置WebRoot/WEB-INF/web.xml web配置的標籤及詳解 <?xml version="1.0" encoding="UTF-8"?> <web-app versio

SSM框架開發web專案系列(一) 環境搭建

前言   開發環境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL   主要框架:Spring + Spring MVC + Mybatis   目的:快速上手搭建SSM開發環境,熟悉客戶端請求到資料庫操作的流程。

從零開始Eclipse/Maven搭建SSM框架web應用(超詳細+100%可用+避坑版)

目前SSM框架(Spring+SpringMVC+Mybatis)依然是市場主流,如何搭建一個實用的SSM框架是很多同學都想學習的技能。但網路上的大多數教程要麼不完整,要麼還遺留了很多坑,即使嚴格按教程來也很難得到我們想要的結果。所以我就想自己寫一篇搭建攻略,即使零基礎的同學,按我的攻略步驟

ssm框架整合AOP,實現日誌記錄功能

在ssm框架中,實現一個切面日誌功能,起碼要掌握的知識有四點: 以下是自己之前做的一個專案,希望對你們有幫助 1:先定義一個自定義註解類 @Target({METHOD, TYPE}) @Retention(RetentionPolicy.RUNTIME) @In

ssm框架搭建+easyui增刪改查實現

原始碼下載頁面(一個完整的專案):http://download.csdn.net/detail/jinwufeiyang/9648208 資料庫檔案下載:http://download.csdn.net/detail/jinwufeiyang/9700588

SSM框架修改資料中實現圖片上傳功能

第一步:當然是需要加入必要的兩個jar包 commons-fileupload-1.3.jar、commons-io-1.2.jar 或者引入依賴: <dependency> <groupId>commons-

SSM框架搭建Spring+SpringMVC+MyBatis)與easyui整合並實現增刪改查實現

一、用myEclipse初始化Web專案        新建一個web project: 二、建立包 controller        //控制類 service//服務介面 service.impl//服務實現類 dao  //data access object