Spring视图

70 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

视图

InternalResourceView

请求后会进行内部转发,但是不会经过thymeleaf渲染所以不常用

@Controller
public class TestViewController {
    @RequestMapping("/test/view/forward")
    public String testInterResourceView(){
        return "forward:/test/model";
    }
}

RedirectView

请求后会进行重定向

@RequestMapping("/test/view/redirect")
public String testRedirectView(){
    return "redirect:/test/model";
}

视图控制器

之前定义了一个控制器,在访问首页时触发:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
​
@Controller
public class ProtalMapping {
    @RequestMapping("/")
    public String protal(){
        return "index";
    }
}

但只为了实现这一个控制器而写了一个类未免有点小题大做,因此可以通过视图控制器<controller-view>方式来定义

<mvc:view-controller path="/" view-name="index"></mvc:view-controller>

这样在访问根路径时就会自动跳转到index.html,方便许多,但是又引入了一个新的问题:

当时用该控制器后,只有视图控制器所设置的请求会被处理,其他的请求都是404

此时就必须配置一个新的标签<mvc:annotation-driven/>就可以直接解决该问题

RESTful

REST: Representational State Transfer,表现层资源状态转移。

可以理解为:restful只关心我们需要的资源,而不在意资源的操作方式,例:假如对user库进行资源的增删改查,那么这些操作都是对user库的操作,restful就可以将他设置为/user路径,之后的操作通过不同的请求方式来判断如何操作数据库即:

GET:获取资源

POST:新建资源

PUT:更新资源

DELETE:删除资源

操作传统方式REST风格
查询操作getUserById?id=1user/1 —> get请求方式
保存操作saveUseruser —> post请求方式
删除操作deleteUser?id=1user/1 —> delete请求方式
更新操作updateUseruser —> put请求方式

数据库操作

查询操作

GET方式

@Controller
public class TestRestController {
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id){
        System.out.println("根据id查询信息-->/user/"+id+"-->get");
        return "success";
    }
}

添加操作

POST方式

@RequestMapping(value ="/user",method = RequestMethod.POST)
public String inserUser(){
    System.out.println("成功添加用户信息");
    return "success";
}

更新操作

HiddenHttpMethodFilter

表单中没有PUT和DELETE请求,所以可以通过HiddenHttpMethodFilter过滤器来获取这两种请求方式

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>

之后表单中加上name="_method" value="put"即可 (需注意method必须为post才行)

<form th:action="@{/user}" method="post">
    <input type="hidden" name="_method" value="put">
    <input type="submit" value="更新用户数据">
</form>

这样就可以成功获取put参数了

@RequestMapping(value = "/user",method = RequestMethod.PUT)
public String updateUser(){
    System.out.println("成功更新用户数据");
    return "success";
}

删除操作

删除操作同理,DELET请求方式

@RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") int id){
    System.out.println("根据id删除信息-->/user/"+id+"-->get");
    return "success";
}

HTML

<form th:action="@{/user/2}" method="post">
    <input type="hidden" name="_method" value="delete">
    <input type="submit" value="删除用户数据">
</form>