终于来了!SSM整合!第二个SpringMVC撰写!

第一步:Spring整合MyBatis

请参考:http://www.moonlightgate.com/archives/88

第二步:将SpringMVC整合进入Spring和MyBatis

  1. 修改UserServiceImpl.java
package com.royotech.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.royotech.dao.PersonDAO;
import com.royotech.entity.Person;
import com.royotech.service.UserService;

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private PersonDAO personDAO;

    @Override
    public List<Person> select() {
        return personDAO.selectAll();
    }
}
  1. applicationContext.xml头部增加scanner语句。
<context:component-scan base-package="com.royotech.service"></context:component-scan>
  1. web.xml增加filter
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
  1. 撰写controller
package com.royotech.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.royotech.entity.Person;
import com.royotech.service.UserService;

@Controller //作用:将当前类的对象交给Spring工厂创建
@RequestMapping("user")   //请求路径
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("select") //请求路径
    public String select(Model model) {
        List<Person> listPerson = userService.select();
        model.addAttribute("listPerson",listPerson);
        return "forward:/list.jsp";
    }
}
  1. 撰写list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome!</title>
</head>
<body>
    <c:forEach var="person" items="${listPerson}">
        ${person.id},${person.name},${person.birthday},${person.telephone},${person.address}<br/>
    </c:forEach>
</body>
</html>
  1. 大功告成,测试结果如下:
    file

为什么要用SpringMVC?撰写第一个SpringMVC程序

为什么要使用SpringMVC?

SpringMVC作为SSM三剑客中的一个S,其盛行有着以下几方面原因:

  1. Struts2的没落。
    在SSM之前,我们经常说SSH - Struts2、Spring、Hibernate;而现在谈SSM,是指SpringMVC、Spring、MyBatis。SpringMVC是活生生的把Struts2挤下了神坛。Struts2没落的原因有很多,有其重大安全漏洞导致的客户流失,也有框架使用繁琐不适合当代快速开发趋势的原因。
  2. 与Spring的血缘关系。
    SpringMVC与Spring之间有着天然的血缘关系,因此SpringMVC与Spring的结合更紧密,兼容性更好,整合也更容易。
  3. 开发更高效。
    当代程序语言除了“拼性能”外,还要“拼优美”。SpringMVC相较于Struts2而言其程序架构更加优美,开发时代码也更加优美。

说了这么多,还是让我们写一个最简单的SpringMVC程序,看看他的优美之处在哪里?

撰写第一个SpringMVC程序

第一步:添加依赖。

我们依然是基于Maven开发,运行SpringMVC程序的最小依赖如下:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>

这个不用记忆,固定模式。

第二步:配置web.xml

然后配置下WEB-INF目录下的web.xml,这些内容也不用记忆,也是固定模式。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
    <servlet>
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

第三步:编写Controller

创建Controller包,并在下面建立UserController.java
扫盲一下:
struts和SpringMVC本质上都是对Java Servlet功能的封装和集成。
struts2地址习惯以.action结尾,控制器名字习惯以XxxAction方式命名。
SpringMVC地址习惯以.do结尾,控制器名字习惯以XxxController方式命名。

package com.royotech.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //作用:将当前类的对象交给Spring工厂创建
@RequestMapping("user")   //请求路径
public class UserController {
    @RequestMapping("select") //请求路径
    public String select() {
        return "forward:/list.jsp"; //forward转发到的位置
    }
}

第四步:配置mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置SpringMVC启用注解,哪个包下的内容要使用SpringMVC,就在这里写哪个包的位置 -->
    <context:component-scan base-package="com.royotech.controller"></context:component-scan>
</beans>

第五步:大功告成,测试一下!

新建userController跳转到的list.jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Welcome!</title>
</head>
<body>
    Hello!SpringMVC!
</body>
</html>

在浏览器中输入:
http://localhost:8080/JAVA_ALL/user/select.do
注意:

  1. JAVA_ALL是项目名称,区分大小写。
  2. SpringMVC的Controller默认以.do结尾,不加.do访问不到。
    运行结果如下:
    file