java学习之SpringMVC(springmvc jar)

  本篇文章为你整理了java学习之SpringMVC(springmvc jar)的详细内容,包含有springmvc jwt springmvc jar 讲一下springmvc springmvc入门实例 java学习之SpringMVC,希望能帮助你了解 java学习之SpringMVC。

   SpringMvc相较于Servlet开发简单了很多只需要常用的注解,我们需要记住的是它用了那些方式去传输数据和验证数据,方便以后对java框架的审计,mvc有很多内容是和Servlet重复的我只需要大概的复习一遍,解下来还有最后一点mvc的只是就是拦截器。

  
0x00前言

  Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。

  Spring MVC 是结构最清晰的 Servlet+JSP+JavaBean 的实现,是一个典型的教科书式的 MVC 构架,不像 Struts 等其它框架都是变种或者不是完全基于 MVC 系统的框架。

  Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合。Spring MVC 是当今业界最主流的 Web 开发框架,以及最热门的开发技能。

  在 Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果。Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息

  0x01springmvc介绍

  SpringMVC一种基于Java实现MVC模型的轻量级Web框架

  使用简单方便开发,是简化版的servlt

  用于表现层开发的一种框架

  现在都采用注解开发更加方便

  0x02SpringMVC简单入门

  是属于sping容器的spring又是ioc模式的所要把所有都配置成bean

  写一个配置类

  

//springmvc配置类,本质上还是一个spring配置类

 

  @Configuration

  @ComponentScan("com.itheima.controller")

  public class SpringMvcConfig {

  

 

  写加载类去加载spring容器里的bean

  

package com.itheima.config;

 

  import org.springframework.web.context.WebApplicationContext;

  import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

  import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

  //web容器配置类

  public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

   //加载springmvc配置类,产生springmvc容器(本质还是spring容器)

   protected WebApplicationContext createServletApplicationContext() {

   //初始化WebApplicationContext对象

   AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

   //加载指定配置类

   ctx.register(SpringMvcConfig.class);

   return ctx;

   //设置由springmvc控制器处理的请求映射路径

   protected String[] getServletMappings() {

   return new String[]{"/"};

   //加载spring配置类

   protected WebApplicationContext createRootApplicationContext() {

   return null;

  

 

  控制器

  

package com.itheima.controller;

 

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.ResponseBody;

  //定义表现层控制器bean

  @Controller

  public class UserController {

   //设置映射路径为/save,即外部访问路径

   @RequestMapping("/save")

   //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)

   @ResponseBody

   public String save(){

   System.out.println("user save ...");

   return "{info:springmvc}";

   //设置映射路径为/delete,即外部访问路径

   @RequestMapping("/delete")

   @ResponseBody

   public String delete(){

   System.out.println("user save ...");

   return "{info:springmvc}";

  

 

  简单配置就说的是用@@RequestMapping作为访问的路径

  @ResponseBody写在函数上面就可以用该函数的返回值作为响应值,也可以设置请求方式

  0x03MVC常用注解

  0x1配置简化开发

  

package com.itheima.config;

 

  import org.springframework.web.context.WebApplicationContext;

  import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

  import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

  import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

  //web配置类简化开发,仅设置配置类类名即可

  public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

   protected Class ? [] getRootConfigClasses() {

   return new Class[]{SpringConfig.class};

   protected Class ? [] getServletConfigClasses() {

   return new Class[]{SpringMvcConfig.class};

   protected String[] getServletMappings() {

   return new String[]{"/"};

  public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {

   protected WebApplicationContext createServletApplicationContext() {

   AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

   ctx.register(SpringMvcConfig.class);

   return ctx;

   protected WebApplicationContext createRootApplicationContext() {

   AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

   ctx.register(SpringConfig.class);

   return ctx;

   protected String[] getServletMappings() {

   return new String[]{"/"};

  

 

  0x2路径配置

  

@Controller

 

  //类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径

  @RequestMapping("/user")

  public class UserController {

   //请求路径映射

   @RequestMapping("/save")

   @ResponseBody

   public String save(){

   System.out.println("user save ...");

   return "{module:user save}";

   //请求路径映射

   @RequestMapping("/delete")

   @ResponseBody

   public String delete(){

   System.out.println("user delete ...");

   return "{module:user delete}";

  

 

  访问第一个方法的路径是/user/save

  第二个方法的路径是/user/delete

  0x3请求方式和注解

  

//请求参数

 

  @Controller

  public class UserController {

   //普通参数:请求参数与形参名称对应即可完成参数传递

   @RequestMapping("/commonParam")

   @ResponseBody

   public String commonParam(String name ,int age){

   System.out.println("普通参数传递 name == "+name);

   System.out.println("普通参数传递 age == "+age);

   return "{module:common param}";

   //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系

   @RequestMapping("/commonParamDifferentName")

   @ResponseBody

   public String commonParamDifferentName(@RequestParam("name") String userName , int age){

   System.out.println("普通参数传递 userName == "+userName);

   System.out.println("普通参数传递 age == "+age);

   return "{module:common param different name}";

   //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递

   @RequestMapping("/pojoParam")

   @ResponseBody

   public String pojoParam(User user){

   System.out.println("pojo参数传递 user == "+user);

   return "{module:pojo param}";

   //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递

   @RequestMapping("/pojoContainPojoParam")

   @ResponseBody

   public String pojoContainPojoParam(User user){

   System.out.println("pojo嵌套pojo参数传递 user == "+user);

   return "{module:pojo contain pojo param}";

   //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中

   @RequestMapping("/arrayParam")

   @ResponseBody

   public String arrayParam(String[] likes){

   System.out.println("数组参数传递 likes == "+ Arrays.toString(likes));

   return "{module:array param}";

   //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据

   @RequestMapping("/listParam")

   @ResponseBody

   public String listParam(@RequestParam List String likes){

   System.out.println("集合参数传递 likes == "+ likes);

   return "{module:list param}";

  
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据

   @RequestMapping("/listParamForJson")

   @ResponseBody

   public String listParamForJson(@RequestBody List String likes){

   System.out.println("list common(json)参数传递 list == "+likes);

   return "{module:list common for json param}";

   //POJO参数:json格式

   //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应

   @RequestMapping("/pojoParamForJson")

   @ResponseBody

   public String pojoParamForJson(@RequestBody User user){

   System.out.println("pojo(json)参数传递 user == "+user);

   return "{module:pojo for json param}";

   //集合参数:json格式

   //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应

   @RequestMapping("/listPojoParamForJson")

   @ResponseBody

   public String listPojoParamForJson(@RequestBody List User list){

   System.out.println("list pojo(json)参数传递 list == "+list);

   return "{module:list pojo for json param}";

   //日期参数

   //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd

   @RequestMapping("/dataParam")

   @ResponseBody

   public String dataParam(Date date,

   @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,

   @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){

   System.out.println("参数传递 date == "+date);

   System.out.println("参数传递 date1(yyyy-MM-dd) == "+date1);

   System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) == "+date2);

   return "{module:data param}";

  
请求方式的配置是在路径也就是@RequestMapping后面配上method=request.get/post/put/delete

  当输入的参数和获取的参数不同时候用,@RequestParam("name")这种类似的标签给形参绑定值,如果形参和传入值相同的话可以不用谢注解

  0x4JSON传输

  

package com.itheima.controller;

 

  import com.itheima.domain.User;

  import org.springframework.format.annotation.DateTimeFormat;

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.RequestBody;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.ResponseBody;

  import java.util.Arrays;

  import java.util.Date;

  import java.util.List;

  //请求参数

  @Controller

  public class UserController {

   //普通参数:请求参数与形参名称对应即可完成参数传递

   @RequestMapping("/commonParam")

   @ResponseBody

   public String commonParam(String name ,int age){

   System.out.println("普通参数传递 name == "+name);

   System.out.println("普通参数传递 age == "+age);

   return "{module:common param}";

   //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系

   @RequestMapping("/commonParamDifferentName")

   @ResponseBody

   public String commonParamDifferentName(@RequestParam("name") String userName , int age){

   System.out.println("普通参数传递 userName == "+userName);

   System.out.println("普通参数传递 age == "+age);

   return "{module:common param different name}";

   //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递

   @RequestMapping("/pojoParam")

   @ResponseBody

   public String pojoParam(User user){

   System.out.println("pojo参数传递 user == "+user);

   return "{module:pojo param}";

   //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递

   @RequestMapping("/pojoContainPojoParam")

   @ResponseBody

   public String pojoContainPojoParam(User user){

   System.out.println("pojo嵌套pojo参数传递 user == "+user);

   return "{module:pojo contain pojo param}";

   //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中

   @RequestMapping("/arrayParam")

   @ResponseBody

   public String arrayParam(String[] likes){

   System.out.println("数组参数传递 likes == "+ Arrays.toString(likes));

   return "{module:array param}";

   //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据

   @RequestMapping("/listParam")

   @ResponseBody

   public String listParam(@RequestParam List String likes){

   System.out.println("集合参数传递 likes == "+ likes);

   return "{module:list param}";

  
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据

   @RequestMapping("/listParamForJson")

   @ResponseBody

   public String listParamForJson(@RequestBody List String likes){

   System.out.println("list common(json)参数传递 list == "+likes);

   return "{module:list common for json param}";

   //POJO参数:json格式

   //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应

   @RequestMapping("/pojoParamForJson")

   @ResponseBody

   public String pojoParamForJson(@RequestBody User user){

   System.out.println("pojo(json)参数传递 user == "+user);

   return "{module:pojo for json param}";

   //集合参数:json格式

   //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc

   //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应

   @RequestMapping("/listPojoParamForJson")

   @ResponseBody

   public String listPojoParamForJson(@RequestBody List User list){

   System.out.println("list pojo(json)参数传递 list == "+list);

   return "{module:list pojo for json param}";

   //日期参数

   //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd

   @RequestMapping("/dataParam")

   @ResponseBody

   public String dataParam(Date date,

   @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,

   @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){

   System.out.println("参数传递 date == "+date);

   System.out.println("参数传递 date1(yyyy-MM-dd) == "+date1);

   System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) == "+date2);

   return "{module:data param}";

  

 

  public String listPojoParamForJson(@RequestBody List User list)

  这个方法中注解代表的意思是形参接受的是请求头中的流量

  在config文件里面加上//开启json数据类型自动转换 @EnableWebMvc

  json是以后很常用的传输方式

  0x5响应

  

@Controller

 

  public class UserController {

   //响应页面/跳转页面

   //返回值为String类型,设置返回值为页面名称,即可实现页面跳转

   @RequestMapping("/toJumpPage")

   public String toJumpPage(){

   System.out.println("跳转页面");

   return "page.jsp";

   //响应文本数据

   //返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解

   @RequestMapping("/toText")

   @ResponseBody

   public String toText(){

   System.out.println("返回纯文本数据");

   return "response text";

   //响应POJO对象

   //返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

   @RequestMapping("/toJsonPOJO")

   @ResponseBody

   public User toJsonPOJO(){

   System.out.println("返回json对象数据");

   User user = new User();

   user.setName("itcast");

   user.setAge(15);

   return user;

   //响应POJO集合对象

   //返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

   @RequestMapping("/toJsonList")

   @ResponseBody

   public List User toJsonList(){

   System.out.println("返回json集合数据");

   User user1 = new User();

   user1.setName("传智播客");

   user1.setAge(15);

   User user2 = new User();

   user2.setName("黑马程序员");

   user2.setAge(12);

   List User userList = new ArrayList User

   userList.add(user1);

   userList.add(user2);

   return userList;

  

 

  想返回一个页面直接把方法的返回值写成String然后返回那个页面的名字写在哪里

  响应文本数据
 

  返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解

  响应POJO对象
 

  //返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

  响应POJO集合对象
 

  返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

  0x04总结

  SpringMvc相较于Servlet开发简单了很多只需要常用的注解,我们需要记住的是它用了那些方式去传输数据和验证数据,方便以后对java框架的审计,mvc有很多内容是和Servlet重复的我只需要大概的复习一遍,解下来还有最后一点mvc的只是就是拦截器。

  以上就是java学习之SpringMVC(springmvc jar)的详细内容,想要了解更多 java学习之SpringMVC的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: