13.SSM框架集~Spring + SpringMVC + Mybatis 整合登錄案例

13.SSM框架集~Spring + SpringMVC + Mybatis 整合案例

本文是上一篇文章的後續,詳情點擊該鏈接

SpringMVC的響應

        我們可以使用SpringMVC搭建一個項目,在單元方法中使用SpringMVC提供的方式來獲取請求信息,然後根據功能需求,聲明請求處理的邏輯代碼,進行請求的處理。當請求處理完成後,我們需要將此次請求的處理結果響應給瀏覽器,以前我們是自己在Servlet中使用response對象來完成響應的

使用ServletAPI方式

@Controller
    @RequestMapping("/UserController")
    public void UserController(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //轉發,跳轉回去
        response.sendRedirect(request.getContextPath() + "/main.jsp");
    }

        單元方法的返回值類型設置void。因爲使用response對象在單元方法中直接對此次請求進行了響應,不再通過DispatcherServlet了,既然已經響應了,就不需要再給DispatcherServlet返回值了。在單元方法上聲明HttpServletResponse形參,來接收此次請求的response對象。

使用forward關鍵字完成響應

   @RequestMapping("/forWardJsp")
    public String ForWardJsp(String name,Integer age){
        //處理請求
        System.out.println(name + " " + age);
        //響應結果
        return "forward:/main.jsp";
    }

        使用通過單元方法的返回值來告訴DispatcherServlet請求轉發指定的資源,如果是請求轉發,forward關鍵字可以省略不寫的。

使用redirect關鍵字完成響應

    @RequestMapping("/redirectJsp")
    public String redirectJsp(String name,Integer age){
        //處理請求
        System.out.println(name + " " + age);
        //響應結果
        return "redirect:/main.jsp";
    }

        使用通過單元方法的返回值來告訴DispatcherServlet重定向指定的資源,注意這個redirect關鍵字不可以省去。

使用View視圖轉發和重定向

@RequestMapping("/Demo")
    public View Demo(HttpServletRequest request){
        //轉發
        //View   v=new InternalResourceView("/main.jsp");
        //重定向
        View  v =new RedirectView(request.getContextPath()+"/main.jsp");
        return  v;
    }

        RedirectView中所做的操作,最終的實現是在renderMergedOutputModel中完成實現的,簡單來說RedirectView實現了鏈接的重定向,並且將數據保存到FlashMap中,這樣在跳轉後的鏈接中可以獲取一些數據.

使用ModelAndView 轉發重定向

    @RequestMapping("/DemoS")
    public ModelAndView DemoS(HttpServletRequest request){
        ModelAndView view = new ModelAndView();
        //轉發一
        //view.setViewName("forward:/main.jsp");
        //重定向一
        //view.setViewName("redirect:/main.jsp");
        //轉發二
        //view.setView(new InternalResourceView("/main.jsp"));
        //重定向二
        view.setView(new RedirectView(request.getContextPath() + "/main.jsp"));
        return view;
    }

       ModelAndView中的Model代表模型,View代表視圖,這個名字就很好地解釋了該類的作用。業務處理器調用模型層處理完用戶請求後,把結果數據存儲在該類的model屬性中,把要返回的視圖信息存儲在該類的view屬性中,然後讓該ModelAndView返回該Spring MVC框架。

ResponseBody 響應 json 數據

關於ajax可以點擊這篇文章

       當瀏覽器發起一個ajax請求給服務器,服務器調用對應的單元方法處理ajax請求。 而ajax的請求在被處理完成後,其處理結果需要直接響應。而目前我們在單元方 法中響應ajax請求,使用的是response對象,需要我們自己將要響應的數據轉換 爲json字符串響應,比較麻煩,而我們一直希望在單元方法中無論是否是ajax請求,都使用return語句來完成資源的響應,既然我們希望使用單元方法的返回值來響應ajax請求的處理結果,而目前DispatcherServlet的底層會將單元方法的返回值按照請求轉發或者重定向來處理,所以就需要我們告訴DispatcherServlet,單元方法的返回值不要按照請求轉發或者重定向處理,而是按照直接響應處理,將單元方法的返回值直接響應給瀏覽器。

導入jackson的jar
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.9</version>
</dependency>
	
	//需要加上@ResponseBody,響應的結果直接是json對象,在前臺頁面無需轉換
    @RequestMapping("/AjaxTest")
    @ResponseBody
    public User AjaxTest(HttpServletResponse response) throws IOException {
        User user = new User(1,"alvin","man");
        return user;
    }
        <!--   導入jQuery    -->
        <script type="text/javascript" src="js/jquery-1.9.1.js"></script>

        <script type="text/javascript">
            $(function () {
                $.post("AjaxTest",function (result) {
                    console.log(result)
                });
            },"json")
        </script>

SSM整合案例

需求:SSM整合實現用戶登錄

在數據庫中創建用戶信息表

在這裏插入圖片描述

搭建好架構


在這裏插入圖片描述

先導入依賴

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.alvin</groupId>
  <artifactId>Login</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>Login Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <mysql-version>8.0.11</mysql-version>
    <mybatis-version>3.5.2</mybatis-version>
    <spring-version>5.2.2.RELEASE</spring-version>
    <mybatis-spring-version>2.0.4</mybatis-spring-version>
    <slf4j-version>1.7.25</slf4j-version>
    <jstl-version>1.2</jstl-version>
    <servlet-api-version>3.1.0</servlet-api-version>
    <jsp-version>2.2</jsp-version>
    <junit-version>4.12</junit-version>
    <jackson-version>2.9.9</jackson-version>
  </properties>

  <dependencies>
    <!--mysql的驅動依賴-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql-version}</version>
    </dependency>
    <!--mybatis的核心依賴-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis-version}</version>
    </dependency>
    <!--springIOC的核心依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring-version}</version>
    </dependency>

    <!--spring-jdbc連依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring-version}</version>
    </dependency>

    <!--spring-test依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring-version}</version>
    </dependency>
    <!--spring-webmvc依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring-version}</version>
    </dependency>

    <!--mybatis連接spring的依賴-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis-spring-version}</version>
    </dependency>

    <!--日誌依賴-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j-version}</version>
    </dependency>

    <!--jstl依賴-->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl-version}</version>
    </dependency>

    <!--jackson依賴-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson-version}</version>
    </dependency>

    <!--jsp-servlet-api-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet-api-version}</version>
      <scope>provided</scope>
    </dependency>

    <!--jsp-api-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>${jsp-version}</version>
      <scope>provided</scope>
    </dependency>

    <!--單元測試的依賴-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>

    <!--AOP的命名空間依賴-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>

    <!--文件上傳組件的依賴-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>

    <!--跨服務文件訪問依賴-->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <!--引入tomcat服務器插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!--指定tomcat的端口號-->
          <port>8888</port>
          <!--指定訪問的上下文路徑-->
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

配置Mybatis

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd">

        <!--把jdbc.properties文件引入-->
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

       <!--[A]連接數據庫 獲得數據源-->
       <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <property name="driverClassName" value="${m_driver}"></property>
           <property name="url" value="${m_url}"></property>
           <property name="username" value="${m_uname}"></property>
           <property name="password" value="${m_pwd}"></property>
       </bean>

       <!--[B]獲得sqlsession工廠-->
       <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean" >
           <property name="dataSource" ref="ds"></property>
           <property name="typeAliasesPackage" value="com.alvin.pojo"></property>
       </bean>

      <!--[C]掃描mapper文件-->
      <bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
          <property name="sqlSessionFactoryBeanName" value="factory"></property>
          <property name="basePackage" value="com.alvin.mapper"></property>
      </bean>
    
</beans>

配置service

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd">


      <!--包的掃描-->
      <context:component-scan base-package="com.alvin.service.impl"></context:component-scan>

    <!--AOP的切面操作-->

</beans>

配置Spring MVC

<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

      <!--@Controller-->
     <context:component-scan base-package="com.alvin.controller"></context:component-scan>

      <!--@RequestMapping-->
     <mvc:annotation-driven></mvc:annotation-driven>

    <!--靜態資源放行標籤-->
    <!--mapping:代表的是網絡中訪問的路徑  location:代表本地放行的文件位置-->
    <mvc:resources mapping="/img/**" location="/img/"></mvc:resources>

    <mvc:resources mapping="/css/**" location="/css/"></mvc:resources>

    <mvc:resources mapping="/js/**" location="/js/"></mvc:resources>

</beans>

配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>

  <!--【1】配置字符編碼過濾器-->
  <filter>
    <filter-name>enc</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>enc</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--【2】解析applicationContext.xml配置-->

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


  <!--【3】解析springmvc.xml-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--除jsp以外的所有的請求都會進servlet-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

Controller

@Controller
public class UserController {

    @Autowired
    private UserService  userService;
    
    @RequestMapping("/loginUser")
    public String Login(String uid,String pwd){
        int id = 0;
        //判斷賬號是否合法
        if(!uid.equals("")&&uid != null){
            id = Integer.parseInt(uid);
        }
        User user = userService.Login(id,pwd);
        if(user != null){
            return "redirect:/main.jsp";
        }
        return "redirect:/login.jsp";
    }
}

Mapper

public interface UserMapper {    
    @Select("select * from user where uid = #{param1} and pwd = #{param2}")
    User Login(Integer uid,String pwd);
}

Service

@Service
public class UserServiceImpl  implements UserService {

    @Autowired
    private UserMapper  userMapper;
    
    public User login(String uname, String pwd) {
        return userMapper.selectOne(uname, pwd);
    }
}

pojo


public class User implements Serializable {

      private   Integer  uid;

      private  String  uname;

      private  String  pwd;
}//get set之類的就不再這裏寫了!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章