一、基本概念
1、三层架构
2、spring mvc概述
spring mvc在spring中的位置:
1)优势
2)struts2和spring mvc优劣分析
二、入门案例(掌握步骤,以后的开发都基于此步骤)
1、入门程序需求的分析
2、环境搭建
搭建环境maven--》补全目录--》导入jar包 --》配置前端控制器 --》springmvc配置文件 --》配置服务器;
创建maven项目在坐标中添加一对:
archetypeCatalog - internal 使得项目创建速度更快一些
在web.xml中配置前端控制器:
3、编写代码
导入对应的依赖关系:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- 版本锁定-->
<spring.version>5.1.7.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
在web.xml文件中配置前端控制器:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>DispatcherServlet</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>
<!--文件加载配置项-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置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
https://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
http://www.springframework.org/schema/tool/spring-mvc.xsd">
<!--开启注解扫描器-->
<context:component-scan base-package="com.dzg"/>
<!--视图解析器的对象,跳转到指定的页面-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/><!--在对应的文件下查找前缀-->
<property name="suffix" value=".jsp"/><!--所找文件对应的后缀-->
</bean>
</beans>
不需要编写servlet继承HttpServlet来接收客户端的请求,只需要编写一个普通类即可实现对用户请求的解析:使用反射技术。
在相应的类和方法中添加注解,根据用户的请求调用对应的方法。
普通的java类:
/**
* 控制器类
*/
@Controller
public class HelloSpringMVC {
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("hello springmvc");
return "success";
}
}
view层对应的index.jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>spring mvc入门</h1>
<a href="hello">入门</a>
</body>
</html>
用户请求成功后所跳转到的页面:
显示一个成功的信息即可。
4、入门流程分析
前端控制器是指挥中心:
5、入门案例涉及的组件
6、注解介绍
@RequestMapping:可以放在方法上、类上(表示某一个具体的模块)
该注解的属性:
path和value作用一样,均指映射的路径
三、请求参数的绑定
1、基本数据类型参数的绑定:
@Controller
@RequestMapping("/param") //可以用来表示一个项目内具体的一块
public class ParamController {
/**
* 参数绑定入门测试
* @param username
* @return
*/
@RequestMapping("/testParam")
public String testParamBind(String username){
System.out.println("执行参数绑定的测试:"+username);
return "success";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>参数绑定</h1>
<a href="param/testParam?username=xxx">请求参数绑定</a>
</body>
</html>
2、请求参数绑定实体类型
name属性要和实体类型的属性一样,从而查找到对应的set方法,将数据封装到bean中。
<h1>参数绑定</h1>
<a href="param/testParam?username=xxx">参数绑定测试</a>
<h1>绑定实体类型的参数</h1>
<form action="param/entityParam" method="post">
用户名:<input type="text" name="username"><br/>
密 码:<input type="text" name="password"><br/>
余 额:<input type="text" name="money"><br/>
<input type="submit" value="提交">
</form>
实体中包含引用类型的数据封装:
<h1>绑定有关联的实体类型的参数</h1>
<form action="param/entityParam2" method="post">
用户名:<input type="text" name="username"><br/>
密 码:<input type="text" name="password"><br/>
余 额:<input type="text" name="money"><br/><br/><br/>
姓 名:<input type="text" name="user.uname"><br/>
年 龄:<input type="text" name="user.uage"><br/>
<input type="submit" value="提交">
</form>
配置解决post请求中文乱码的过滤器:
在web.xml中:
提供初始化参数:
3、请求参数绑定集合类型的数据
4、自定义类型转换器
对于日期2000-12-12无法完成封装
2000/12/12可以完成封装
编写工具类:
在springmvc.xml中配置自定义类型转换器:
5、获取Servlet原生的API
四、常用注解
1、
2、(异步时候用的多)
3、
了解:
可以在方法中直接添加HttpServletRequest的参数,但是耦合度太高,所以使用Model类
在success.jsp页面中:
${requestScope}
${sessionScope}