目录
1.2 SpringMVC中的核心Servlet -- DispatcherServlet
1.SpringMVC 简介
1.1SpringMVC 基本说明
SpringMVC是基于spring的,是spring中的一个模块,做web开发使用的。SpringMVC叫做spring web mvc说明他是spring的核心技术,做web开发,SpringMVC内部是使用mvc架构模式。
mvc架构模式: 可参考上一篇内的介绍------MyBatis框架(IDEA-Maven篇)---从小白到入门_小小代码_c的博客-CSDN博客
SpringMVC是一个容器,管理对象的,使用loC核心技术。springmvc管理界面层中的控制器对象。SpringMVC底层也是Servlet。以Servlet为核心,接收请求,处理请求。显示处理结果给用户。
处理用户的请求:
用户发起请求----SpringMVC---Spring---MyBatis--mysql数据库
1.2 SpringMVC中的核心Servlet -- DispatcherServlet
DispatcherServlet是框架一个Servlet对象。负责接收请求,响应处理结果。
DispatcherServlet他的父类是HttpServlet
DispatcherServlet 也叫做前端控制器( front controller) 。
SpringMVC是管理控制器对象,原来没有SpringMVC之前使用Servlet作为控制器对象使用。现在通过SpringMVC容器创建—种叫做控制器的对象,代替Servlet行驶控制器的角色。功能。
1.3 为什么使用SpringMVC
以往controller层的servlet代码中:
1.接受请求参数,并且把接受的参数进行封装(麻烦)
2.业务处理
3.转发或重定向页面(容易出现404问题)
4.返回json数据(手动把java对象转谈为json对象,自己把该对象输出。
)
在这4个步骤中只有业务处理是分别不同的功能 其他三个步骤都会重复很多次,而SpringMVC会把1、3、4这些公共的代码进行提取从而使代码变得简洁易懂。
2.快速使用SpringMVC教程
2.1创建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.2 引入SpringMVC依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
2.3创建控制层
@Controller //必须写 使SpringMVC配置文件扫描到该控制层
@RequestMapping("/my") //可写可不写
public class MyController {
@RequestMapping("/hello01") //必须写
public String my01(){
System.out.println("----调用了my01方法----");
return "/views/hello.jsp";
}
}
2.4 配置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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- SpringMVC配置文件-->
<!-- 声明组件扫描器-->
<!--1.包扫描 扫描我们自己的控制层类所在的包或者父包-->
<!-- base-package:对应控制层路径-->
<context:component-scan base-package="com.cys.controller"/>
</beans>
2.5 在web.xml中引入前端控制器
<!--注册servlet-->
<servlet>
<servlet-name>springmvc01</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC01.xml</param-value>
</init-param>
</servlet>
<!--servlet映射路径
url-pattern 作用:把一些请求交给指定的servlet处理
使用中央调度器(DispatcherServlet)
1.使用扩展名方式,格式*.xxx , xxx是自定义的扩展名。
例如*.do , *.action,*.mvc等等.不能使用*.jsp
http:// localhost:8080/myweb/ some.do
http:/ / localhost:8o80/myweb/user/list/queryUser.do
http://localhost:8080/myweb/user/list/list.do
2.使用斜杠 "/"
/: 表示所有的控制层路径 以及静态资源
/*: 表示全部 包含jsp网页
-->
<servlet-mapping>
<servlet-name>springmvc01</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2.6 创建发出申请页面 并执行TomCat
结果:
3.SpringMVC接收参数
3.1接收的参数个数少
3.1.1 第一种
控制层方法:
@Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/hello02")
public String my02( String sname, int sage){
System.out.println("----调用了02方法----");
System.out.println(sname+"___________________"+sage);
return "/views/hello.jsp";
}
}
发送申请页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="my/hello01">调用my01方法</a><br>
<a href="my/hello02?sname=ccc&sage=18">调用my02方法</a><br>
</body>
</html>
3.1.2第二种
控制层方法:
@Controller
@RequestMapping("/my")
public class MyController {
//@RequestParam: value设置接受的参数名称。required:该参数不是必须.defaultValue:默认值
@RequestMapping("/hello02")
public String my02(@RequestParam(value = "name",required = false,defaultValue = "ccc") String sname,
@RequestParam(value = "age") int sage){
System.out.println("----调用了02方法----");
System.out.println(sname+"___________________"+sage);
return "/views/hello.jsp";
}
}
3.2接收多个参数
比如:表单提交时 注册 添加。
解决: 可以把所有的请求参数封装到一个实体类对象中。
例:注册页面
<%--action:为控制层对应方法的路径
method:必须为post
各个name一定要与实体类的属性名相同!!!!!!!!!!!!!!!!
--%>
<form action="my/hello03" method="post">
用户名:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
性别:<input type="radio" value="0" name="sex">男
<input type="radio" value="1" name="sex">女<br>
<button>注册</button>
</form>
将注册表单内的name属性封装成一个实体类对象
//上面的三个@为IDEA插件并引入相关依赖 也可以不使用插件,手动在实体类中写对应的方法
@Data //各个属性的get与set方法 toString方法
@AllArgsConstructor //所有属性的有参构造方法
@NoArgsConstructor //无参构造方法
public class Stu {
private String name;
private Integer sex;
private String password;
}
控制层方法
@Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/hello03")
public String my03(Stu stu){
System.out.println("----调用了03方法----");
System.out.println(stu);
return "hello";
}
}
测试:
3.3 接收的参数为时间参数
若正常接收时间参数会发生接收参数有误:
解决方法:
第一步:在该属性上面加入注解
第二步:导入标签
测试:
4.处理静态资源
什么是静态资源: 比如: css, js, img,html
解决方法:
在配置文件中加入代码
结果:
5.视图解析器
可以看到控制层每个方法返回页面路径时都会携带相同的前缀与后缀 因此SpringMVC内带有一个视图解析器,可自动解析控制层返回的路径。
在配置文件中引入视图解析器:
<!-- 声明视图解析器,帮助处理试图-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀:指定视图文件的路径-->
<property name="prefix" value="/views/"/>
<!-- 后缀:视图文件的扩展名-->
<property name="suffix" value=".jsp"/>
</bean>
控制层代码:
@Controller //必须写 使SpringMVC配置文件扫描到该控制层
@RequestMapping("/my") //可写可不写
public class MyController {
@RequestMapping("/hello01") //必须写
public String my01(){
System.out.println("----调用了my01方法----");
return "hello"; //返回页面去除前缀后缀之后的字符串
}
}
在页面中发出请求之后即可正常映射出页面
6.渲染页面、返回json数据、定义全局异常处理、拦截器
见下一篇^_^