Spring MVC
开发架构
- C/S = 客户端/服务器
- B/S = 浏览器/服务器
三层架构
- 表现层-web层 与客户端进行交互
- 业务层-service层 负责业务的逻辑处理
- 持久层-dao层 负责数据持久化
MVC
- Model
- View
- Controller
Spring MVC 的 优势
1.清晰的角色划分
Spring MVC 的分工
- 前端控制器(DispatcherServlet)
- 处理器映射(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResolver)
- 处理器或页面控制器(Handler 或 Controller)
- 验证器( Validator)
- 命令对象(Command )
- 表单对象(Form Object )
- 视图(View)
2.分工明确 拓展灵活
3.无需继承框架特定API (命令对象是POJO)
4.和Spring其他框架无缝衔接
5.可适配
6.可定制
…
Spring MVC 的入门案例
1.创建maven的web模块
2.修改pom.xml配置
3.配置核心控制器Servlet类
<!-- 配置SpringMVC核心控制器类-->
<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>
</servlet>
<!-- 请求 入口的映射-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4.创建 spring mvc 的配置文件
<!-- 配置创建 spring 容器要扫描的包 -->
<context:component-scan base-package="com.yunhui"></context:component-scan>
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置spring开启注解mvc的支持 -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
5.编写控制器并使用注解配置
@Controller
public class HelloController {
@RequestMapping("/hello")
public String sayHello() {
System.out.println("HelloController 的 sayHello 方法执行了。。。。");
return "success";
}
}
6.测试和结果
SpringMVC 的请求响应流程
具体的开发内容为视图和Handler(也称Controller后端控制器)
RequestMapping 注解属性
用于建立请求 URL 和处理请求方法之间的对应关系。
请求参数的绑定
1.绑定的机制
SpringMVC 绑定请求参数的过程是通过把表单(基于 key=value )提交请求参数,作为控制器中方法参数进行绑定的。
2.支持的数据类型:
基本类型参数:基本类型和String 类型
POJO 类型参数:
包括实体类,以及关联的实体类数组和集合类型参数
包括 List 结构和 Map 结构的集合(包括数组)
3.请求参数乱码问题
POST请求方式:
在 web.xml 中配置一个过滤器
<!-- 配置 springMVC 编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class> org.springframework.web.filter.CharacterEncodingFilter</filterclass>
<!-- 设置过滤器中的属性值 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 启动过滤器 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 过滤所有请求 -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
GET请求方式:
将tomcat 文件夹下conf文件夹中server.xml 中
useBodyEncodingForURI="true"改为 URIEncoding=“UTF-8”
REST 风格 URL
REST(英文:Representational State Transfer) 描述了一个架构样式的网络系统, 比如web 应用程序。在目前主流的三种 Web 服务交互方案中,REST 相比于 SOAP(Simple Object Access protocol,简单对象访问协议)以及 XML-RPC 更加简单明了,无论是对 URL 的处理还是对 Payload 的编码,REST 都倾向于用更加简单轻量的方法设计和实现。值得注意的是 REST 并没有一个明确的标准,而更像是一种设计的风格。
restful 的优点:结构清晰、符合标准、易于理解、扩展方便
ModelAttribute 用于修饰方法和参数
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。数据初始化。
SessionAttribute
用于多次执行控制器方法间的参数共享。