springmvc之增删改查

spring框架的好处,就是能用注解干的事情,就不用写代码。代码分离,各司其职。

1.导包,还是4大核心架包,加上web和webmvc 加日志记录 logging.

2.配置文件:springmvc.xml 同上,所以就不写了

  web.xml  第一个配置前端控制器,负责处理所有应用程序请求,已经说过了,

<!-- Map all requests to the DispatcherServlet for handling -->将所有请求映射到DispatcherServlet处理

来说说第二个<!-- 配置一个支持rest风格的filter --> ctrl+shift+t 然后输入hidden 复制全类名

HiddenHttpMethodFilter 翻译: 隐藏的Http方法过滤  作用:
Rest支持
页面要发起delete和put(更新)形式的请求是不容易的,所以要配置
1、配置上支持将页面普通请求转化为delete和put请求的过滤器【Filter】
<!-- 配置一个支持rest风格的filter -->
    <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>

2、在页面发请求的时候,指定我们自定义的请求方式

    1)、method="post"
    2)、在表单上添加一个额外的input ,name叫_method,值就是我们指定的请求方式
 

 index.jsp 核心代码:

<body>
  <a href="hello">hello</a><br/>
  <a href="rm/handle01?user=123">规定请求参数</a><br/>
  <a href="rm/handle02">规定请求头</a><br/>
  <a href="rm/handle03">规定请求方式</a>
<form action="rm/handle03"method="post">
<input type="submit" value="POST提交" />
</form><br/>
<a href="handle01">路径模糊匹配handle01</a>
<hr/>

<h3>测试Rest风格的URL</h3>
<a href="book/1">查询图书</a><br/>
update:
<form action="book/1" method="post">
<input name="_method" value="PUT"/>
<input type="submit" value="修改图书"/>
</form><br/>

delete:
<form action="book/1" method="post">
<input name="_method" value="DELETE"/>
<input type="submit" value="删除图书"/>
</form><br/>

<form action="book" method="post">
<input type="submit" value="新增图书"/>
</form><br/>

</body>

 测试如下:

@Controller
public class PathVariableTest {
    
    @RequestMapping("/deletebook/{bookid}")
    public String handle01(@PathVariable("bookid") Integer bookid){
        System.out.println("删除的 图书id:"+bookid);
        return "success";
    }
}

注解:

  @Controller:告诉Spring这是一个控制器,是用来控制跳转逻辑的

  @RequestMapping("/lookmm"):/代表从当前项目根目录下找

  @RequestMapping两个位置

       类上:为当前类的每一个方法的请求地址指定一个基准路径
       方法上: 
    注解的其他属性:
  params:规定请求参数的
     *  param1: 表示请求必须包含名为 param1 的请求参数
     *  !param1: 表示请求不能包含名为 param1 的请求参数
     *  param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
     *  {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
     *
     * headers:规定请求头的
     *
     * method:规定请求方式
     *   页面【GET/POST】-不讨论ajax;
     *   GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
     *
     * consumes:
     *      消费:规定这个方法能接受哪种内容类型的请求
     *      发请求有Content-Type:application/x-www-form-urlencoded,表示当前请求的内容类型
     *
     * produces:
     *      生产:规定这个方法是产生什么内容类型的数据;
     *          response.setContentType("text/html;charset=utf-8")
 
RequestMapping-Ant风格的路径 
  
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 路径的模糊匹配
 * @author lfy
 *
 * SpringMVC:RequestMapping进行路径映射允许写通配符;Ant风格的路径
 *    ?:通配一个字符
 *    *:通配0/多个字符:也可以匹配一层路径
 *    **:通配多层路径
 *   精确优先
 *       最精确------?------*-------**
 *
 */

@Controller
public class TestRequestMapping2Controller {

    /**
     * 精确匹配:
     *         精确优先
     * @return
     */
    @RequestMapping("/handle01")
    public String handle01(){
        System.out.println("handle01...");
        return "success";
    }

    @RequestMapping("/handle0?")
    public String handle02(){
        System.out.println("handle02...");
        return "success";
    }

    @RequestMapping("/handle0*")
    public String handle03(){
        System.out.println("handle03...");
        return "success";
    }

    @RequestMapping("/**/handle04")
    public String handle04(){
        System.out.println("handle04...");
        return "success";
    }

}

 增删改查:GET 查询、DELETE 删除、PUT 更新、POST 新增

@Controller
public class RestTestController {
    
    @RequestMapping(value="/book",method=RequestMethod.POST)
    public String addBook() {
        System.out.println("图书添加完成");
        return "success";
    }

    @RequestMapping(value="/book/{id}",method=RequestMethod.PUT) 
    public String updateBook(@PathVariable("id")Integer id) {
        System.out.println("图书修改完成" + id);
        return "success";
    }

    @RequestMapping(value="/book/{id}",method=RequestMethod.DELETE)
    public String deleteBook(@PathVariable("id")Integer id) {
        System.out.println("图书删除完成" + id);
        return "success";
    }

    @RequestMapping(value="/book/{id}",method=RequestMethod.GET)
    public String getBook(@PathVariable("id")Integer id) {
        System.out.println("图书查询完成" + id);
        return "success";
    }
}

 解决响应乱码问题:加在web.xml配置文件中 ,CharacterEncodingFilter 字符编码过滤器

    <!--字符编码的filter一定要放在最前面  -->
      <filter>
          <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!-- 配置encoding,告诉我们指定的编码格式 -->
        <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>
原文地址:https://www.cnblogs.com/JavaBlackHole/p/7381909.html