SpringMVC学习笔记10-----新建SpringMVC项目实现REST风格的CRUD的get操作代码演示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38016931/article/details/81903694

一、需求说明

     功能1.显示所有学生信息,url:stus,请求方式:GET,显示效果

     功能2.添加学生信息,有三个操作,一个是url:stu的GET操作用以显示添加界面,然后url为stu的POST的操作然后再重定向到显示所有学生页面!

    功能3.删除某个学生信息,url为stu/{id}后面id即删除学生的学号id!请求方法为delete

    功能4.修改某个学生的信息,三个操作,url为stu/{id}的GET操作显示修改页面,然后url为stu的PUT操作修改信息,完成修改后就重定向到list中显示所有学生信息!!

    需要新建的类和相关页面:

实体类:Student School 其中School与Student有一对多的关系!

dao:StudentDao SchoolDao

控制器 StudentHandler

二、代码

使用Maven在intellij里重新新建一个SpringMVC程序,有了许多前车之鉴,希望不会再犯类似的错误!

新建的项目目录如下:

1、首先导入相关依赖及配置

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--这个jar文件包含Spring MVC框架相关的所有类。
    包含国际化、标签、Theme、视图展现的FreeMarker、
    JasperReports、Tiles、Velocity、XSLT相关类。当
    然,如果你的应用使用了独立的MVC框架,则无需这个
    JAR文件里的任何类。-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- springframe end -->
    <!--log4j日志包 -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.6.1</version>
    </dependency>
    <!-- jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-coyote</artifactId>
      <version>7.0.39</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

在properties中添加

<spring.version>4.1.1.RELEASE</spring.version>
即可,依赖本可以不用添加那么多的,只是怕会遗漏什么,所以全加上!

2、新建相应的包和文件

getter和setter省略

public class Student {

    public final static boolean female = true;
    public final static boolean male = false;

    private int id;
    private String name;
    private boolean gender;
    private int age;
    private School school;

}
public class School {

    private int id;
    private String name;
}
public class SchoolDao {
    private static Map<Integer, School> map = new HashMap<>();

    static {
        map.put(1, new School(1, "aaSchool"));
        map.put(2, new School(2, "bbSchool"));
        map.put(3, new School(3, "ccSchool"));
        map.put(4, new School(4, "ddSchool"));
    }

    public Collection<School> getAllSchool() {
        return map.values();
    }

    public School getSchoolById(int id) {
        return map.get(id);
    }
}
public class StudentDao {

    private static Map<Integer, Student> map = new HashMap<>();

    static {
        map.put(1, new Student(1, "aaaa", Student.female, 18,new School(1, "aaSchool")));
        map.put(2, new Student(2, "bbbb",Student.female,20,new School(2, "bbSchool")));
        map.put(3, new Student(3, "cccc", Student.male,21,new School(3, "ccSchool")));
        map.put(4, new Student(4, "dddd",Student.male,19,new School(4, "ddSchool")));
    }

    public Collection<Student> getAllStudent() {
        return map.values();
    }

    public Student getStudentById(int id) {
        return map.get(id);
    }

    public void deleteStudentById(int id) {
        map.remove(id);
    }

    public void saveStudent(Student student) {
        map.put(student.getId(), student);
    }

}

这里不从数据库中获取数据,重点不在这里,获取静态数据就行了!

3、相关配置

web.xml

配置diispatcherServlet和EncodingFilter!

    <servlet>
      <servlet-name>DispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

如果添加后报错,就把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" >

去掉就行了!

配置请求编码过滤器,使得能够处理中文请求:

    <filter>
        <filter-name>EncodingFilter</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>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

配置HiddenHttpMethodFilter使得其能使用其父类OncePerRequestFilter的doFilterInternal方法,将请求的method值转化为普通的http的请求方法!然后到controller中找找到相应的控制方法!

    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

SpringMVC·配置文件springmvc.xml

web.xml中配置的springMVC的配置文件位置为classpath,所以在src目录下新建一个springmvc.xml文件

添加代码配置视图解析器:

<bean name="internalResouceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"> </property>
        <property name="suffix" value=".jsp"> </property>
</bean>

添加自动扫描的包

<context:component-scan base-package="cn.jxufe"/>

4.配置controller类

先配置一个方法!注入studentDao属性。

@Controller
public class StudentHandler {

    @Autowired
    private StudentDao studentDao;

    @RequestMapping(value = "/getAll")
    public String getAll(Map<String, List<Student>> map) {
        map.put ("list", (List<Student>)studentDao.getAllStudent());
        return "list";
    }

}

所以我们要在springmvc.xml文件中添加:

<bean name="studentDao" class="cn.jxufe.dao.StudentDao"> </bean>

控制器方法中直接把list放入了map中,SpringMVC自动将其注入request域中,不用像我之前使用的那种使用Servlet原生api,手动注入请求域!

5.设计视图

在目标视图页面代码(对于其中使用的某些标签,我们还需导入standard依赖!):

<!---https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>所有信息</title>
</head>
<body>
    <c:if test="${empty requestScope.list}">
        暂时没有学生信息!
    </c:if>
    <c:if test="${not empty requestScope.list}">
        <table>
            <tr>
                <th>学号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
                <th>学校</th>
            </tr>
            <tr>
            <c:forEach items="${requestScope.list}" var="stu">
                <tr>
                    <td>${stu.id}</td>
                    <td>${stu.name}</td>
                    <td>${stu.gender?"male":"female"}</td>
                    <td>${stu.age}</td>
                    <td>${stu.school.name}</td>
                </tr>
            </c:forEach>
        </table>
    </c:if>
</body>
</html>

index.jsp页面添加代码:

<form action="/stus" method="post">
    <input type="hidden" name="_method" value="GET">
    <input type="submit" value="获取所有学生信息">
</form>

6.运行效果

index中:

list.jsp中:

成功!

猜你喜欢

转载自blog.csdn.net/qq_38016931/article/details/81903694