SpringMVC-restful风格实现简单的页面增删改查

核心配置文件:

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
      http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--注解扫描-->
    <context:component-scan base-package="my"></context:component-scan>
<!--    注解支持-->
    <context:annotation-config></context:annotation-config>
<!--    mvc注解支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--    配置thymeleaf视图解析器(其实内部对thymeleaf引擎进行了封装)-->
    <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver" id="viewResolver">
        <property name="characterEncoding" value="UTF-8"></property>
        <!--        设置优先级(因为可能有多个解析器)-->
        <property name="order" value="1"></property>
        <property name="templateEngine">
            <!--            配置引擎-->
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine" id="templateEngine">
                <!--                配置解析器-->
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--                        提前设置解析的前缀-->
                        <property name="prefix" value="/WEB-INF/templates/"></property>
                        <!--                        提前设置解析的后缀-->
                        <property name="suffix" value=".html"></property>
                        <!--                        设置要解析的模板的模型-->
                        <property name="templateMode" value="HTML5"></property>
                        <!--                        设置编码-->
                        <property name="characterEncoding" value="UTF-8"></property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
<!--    视图控制器  显示首页-->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!--    开启静态资源访问的默认Servlet-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
</beans>

实体类

/**
 * @Classname Employee
 * @author: 我心
 * @Description:
 * @Date 2022/2/12 20:07
 * @Created by Lenovo
 */
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private Integer gender;//性别,1是男,0是女

    public Employee() {
    }

    public Employee(Integer id, String lastName, String email, Integer gender) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }

    public Employee(String lastName, String email, Integer gender) {
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;

    }


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                '}';
    }
}

dao

public interface EmployeeDao {
    //添加员工
    int addEmployee(Employee employee);
    //删除员工
    int deleteEmployee(Integer id);
    //修改员工
    int updateEmployee(Employee employee);
    //查询员工
    Employee getEmployee(Integer id);
    //返回全部员工
    List<Employee> getEmployeeList();
}

dao实现类

/**
 * @Classname EmployeeDaoImpl
 * @author: 我心
 * @Description:用于测试的dao实现类,在内部定义数据即可
 * @Date 2022/2/12 20:11
 * @Created by Lenovo
 */
@Repository
public class EmployeeDaoImpl implements EmployeeDao{
    private static Map<Integer,Employee> map;
    private static Integer initId=1005;//自动生成id
    //初始化数据
    static {
        map=new HashMap<Integer,Employee>();
        map.put(1001,new Employee(1001,"白小纯","fdsafd@qq.com",1));
        map.put(1002,new Employee(1002,"王林","fds2341afd@qq.com",1));
        map.put(1003,new Employee(1003,"许清","fdsagsrgrfsgfd@qq.com",0));
        map.put(1004,new Employee(1004,"李清照","hellofdsafd@qq.com",0));
        map.put(1005,new Employee(1005,"李逍遥","lixiaofdsafd@qq.com",1));
    }

    public static Map<Integer, Employee> getMap() {
        return map;
    }

    @Override
    public int addEmployee(Employee employee) {
        if(employee!=null){
            //自动设置id
            if (employee.getId()==null)
                employee.setId(++initId);
           this.map.put(employee.getId(), employee);
           return 1;
        }
        return 0;
    }

    @Override
    public int deleteEmployee(Integer id) {
        Employee remove = map.remove(id);
        if (remove!=null)
            return 1;
        return 0;
    }

    @Override
    public int updateEmployee(Employee employee) {
        if(employee!=null){
            map.put(employee.getId(),employee);
        }
        return 0;
    }

    @Override
    public Employee getEmployee(Integer id) {
        return map.get(id);
    }

    @Override
    public List<Employee> getEmployeeList() {
        Collection<Employee> values = map.values();
        List<Employee> list=new ArrayList(values);
        return list;
    }
}

Service接口

public interface EmployeeService {
    //添加员工
    boolean addEmployee(Employee employee);
    //删除员工
    boolean deleteEmployee(Integer id);
    //修改员工
    boolean updateEmployee(Employee employee);
    //查询员工
    Employee getEmployee(Integer id);
    //判断员工是否存在
    boolean isExist(Integer id);
    //返回全部员工
    List<Employee> getEmployeeList();
}

service实现类

/**
 * @Classname EmployeeServiceImpl
 * @author: 我心
 * @Description:
 * @Date 2022/2/12 20:27
 * @Created by Lenovo
 */
@Service
public class EmployeeServiceImpl implements EmployeeService{
    public EmployeeDao getEmployeeDao() {
        return employeeDao;
    }

    public void setEmployeeDao(EmployeeDao employeeDao) {
        this.employeeDao = employeeDao;
    }
//注入dao实现类
    @Autowired
    private EmployeeDao employeeDao;
    @Override
    public boolean addEmployee(Employee employee) {
        //如果当前用户不存在
        if (!isExist(employee.getId())){
            int i = employeeDao.addEmployee(employee);
            if (i>=1)
                return true;
        }

        return false;
    }

    @Override
    public boolean deleteEmployee(Integer id) {
        //判断是否存在
        if(isExist(id)){
            int i = employeeDao.deleteEmployee(id);
            if (i>=1)
                 return true;
        }
        return false;
    }

    @Override
    public boolean updateEmployee(Employee employee) {
        if(isExist(employee.getId())){
            int i = employeeDao.updateEmployee(employee);
            if (i>=1)
                return true;
        }
        return false;
    }

    @Override
    public Employee getEmployee(Integer id) {
        return employeeDao.getEmployee(id);
    }

    @Override
    public boolean isExist(Integer id) {
        Employee employee = employeeDao.getEmployee(id);
        if (employee!=null)
            return true;
        return false;
    }

    @Override
    public List<Employee> getEmployeeList() {
        return employeeDao.getEmployeeList();
    }
}

Controller层

/**
 * @Classname EmployeeController
 * @author: 我心
 * @Description:
 * @Date 2022/2/12 23:06
 * @Created by Lenovo
 */
@Controller
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    private EmployeeService service;
//    获取员工信息
    @RequestMapping(value = "/",method = RequestMethod.GET)
    public String showAllEmployees(Map<String,Object> context, HttpServletRequest request){
        String baseStr=request.getScheme()+"://"+
                request.getServerName()+":"+request.getServerPort()
                +request.getContextPath()+"/";
        request.getSession().setAttribute("baseStr",baseStr);//将当前工程路径写入session域中
        List<Employee> employeeList = service.getEmployeeList();
        context.put("employeeList",employeeList);
        return "show";
    }
    //删除员工信息

    @DeleteMapping("/{id}")
    public String delete(HttpServletResponse response,@PathVariable("id") String id) throws IOException {
        service.deleteEmployee(new Integer(id));
        return "redirect:/employee/";//重定向回所有员工页面
    }
    //添加员工
    @PostMapping("/")
    public String add(Employee employee, Model model){
        service.addEmployee(employee);
        System.out.println("添加成功!");
        //将当前状态传给请求视图的上下文对象
        return "redirect:/employee/";//重定向回首页页面
    }
//    修改员工信息
    @PutMapping("/")
    public String update(Employee employee,Model model){
        System.out.println(employee);
        service.updateEmployee(employee);
        String state="update";
        return "redirect:/employee/"+state+"/put";//重定向回首页页面
    }
    //查询单个员工信息
    @GetMapping("/{id}")
    public String getEmployee(@PathVariable("id") String id,HttpServletResponse response) throws IOException {
        Employee employee = service.getEmployee(new Integer(id));
        Gson gson=new Gson();
        String employeeJson = gson.toJson(employee, Employee.class);
        //响应
        response.getWriter().write(employeeJson);
        return null;
    }
//    带状态的重定向展示列表的控制方法
    @RequestMapping(value = "/{form_state}/{_method}",method = RequestMethod.GET)
    public String showState(@PathVariable("form_state") String form_state,@PathVariable("_method") String _method,Model model,HttpServletRequest request){
        model.addAttribute("form_state",form_state);
        model.addAttribute("_method",_method);
        //转发
        return "forward:/employee/";
    }
}

需要的html页面

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<a th:href="@{/employee/}">查看所有员工信息</a>
</body>
</html>

show.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>员工信息</title>
</head>
<script type="text/javascript" src="http://localhost:8080/Spring_mvc_rest_war/static/script/jquery-1.7.2.js" ></script>
<script>
    $(function () {
        $("#f_state").attr("text","当前表单状态为:无");
        //删除监听
        $(".delete").click(function () {
            //获取表单
            var form = $("#form_req");
            //修改action
            form.attr("action",$(this).attr("href"));
            //修改_method参数值
            $("#requestMethod").attr("value","delete");
            //提交表单
            form.submit();
            return false;
        });
        //修改点击监听
        $(".update").click(function () {
            //获取信息
            var t=$(this).parent().parent().children(".id").text();//获取当前要更新的id
            var  dataUrl=$("#baseStr").val()+"employee/"+t;//拼接url
            var baseStr=$("#baseStr").val();//工程路径
            //异步请求回显数据
            $.ajax({
                url: dataUrl,
                type:"get",
                dataType: "json",
                success:function (data) {
                    //data是规定要写的一个参数,用来存放响应的数据
                    //回显数据
                    $("#updateEmail").attr("value",data.email);
                    // $("#updateEmail").attr("readonly","");
                    $("#updateId").attr("value",data.id);
                    $("#updateGender").attr("value",data.gender);
                    $("#updatelastName").attr("value",data.lastName);

                }

            })
            //修改表单提交路径
            $("#form_req").attr("action",baseStr+"employee/");
            //修改_method参数值
            $("#requestMethod").attr("value","put");
            $("#f_state").attr("text","当前表单状态为:update")
            //修改提交按钮
            $("#req_submit").attr("value","确认修改");
            return false;
        });
        //添加员工
        $("#add").click(function () {
            //获取表单
            var form=$("#form_req");
            var submitUrl=  $("#baseStr").attr("value")+"employee/";
            //修改表单提交地址
            form.attr("action",submitUrl);
            //修改请求方式
            $("#requestMethod").attr("value","post");
            //修改提交按钮value
            $("#req_submit").attr("value","添加该员工");
            //修改id框为空
            $("#updateId").attr("value","");
            return false;
        });

    })
</script>
<body>
<input type="hidden" id="baseStr" th:value="${session.baseStr}">
<input type="hidden" name="date" id="date" value="">
<table bgcolor="#00ffff" border="1">

    <tr><th colspan="4">员工信息</th></tr>
    <tr>
        <td>id</td>
        <td>lastName</td>
        <td>email</td>
        <td>gender</td>
        <td colspan="2">操作</td>
    </tr>
<!--    设置Thymeleaf解析循环-->
    <tr th:each="employee: ${employeeList}">
        <td th:text="${employee.id}" class="id"></td>
        <td th:text="${employee.lastName}" class="lastName"></td>
        <td th:text="${employee.email}" class="email"></td>
        <td th:text="${employee.gender}" class="gender"></td>
        <td><a th:href="${session.baseStr}+'employee/'+${employee.id}" id="delete" class="delete">删除</a></td>
        <td><a th:href="${session.baseStr}+'employee/'+${employee.id}" id="update" class="update">更新</a></td>
    </tr>
</table>
<a href="" id="add">添加员工</a>
<!--用于提交的表单:修改或者添加的地址都一样,只是请求方式不一样,也可以用于删除-->
<form  id="form_req"  method="post" >
    <table>
        <input type="hidden" name="_method" id="requestMethod" >
        <input type="text" name="id" value=""  id="updateId" hidden="hidden">
        <tr>
            <td>LastName</td>
            <td>  <input type="text" name="lastName" value=""  id="updatelastName" ><br></td>
        </tr>
        <tr>
            <td>Email</td>
            <td> <input type="text" name="email" value=""  id="updateEmail"></td>
        </tr>
        <tr>
            <td>Gender</td>
            <td> <input type="text" name="gender" value=""  id="updateGender" ></td>
        </tr>
        <tr><td colspan="2"> <input type="submit"  id="req_submit" value="提交"></td></tr>
    </table>

</form>

</body>
</html>

在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 xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <display-name>Archetype Created Web Application</display-name>
<!--  前端控制器-->
  <servlet>
    <servlet-name>DispatcherServlet</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>
  </servlet>
  <servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

<!--  编码过滤器-->
  <filter>
    <filter-name>encodeFilter</filter-name>
    <filter-class>my.filter.EncodeFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encodeFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
<!--  修改请求过滤器-->
  <filter>
    <filter-name>alterRequest</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>alterRequest</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔雀南飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值