学习使用SpringMVC 记录

1.首先配置SpringMVC的环境 其实大部分跟Spring一样 导入jar包 安装SpringIDE 这样子可以在配置的时候方便快捷很多
2.在web.xml里面配置一个dispatcher servlet 这个是SpringMVC的核心 请求分配器 每个请求都会在这边被过滤
因为安装了SpringIDE 所以可以直接alt + / 找到最下面的dispatcherServlet
classpath:springmvc.xml 这一句式Springmvc配置文件的位置
/ 这个请求分配器 对于所有请求起作用
其余的按照默认的就好了
3.接下来就是springmvc的配置文件了 里面要配置一个
扫描器 指定扫描的包(SpringMVC是基于注解的 扫描器的作用就是去扫描哪些包有注解)




还得配置一个视图解析器 prefix 前缀 suffix 后缀 把注解为@Controller 内返回的字符串拼接成物理试图 也就是一个网站

4.接下来就是javabean了
@Controller 注解把他声明成一个控制器(这个注解注解在类上)
@RequestMapping(“helloworld”) 注解 把让方法映射到一个请求(这里与helloworld请求 相对应)

helloworld

@RequestMapping(“/helloworld”)
public String helloWorld(){
System.out.println(“helloworld”);
return “success”;
}

上面的超链接映射到下面的方法中 点击超链接 会在控制台输出一个helloworld
然后返回一个success字符串 到 springmvc的配置文件中的试图解析器去拼接成一个物理试图
最终返回一个/WEB-INF/jsps/success.jsp

补充一点 如果@RequestMapping(“/SpringMVC”)
这一层加载类上面 那么超链接想要将请求映射过来也需要多一层
SpringMVC/helloworld

中间遇到一个问题 就是index.jsp写在了WEB-INF下面 然后 tomcat 跑起来找不到
你一个项目的主页应该放在webcontent 下面 在其他文件夹下 被保护了 进不去 只能通过请求
访问 如果通过路径直接访问不到(个人理解 )

@RequestMapping注解的属性
1.value 当@RequestMapping(“helloworld”) 后只有一个属性的时候  默认为value属性
2.method 属性@RequestMapping(value = “helloworld” method = RequestMethod.POST)
helloworld只能是post 才能映射过来 否则会http 405
3.params @RequestMapping(value=”helloworld”,params = {“username”,”age!=10”})
请求必须传一个username属性 而请求传过来的age不能等于10 可以不传age

href ="helloworld?username=wuqirong&age=11"
url传过来的参数都是String类型的 ?之后为参数 &连接参数

4.headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

5.@RequestMapping(“helloworld”) 支持通配符
?匹配一个任意字符
*匹配任意字符(一个文件名中的)
** 匹配任意多层路径

eg:
@RequestMapping(“**/helloworld”)
href =“a/b/c/d/helloworld” 可以映射到上面

6.@PathVariable 注解 (上面都是属性) 绑定url中的占位符
a href = “cao/1”
@RequestMapping(“cao/{id}”)
public String cao(@PathVariable(“id”) int id){
System.out.println(“cao” + id);
return SUCCESS;
}
@PathVariable 是加在方法入参的地方 可以取到url中的占位符参数

  1. 这里有一个概念
    REST风格 的请求 表现层状态转化 representational state transfer
    简单来说 即通过不同的请求方式传递过来的请求是不一样的效果
    get post put delete 四种请求 分别对应 查 增 改 删

我们平常只有post 请求和get请求 如何通过获得put请求和delete请求?
我需要在web.xml配置一个HiddenHttpMethodFilter
(过滤器和servlet都是在web.xml配置的)


HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter

<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
这个过滤器对所有请求起作用

PUT DELETE 都是通过post 转变而来 而只有表单才能发出post 所以只有表单能发出PUT和delete请求

配置完之后















testGET

请求都是一样的
@RequestMapping(value = “testREST/{id}”,method=RequestMethod.PUT)
@ResponseBody()
public String testPUt(@PathVariable(“id”) int id){
System.out.println(“testPUT” + id);
return SUCCESS;
}

@RequestMapping(value = "testREST",method=RequestMethod.POST)
public String testPOST(){
    System.out.println("testPOST");
    return SUCCESS;
}

@RequestMapping(value = "testREST/{id}",method = RequestMethod.GET)
public String testGET(@PathVariable("id") int id){
    System.out.println("testGET" + id);
    return SUCCESS;
}

@RequestMapping(value = "testREST/{id}",method = RequestMethod.DELETE)
@ResponseBody()
public String testDELETE(@PathVariable("id") int id){
    System.out.println("testDELETE" + id);
    return SUCCESS;
}
但是下面却能通过不同的请求方法达到不一样的映射

post请求 和@requestmapping method 属性指定为post的相对应
get请求相似
put请求需要form表单传一个隐藏域 name为_method value 为PUT
上面的HiddenHttpFilter会将他post请求转化为PUT请求
delete请求同上

以前基于jsp的系统 增删改查
delete?id=1
post?id =1
…… rest风格 只要一种请求格式 然后根据请求方法就可以到达不一样的映射方法 通过method属性指定

tomcat6.0以后jsp只支持post 和get请求 (为学习的视频比较古老)
需要在put请求和delete请求映射的方法前加上一个 @ResponseBody()注解
或者直接把tomcat 改成6.0前的版本
a href = “SpringMVC/gun/1?username=wuqirong&age=18”>gun

猜你喜欢

转载自blog.csdn.net/cc365142105/article/details/81411295