mvc架构
什么是springmvc框架****
MVC架构它是一个编程思想,把程序划分成三部分。Model模型层 View视图层 Controller控制层

什么是springmvc框架
springmvc框架就是按照上面三层架构的思想设计的一款框架。springmvc的主要作用: :接收浏览器的请求数据,对数据进行处理,然后返回页面进行显示 类似: servlet。
为什么使用springmvc框架

springmvc:自动接受参数,自动响应客户的一款框架。
如何使用springmvc框架。
1 创建一个maven的web工程。

2 添加依赖
<!--springmvc的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
3 springmvc配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--controller层包的扫描-->
<context:component-scan base-package="com.ykq.controller"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/views/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4 controller类的编写
@Controller //表示该类为控制层类。
public class HelloController {
@RequestMapping("/index") // 请求路径/index路径映射到该方法上。
public String index(){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~index~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
return "index"; //经过视图解析器解析。 /views/index.jsp
}
@RequestMapping("/main")
public String main(){
System.out.println("~~~~~~~~~~~~~~~~~~~~~main~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
return "main"; //经过视图解析器解析。 /views/main.jsp
}
}
5 注册公共servlet--DispatcherServlet
<?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">
<!--注册公共servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--读取springmvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--任何路径都会经过公共servlet-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

流程

* 1. 客户端发送请求http://localhost:8080/aaa
* 2. 来到tomcat服务器。
* 3. springmvc的前端控制器DipatcherServlet接受所有的请求。
* 4. 查看你的请求地址和哪个@RequestMaping匹配。
* 5. 执行对应的方法。方法会返回一个字符串。
* 6. springmvc把该字符串解析【视图解析器】为要转发的网页。把该字符串经过视图解析器拼接。/prefix/字符串.后缀
* 7. 拿到拼接的地址,找到对应的网页。
* 8. 渲染该网页给客户
springmvc接受参数
1 接受少量参数
比如:删除操作。只传入id值。

2 传递大量参数
比如:注册和修改功能。需要传递表单的整个数据。这是如果在一一的设置方法参数就比较麻烦了。我们应该封装一个实体类用来接受表单提交的数据。

3 解决接受参数的乱码问题
设置请求的编码类型。必须使用过滤器。可以自己定义过滤器也可以使用springmvc自带的过滤器。
自定义编码过滤器
package com.ykq.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @Author: 闫克起
* @Description:
* @Date: Create in 11:14 2024/10/8
*/
@WebFilter(urlPatterns = "/*")
public class EncodingFiler implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("~~~~~~~~~~~~~~");
}
@Override
public void destroy() {
System.out.println("~~~~~~~~~~~~~~~~~~~~~~");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletResponse.setCharacterEncoding("utf-8");
servletRequest.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest,servletResponse);//放行
}
}
使用springmvc自带的过滤器
CharacterEncodingFilter
<!--注册编码过滤器-->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
4 解决接受日期类型的数据

解决办法:
第一步: 开启springmvc注解驱动

第二步: 使用日期格式化注解

处理静态资源
什么才是静态资源: 比如: css, js , images等这些称为静态资源。

放行静态资源。凡是静态资源无需经过前端控制器DispatcherServlet

springmvc如何响应数据?
原来servlet保存数据,都在四大域中保存。pageContext, request,session,application. springmvc控制层中如何保存数据。它也可以保存在request,session. 它也可以保存自己提供的类对象中。
package com.ykq.controller;
import com.ykq.entity.User;
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;
/**
* @Author: 闫克起
* @Description:
* @Date: Create in 16:06 2024/10/8
*/
@Controller
@SessionAttributes({"name4"}) //在model中保存的数据指定name4的范围为session的范围。
public class Hello2Controller {
//保存到Request对象中.
@RequestMapping("/a")
public String a(HttpServletRequest request){
request.setAttribute("name","张三");
return "a";//转发跳转
}
//上面这种方式采用的还是HttpServletRequest保存的, 但是这种模式必须依赖servlet的jar. 如果不想依赖servlet的jar,则可以
//使用springmvc提供的对象用来保存。Model对象。
@RequestMapping("/b")
public String b(Model model){
model.addAttribute("name2","李四"); //model保存数据的周期默认和request一样。
return "a";
}
//保存数据到session中。
@RequestMapping("/c")
public String c(HttpSession session){
session.setAttribute("name3","王五");
return "a";
}
//上面保存session中的数据采用的还是servlet中session。如果我们不想依赖servlet的jar。则springmvc也提供了存放范围类似session.
@RequestMapping("/d")
public String d(Model model){
User user=new User();
user.setName("刘德华");
user.setAddress("香港");
model.addAttribute("name4",user);
return "a";
}
}
页面跳转时无需经过springmvc视图解析器。
forward:/路径 或者 redirect:/路径 当springmvc看到forward和redirect关键字时,无需经过视图解析器。
@RequestMapping("/f")
public String f(){
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~");
// return "forward:/a.jsp"; //转发跳转到a.jsp 无需经过视图解析器
return "redirect:/a.jsp"; //重定向跳转到a.jsp 无需经过视图解析器
}
springmvc零散的内容
@RestController作用等价于@Controller+@ResponseBody的合体
@GetMapping: 请求方式必须为get请求。适合查询操作。
@PostMapping:适合添加操作
@PutMapping: 修改操作
@DeleteMapping:删除操作。
浙公网安备 33010602011771号