1.如何使用springmvc
(1)创建一个maven-web工程
因为版本问题web-xml文件需要替换,替换代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
(2)引入springmvc的依赖
<dependency>
<!-- springmvc框架的包-->
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
(3)注册DispatcherServlet到web.xml文件上
<servlet>
<servlet-name>Disser</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 编译后的路径-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Disser</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(4)创建我们的springmvc配置文件
新建springmvc
在生成文件中加入
<!-- 映射路径,controller-->
<context:component-scan base-package="com.sfc.controller"/>
<!-- 注释,在加入时间是使用-->
<mvc:annotation-driven/>
<!-- 静态资源放行-->
<mvc:default-servlet-handler/>
(5)创建一个controller类(类似于之前的servlet)
@Controller:该类定义为处理类,类似于(@Webservlet)
@RequestMapping(value="hello"):把请求路径映射到该方法上
@ResponseBody:返回的数据为json数据
package com.sfc.controller;
import com.sfc.ultis.CommonResult;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* author : sfc
*
* @date : 2022-06-12 17:31
*/
@Controller
public class MyController {
@RequestMapping(value = "hello01")
@ResponseBody
public Map hello01(){
System.out.println("jdkjfk");
Map map = new HashMap();
map.put("姓名","张三");
map.put("年龄",44);
return map;
}
}
2.springmvc的运行流程
(1)客户端发送请求http://localhost:8080...........
(2)来到Tomcat服务器
(3)springmvc的前端控制器DipatcherServlet接受所有的请求
(4)查看你的请求地址与哪个@RequestMaping匹配
(5)执行对应的方法
(6)把该字符串经过视图解析器拼接
(7)拿到拼接地址,找到对应的网页
3.如何在Controller接受请求的参数
(1)接收一个参数:如删除
@RequestMapping(value = "hello")
public String hello(int id){
System.out.println(id);
return "这里是跳转网页";
}
(2)接收大量参数:如表单提交
controller:
@RequestMapping(value = "biaodan")
public String biaodan(Student student){
System.out.println(student);
return "这里是跳转网页";
}
jsp:
<%--
Created by IntelliJ IDEA.
User: sfc
Date: 2022-06-12
Time: 18:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="hello01">
姓名:<input type="text" name="name"><br>
城市:<input type="text" name="address"><br>
时间:<input type="text" name="shijian"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
实体:这里的 @DateTimeFormat(pattern = "yyyy-MM-dd")表示时间格式为yyyy-MM-dd
(从前端输出到后台时的时间格式)
拓展:
@JsonFormat(pattern = "yyyy-MM-dd"):从后台输出到前端时的时间格式
此方法需要在springmvc配置文件中配置
<!-- 注释,在加入时间是使用-->
<mvc:annotation-driven/>
package com.sfc.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* author : sfc
*
* @date : 2022-06-12 18:56
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String name;
private String address;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shijian;
}
4.在web.xml上设置编码过滤器
解决乱码的问题
<!-- 编码过滤器-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.接收时间类类型的参数
在时间类型的属性上加一个注解
@DateTimeFormat(pattern="yyyy-MM-dd")
前面已经说过,这里不在多说
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date shijian;
在springmvc的配置文件上开启注释驱动
注意:这里导入的包地址应该是下面这个,以mvc结尾的
xmlns:mvc="http://www.springframework.org/schema/mvc"
<!-- 注释,在加入时间是使用-->
<mvc:annotation-driven/>
6 处理静态资源
无法加载图片的原因,springmvc的前端控制器DispatcherServlet也把静态资源拦截了
在springmvc中配置
<!-- 静态资源放行-->
<mvc:default-servlet-handler/>
7 如何把controller的数据回显到网页
request,session,Model
Controller:
@SessionAttributes(value = {"modelsession"})//设置该model的key为session范围
package com.sfc.controller;
import com.sfc.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Date;
/**
* author : sfc
*
* @date : 2022-06-12 20:29
*/
@Controller
@SessionAttributes(value = {"modelsession"})//设置该model的key为session范围
public class HuixianController {
@RequestMapping(value = "req")
public String req(HttpServletRequest request){
Student student = new Student("张三","郑州",new Date());
request.setAttribute("user",student);
return "hello.jsp";
}
@RequestMapping(value = "model")
public String model(Model model){
Student student = new Student("张三1","郑州1",new Date());
model.addAttribute("user1",student);
return "hello.jsp";
}
@RequestMapping(value = "session")
public String session(HttpSession session){
Student student = new Student("张三2","郑州2",new Date());
session.setAttribute("user2",student);