SpringMVC第一天

springmvc概述和入门案例

SpringMVC第一天_第1张图片

创建工程

SpringMVC第一天_第2张图片

可能在网上下载了一些乱七八糟的东西,解决创建项目过慢的问题

SpringMVC第一天_第3张图片~~~~

创建resources下的springmvc.xml


   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">






    
    




    
        
            
        
    




~~~~

webapp下创建web.xml

SpringMVC第一天_第4张图片
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >


Archetype Created Web Application


dispatcherServlet
org.springframework.web.servlet.DispatcherServlet

  contextConfigLocation
  classpath:springmvc.xml

1


dispatcherServlet
/


characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

  encoding
  UTF-8


characterEncodingFilter
/*


RequestMapping注解

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

String name() default "";

@AliasFor("path")
String[] value() default {};

@AliasFor("value")//别名
String[] path() default {};

RequestMethod[] method() default {};

String[] params() default {};

String[] headers() default {};

String[] consumes() default {};

String[] produces() default {};

}
path和value是一样的
@RequestMapping(path="/user")
@RequestMapping(value="/user")
@RequestMapping("/user")
RequestMethod
SpringMVC第一天_第5张图片
public enum RequestMethod {

GET,
HEAD,
POST,
PUT,
PATCH,
DELETE,
OPTIONS,
TRACE;

private RequestMethod() {
}

}
因为是枚举的类型,可以取的值
method={RequestMethod.POST,RequestMethod.GET}
params讲解
SpringMVC第一天_第6张图片

参数绑定和自定义类型转换

1 入门

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/4/29
Time: 22:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Title


<%--请求参数绑定--%>
<%--
请求参数绑定

把数据封装Account类中
姓名:
密码:
金额:
用户姓名:
用户年龄:
--%> <%--把数据封装Account类中,类中存在list和map的集合
姓名:
密码:
金额:
用户姓名:
用户年龄:
用户姓名:
用户年龄:
--%> <%--自定义类型转换器
用户姓名:
用户年龄:
用户生日:
--%> Servlet原生的API


SpringMVC第一天_第7张图片

2 请求参数绑定实体类

3 解决中文乱码

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >


Archetype Created Web Application


dispatcherServlet
org.springframework.web.servlet.DispatcherServlet

  contextConfigLocation
  classpath:springmvc.xml

1


dispatcherServlet
/


characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

  encoding
  UTF-8


characterEncodingFilter
/*

4 请求参数绑定集合类型

<%--请求参数绑定--%>
<%--
请求参数绑定

把数据封装Account类中
姓名:
密码:
金额:
用户姓名:
用户年龄:
--%> <%--把数据封装Account类中,类中存在list和map的集合
姓名:
密码:
金额:
用户姓名:
用户年龄:
用户姓名:
用户年龄:
--%>

表单提交后
image.png
package cn.itcast.controller;

import cn.itcast.domain.Account;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**

  • 请求参数绑定

*/
@Controller
@RequestMapping("/param")
public class ParamController {

/**
 * 请求参数绑定入门
 * @return
 */
@RequestMapping("/testParam")
public String testParam(String username,String password){
    System.out.println("执行了...");
    System.out.println("用户名:"+username);
    System.out.println("密码:"+password);
    return "success";
}

/**
 * 请求参数绑定把数据封装到JavaBean的类中
 * @return
 */
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
    System.out.println("执行了...");
    System.out.println(account);
    return "success";
}


/**
 * 自定义类型转换器
 * @param user
 * @return
 */
@RequestMapping("/saveUser")
public String saveUser(User user){
    System.out.println("执行了...");
    System.out.println(user);
    return "success";
}

/**
 * 原生的API
 * @return
 */
@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response){
    System.out.println("执行了...");
    System.out.println(request);

    HttpSession session = request.getSession();
    System.out.println(session);

    ServletContext servletContext = session.getServletContext();
    System.out.println(servletContext);

    System.out.println(response);
    return "success";
}

}
package cn.itcast.domain;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public class Account implements Serializable{

private String username;
private String password;
private Double money;

// private User user;

private List list;
private Map map;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public Double getMoney() {
    return money;
}

public void setMoney(Double money) {
    this.money = money;
}

public List getList() {
    return list;
}

public void setList(List list) {
    this.list = list;
}

public Map getMap() {
    return map;
}

public void setMap(Map map) {
    this.map = map;
}

/*

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

*/

@Override
public String toString() {
    return "Account{" +
            "username='" + username + '\'' +
            ", password='" + password + '\'' +
            ", money=" + money +
            ", list=" + list +
            ", map=" + map +
            '}';
}

}
package cn.itcast.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{

private String uname;
private Integer age;

private Date date;

public String getUname() {
    return uname;
}

public void setUname(String uname) {
    this.uname = uname;
}

public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

@Override
public String toString() {
    return "User{" +
            "uname='" + uname + '\'' +
            ", age=" + age +
            ", date=" + date +
            '}';
}

}

5 自定义类型转换器演示异常

SpringMVC第一天_第8张图片

6 自定义转换器代码的编写

例如2019-11-11这样日期格式就不行,必须是2020/12/07这样的格式,所以需要自定义转换
必须实现Converter这个接口,而里边是个泛型ctrl+h寻找到类或者接口的继承的关系
ctrl键一直按找类或者接口的源码
SpringMVC第一天_第9张图片

springmvc.xml的配置文件



    
        
            
        
    




编写自定义转换的类

package cn.itcast.utils;

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

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

/**

  • 把字符串转换日期

*/
public class StringToDateConverter implements Converter{

/**
 * String source    传入进来字符串
 * @param source
 * @return
 */
public Date convert(String source) {
    // 判断
    if(source == null){
        throw new RuntimeException("请您传入数据");
    }
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

    try {
        // 把字符串转换日期
        //返回值java.util.Date的类型
        return df.parse(source);
    } catch (Exception e) {
        throw new RuntimeException("数据类型转换出现错误");
    }
}

}
表单提交
SpringMVC第一天_第10张图片
提交后控制台打印的数据
Student{username='李四', age=12, birthday=Sun Mar 22 00:00:00 CST 2020}

7 获取Servlet原生的API~~~~

@RequestMapping("/testServlet")
public String testServlet(HttpServletRequest request, HttpServletResponse response){
    System.out.println("执行了...");
    System.out.println(request);

    HttpSession session = request.getSession();
    System.out.println(session);

    ServletContext servletContext = session.getServletContext();
    System.out.println(servletContext);

    System.out.println(response);
    return "success";
}

SpringMVC第一天_第11张图片

Spring MVC的常用注解

1 RequestParam注解

SpringMVC第一天_第12张图片

2 RequestBody注解

3 PathVariable注解

4 HiddentHttpMethodFilter过滤器

5 RequestHeader注解

6 CookieValue注解

7 ModelAttribute注解

8 SessionAttributes注解

SpringMVC第一天_第13张图片

/**
 * SessionAttributes的注解
 * @return
 */
@RequestMapping(value="/testSessionAttributes")
public String testSessionAttributes(Model model){
    System.out.println("testSessionAttributes...");
    // 底层会存储到request域对象中
    model.addAttribute("msg","美美");
    return "success";
}

/**
 * 获取值获取的时候必须填写Model的实现类ModelMap
 * @param modelMap
 * @return
 */
@RequestMapping(value="/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap){
    System.out.println("getSessionAttributes...");
    String msg = (String) modelMap.get("msg");
    System.out.println(msg);
    return "success";
}

/**
 * 清除
 * @param status
 * @return
 */
@RequestMapping(value="/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
    System.out.println("getSessionAttributes...");
    status.setComplete();
    return "success";
}

你可能感兴趣的:(java)