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