栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring应用之MVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring应用之MVC

1. 构建SpringMVC项目 1.1 通过Maven构建一个web项目

1.2 添加相关的依赖
  
    
      junit
      junit
      4.11
      test
    
    
    
      org.springframework
      spring-webmvc
      5.1.7.RELEASE
    
    
    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    
  

  
  
    spring-mvc-demo
    
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
        
          8082
          /
          utf-8
        
      
    
  
1.3 创建Spring配置文件


    
    
    
    
    

1.4 在web.xml中配置DispatchServlet



  Archetype Created Web Application
  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:spring-mvc.xml
    
  
  
    springmvc
    /
  

1.5 创建自定义的Controller
package com.wxw.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 {

    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        System.out.println("HelloController执行了!!!");
        ModelAndView view = new ModelAndView();
        view.setViewName("/index.jsp");
        return view;
    }

}
1.6 在Spring配置文件中配置Controller



    
    
    
    

    


1.7 运行测试

启动Tomcat

访问接口

2. 基于注解的方式 2.1 修改Spring配置文件



    
    
    
    


2.2 创建自定义的Controller
package com.wxw.controller;

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

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/query")
    public String query(){
        System.out.println("执行【HelloController】的【query】方法!!!");
        return "/index.jsp";
    }

}
2.3 运行测试

3. SpringMVC中响应请求的方式 3.1 不响应

如果用户提交了请求后服务端不需要给客户端一个响应,那么我们可以指定返回类型为void同时在方法头部添加@ResponseBody注解即可

    @RequestMapping("/save")
    @ResponseBody
    public void add(){
        System.out.println("执行【HelloController】的【save】方法!!!");
    }
3.2 通过字符串返回指定页面

我们可以在处理方法的最后返回一个要跳转的页面地址”/“不要漏了

    @RequestMapping("/query")
    public String query(){
        System.out.println("执行【HelloController】的【query】方法!!!");
        return "/index.jsp";
    }
3.2.1 通过视图解析器添加前后缀

在Spring配置文件中添加视图解析器

    
    
        
        
    

响应页面时,可以用以下方式简写

    @RequestMapping("/query")
    public String query(){
        System.out.println("执行【HelloController】的【query】方法!!!");
        return "index";
    }
3.3 通过ModelAndView返回

ModelAndView是SpringMVC自带的组件,通过该组件可以返回指定的页面,并且可以绑定返回的参数。

    @RequestMapping("/delete")
    public ModelAndView delete(){
        System.out.println("执行【HelloController】的【delete】方法!!!");
        ModelAndView mm = new ModelAndView();
        mm.setViewName("/index.jsp");
        return mm;
    }
3.4 通过重定向跳转
    @RequestMapping("/update")
    public String update(){
        System.out.println("执行【HelloController】的【update】方法!!!");
        return "redirect:/hello/query";
    }
3.5 通过HttpServletResponse响应
    @RequestMapping("/fun1")
    public void fun1(HttpServletRequest request,
                     HttpServletResponse response) throws Exception {
        System.out.println("执行【HelloController】的【fun1】方法!!!");
        request.getRequestDispatcher("/index.jsp").forward(request,response);
    }
4. SpringMVC接收请求数据 4.1 基本数据类型

直接在形参中声明要接收的数据,默认情况下前台传来的参数名必须和形参的名称保持一致,可以使用@RequestParam注解指定相关的属性。

    @RequestMapping("/query")
    public String query(@RequestParam(value = "ids",required = true,defaultValue = "123")Integer id,
                        String name){
        System.out.println("执行【HelloController】的【query】方法!!!");
        System.out.println("接收到的参数ids:" + id + ",name:" + name);
        return "index";
    }
4.2 对象接收

使用自定义对象接收时,参数的名称需要与对象的名称保持一致,并且需要提供对应的setter方法。

    @RequestMapping("/save")
    @ResponseBody
    public void add(UserPojo userPojo){
        System.out.println("执行【HelloController】的【save】方法!!!");
        System.out.println("接收到的参数:" + userPojo);
    }
4.3 通过数组接收

http://localhost:8082/hello/delete?ids=1,2,3,4

    @RequestMapping("/delete")
    public ModelAndView delete(String[] ids){
        System.out.println("执行【HelloController】的【delete】方法!!!");
        System.out.println("接收到的参数:" + Arrays.toString(ids));
        ModelAndView mm = new ModelAndView();
        mm.setViewName("index");
        return mm;
    }
4.4 通过集合接收

在形参中不能使用集合接收参数,但是可以把集合封装在自定义对象中用来接收。

package com.wxw.pojo;

import java.util.List;

@Data
public class UserPojo {

    private String name;
    private Integer age;
    private List catNames;

    @Override
    public String toString() {
        return "UserPojo{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", catNames=" + catNames +
                '}';
    }
}
    @RequestMapping("/update")
    public String update(UserPojo userPojo){
        System.out.println("执行【HelloController】的【update】方法!!!");
        System.out.println("接收到的参数:" + userPojo);
        return "redirect:/hello/query";
    }
执行【HelloController】的【update】方法!!!
接收到的参数:UserPojo{name='wangmian', age=20, catNames=[溜溜, 琉璃]}
4.5 自定义转换器

如果客户端传入的是特殊类型的数据,SpringMVC默认提供的转换器无法支持,则可以使用自定义转换器。

package com.wxw.convert;

import org.springframework.core.convert.converter.Converter;

import java.text.SimpleDateFormat;
import java.util.Date;


public class DateConvert implements Converter {

    @Override
    public Date convert(String s) {
        System.out.println("进入【DateConvert】自定义转换器!!!");
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return sf.parse(s);
        } catch (Exception e){
            System.out.println("日期类型格式错误!!!");
            e.printStackTrace();
        }
        return null;
    }
}

修改配置文件

    
    

    
    
        
            
                
            
        
    
5. SpringMVC返回响应数据 5.1 ModelAndView返回数据
    @RequestMapping("/hello")
    public ModelAndView hello(String name) {
    	System.out.println("进入【HelloController】的【hello】方法!!!");
        ModelAndView mv = new ModelAndView();
        // 指定返回的页面名称
        mv.setViewName("user");
        // 添加返回的数据
        mv.addObject("msg",name);
        return mv;
    }

返回的页面使用EL表达式绑定返回的数据

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    Title


hello
${msg}
5.2 Map对象返回数据
    @RequestMapping("mapHello")
    public String mapHello(Map map,String name){
    	System.out.println("进入【HelloController】的【mapHello】方法!!!");
        map.put("msg",name);
        return "user";
    }
5.3 Model对象返回数据
    @RequestMapping("modelHello")
    public String modelHello(String name, Model model){
    	System.out.println("进入【HelloController】的【modelHello】方法!!!");
        model.addAttribute("msg",name);
        return "user";
    }
5.4 ModelMap对象返回数据
    @RequestMapping("modelMapHello")
    public String modelMapHello(String name, ModelMap modelMap){
        System.out.println("进入【HelloController】的【modelMapHello】方法!!!");
        modelMap.put("msg",name);
        return "user";
    }
5.5 返回响应数据的作用域

默认情况下返回的数据都是保存在request作用域中的,如果需要将数据保存在session作用域中,只需要在类的头部添加@SessionAttributes注解即可。

@Controller
@RequestMapping("/hello")
@SessionAttributes({"msg"})
public class HelloController {
}
5.6 响应数据乱码问题
  
    encodeFiletr
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
    
      forceRequestEncoding
      true
    
    
      forceResponseEncoding
      true
    
  
  
    encodeFiletr
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        return true;
    }

    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

在Spring配置文件中注册拦截器

    
    
        
            
            
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号