springmvc-servlet.xml
HelloController:
package com.kuang.controller;
?
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
?
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
?
public class HelloController implements Controller {
1.由于Maven可能存在资源过滤的问题,我们将配置完善
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2.配置web.xml
注意点:
注意web.xml版本问题,要最新版
注册DispatcherServlet
关联SpringMVC的配置文件
启动级别为1
映射路径为/【不要用/* 会404】
3.添加SpringMVC配置文件
让IOC的注解生效
静态资源过滤:HTML . JS. CSS. 图片, 视频...
MVC的注解驱动
配置视图解析器
在resources目录下添加springmvc-servlet.xml 配置文件,配置的形式与spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:
4.创建Controller
编写一个Java控制类:com.kuang.controller.HelloController,注意编码规范
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
?
实现步骤其实非常简单
1新建一个web项目
2.导入相关jar包
3.编写springmvc配置文件
4.接下来就是去创建对应的控制类,controller
6.最后完善前端视图和controller之间的对应
7.测试运行调试
使用springMVC必须配置的三大件
处理器映射器 处理器适配器 视图解析器
通常,我们只需要手动配置视图解析器,而处理器映射器 和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置。
控制器 负责提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
控制器负责解析用户的请求并将其转换为一个模型
在Spring MVC中一个控制器类可以包含多个方法
在Spring MVC中,对于Controller的配置方式有很多种
第一种实现方式
Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法:
1.编写一个Controller类,ControllerTest1
package com.kuang.controller;
?
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
?
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
?
//只要实现了Controller 接口的类,说明这就是一个控制器了
?
public class ControllerTest1 implements Controller {
springmvc-servlet.xml
web.xml
说明:
实现接口Controller定义控制器是较老发办法
缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦
@Component 组件
@Sevice service
@Controller controller
@Repository dao
springmvc-servlet.xml
ControllerTest2
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
?
可以发现,我们的两个请求都可以指向一个视图,但是页面结果是不一样的,从这里可以看出视图是被复用 的,而控制器与视图之间是弱耦合关系
@RequestMapping
@RequestMapping 注解用于映射url到控制器或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
为了测试结论更加准确,我们可以加上一个项目测试myweb
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
?
访问路径:http://localhost:8080/c3/t1。需要先指定类的路径再指定方法的路径。
概念:Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制。它是以斜线访问资源的比如:localhost:8080/method
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST DELETE PUT GET
分别对应 添加、删除 修改 查询
传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post和get
传统的:
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
?
http://localhost:8080/add?a=1&b=2
使用RESTful操作资源:可以通过不同的请求方法来实现不同的效果!
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
?
@PostMapping 和 @GetMapping请求的地址是一样的 只是一个是post实现 一个是get实现。
在Spring MVC中可以使用@PathVariable 注解,让方法参数的值对应绑定到一个URL模板变量上。
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
?
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
?
使用method属性指定请求类型
用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET POST ,OPTIONS ,PUT ,PATCH ,DELETE ,TRACE等
RestFul风格的好处:
使路径变得更加简洁
获得参数更加方便,框架会自动进行类型转换
通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法。
设置ModelAndView对象,根据view的名称,和视图解析器跳转到指定的页面。
页面:{视图解析器前缀} + viewName + {视图解析器后缀}
通过设置ServletAPI,不需要视图解析器
1.通过HttpServletResponse进行输出
2..通过HttpServletResponse实现重定向
3..通过HttpServletRequest实现转发
测试:
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
?
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
?
通过SpringMVC来实现转发和重定向-无需视图解析器
测试前需要将视图解析器注释掉
没有视图解析器的情况下
package com.kuang.controller;
?
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
?
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
?
通过SpringMVC来实现转发和重定向- 有视图解析器
重定向,不需要视图解析器,本质就是重新请求一个新地方,所以注意路径问题。
可以重定向到另外一个请求实现。举例
1.提交的域名称和处理方法的参数名一致
提交数据:https://localhost:8080/hello?name=doudou
处理方法:
后台输出doudou
2.提交的域名称和处理方法的参数名不一致
提交数据:http://localhost:/8080/hello?username=doudou
处理方法
//@RequestParam("username"):username 提交的域的名称
后台输出:doudou
要求提交的表单域和对象的属性名一致,参数使用对象即可
说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null.
第一种:通过ModelAndView
第二种:通过ModelMap
第三种:通过Model
LinkedHashMap
ModelMap:继承了LinkedHashMap,所以他拥有LinkedHashMap的全部功能!
Model:精简版(大部分情况下,我们都直接使用Model)
Model:只有寥寥几个方法社和用于储存数据,简化了新手对于Model对象的操作和理解
ModelMap:继承了LinkedMap,除了实现了自身的一些方法,同样继承了LinkedMap的方法和特性。
ModelAndView:可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转
package com.kuang.controller;
?
import com.kuang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
?
User:
package com.kuang.pojo;
?
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
?
springmvc-servlet.xml:不要忘记把视图解析开启
第87天学习打卡(SpringMVC Controller及RestFul风格 结果跳转方式 数据处理)
原文:https://www.cnblogs.com/doudoutj/p/14619318.html