发表于: 2018-03-29 23:50:02

2 573


@RequestMapping(value = "/student/{id}",method = RequestMethod.PUT)
public String updateStudent(@PathVariable("id") int id,String name,String qq,String major){
Student student = new Student();
     student.setId(id);
     student.setQq(qq);
     student.setName(name);
     student.setMajor(major);
     studentService.updateByPrimaryKey(student);
     return "redirect:/student/list";
}

//    @RequestMapping(value = "/student/{id}",method = RequestMethod.PUT)
//    public String updateStudent(Student student){
//        studentService.updateByPrimaryKey(student);
//        log.info("student={}",student);
//        return "redirect:/student/list";
//    }

今天做了个特别骚的操作,我看控制器里的update方法特别长,于是就是自己改成了注释后的那个样子,这样不用传那么一大堆参数了,也不用新建一个对象,我只需要通过studentService调用updateByPrimaryKey(student)方法就可以啦。返回值重定向到student/list.

运行了一下之后,发现在页面里依然能够改,也就是照常运行。

这就很奇怪了。明明是根据id才能修改,现在没有传id的参数,为什么还能继续修改呢?

用postman测试put端口,就发现了区别了,因为测不出来,只能传进去id,其他参数穿不进去

后来在web。xml里面加入了过滤器的配置,才好了。至于原理,其实我没搞懂。

 

 <filter>

    <filter-name>httpPutFormContentFilter</filter-name>

    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>httpPutFormContentFilter</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>


二。然后就尝试解释web.xml配置参数


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:web="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
 <!-- 解决工程编码过滤器 -->
 <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>

   <init-param>

//

     <param-name>forceEncoding</param-name>
     <param-value>true</param-value>
   </init-param>
 </filter>
 <filter-mapping>
   <filter-name>characterEncodingFilter</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!-- spring的配置文件-->

 <context-param>

设置环境参数,一个设置名字,一个设置名字的值

   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:applicationContext.xml</param-value>
 </context-param>
 <listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 <!--SpringMVC 只能处理postget,为了还原对putdelete的处理,web.xml里面要加如下过滤器-->
 <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>
 <!-- spring mvc核心:分发servlet -->
 <servlet>
   <servlet-name>mvc-dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!-- spring mvc的配置文件 -->
   <init-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:springMVC.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>mvc-dispatcher</servlet-name>
   <url-pattern>/</url-pattern>
 </servlet-mapping>

 <filter>

这两个就是今天加的过滤器。

   <filter-name>httpPutFormContentFilter</filter-name>
   <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
 </filter>

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

</web-app>


三。json里面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<json:object escapeXml="false">
<json:array name="学员信息">
<c:forEach var="student" items="${studentList}">
<json:object>
<json:property name="id" value="${student.id}"></json:property>
<json:property name="创建时间" value="${student.createAt}"></json:property>
<json:property name="更新时间" value="${student.updateAt}"></json:property>
<json:property name="姓名" value="${student.name}"></json:property>
<json:property name="性别" value="${student.sex}"></json:property>
<json:property name="QQ" value="${student.qq}"></json:property>
<json:property name="主修" value="${student.major}"></json:property>
<json:property name="入学时间" value="${student.entryTime}"></json:property>
<json:property name="来自" value="${student.comeFrom}"></json:property>
</json:object>
</c:forEach>
</json:array>
</json:object>

看控制器里,json对应的方法是GET,于是我用postman去测试GET。输入地址是:http://localhost:8887/student/list/json

@RequestMapping(value = "/student/list/json", method = RequestMethod.GET)
public String getAllByJson(Model model) {
List<Student> studentList = studentService.getAll();
   model.addAttribute("studentList", studentList);
   return "jsonList";
}


测试结果出了个500错误。


明天的计划:再改一下json,看能不能提交任务二

遇到的问题:暂无

今天的收获:重学了postman,解释了web.xml

java任务二开始时间:2018.01.25

预计demo时间:2018.02.12

可能有延期风险,原因是:json看不懂,控制器的逻辑看不懂,所以又回看了java语法

禅道链接地址:http://task.ptteng.com/zentao/project-task-501.html 



返回列表 返回列表
评论

    分享到