SpringMVC学习

SpringMVC是什么

SpringMVC是一种基于Java的实现MV设计模式的请求驱动类型的轻量级Web框架

SpringMVC和Struts2对比

共同点:

  1. 都是表现层框架,都是基于MVC模型编写的;
  2. 底层都离不开原始ServletAIP;
  3. 处理请求的机制都是一个核心控制器。

区别:

  1. SpringMVC的入口是Servlet,而Struts2是Filter;
  2. SpringMVC是基于方法设计的,而Struts2是基于类,Struts2每次执行都会创建一个动作类,所以SpringMVC会稍微比Struts2快些;
  3. SpringMVC使用更加简洁,开发效率SpringMVC更高,同时还支持JSR303,处理Ajax的请求更方便;
  4. Struts2的OGNL表达式使页面的开发效率相对比SpringMVC更高些,但执行效率并没有比JSTL提升,尤其是Struts2的表单标签,远没有html执行效率高。

SpringMVC执行流程

代码

web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--配置前端控制器-->
<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>
<!--设置项目启动时DispatcherServlet加载一次-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!--表示任意请求都会经过servlet-->
<url-pattern>/</url-pattern>
</servlet-mapping>

springmvc.xml

1
2
3
4
5
6
7
8
9
<!--开启注解扫描-->
<context:component-scan base-package="com.ligangit"/>
<!--视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--开启SpringMVC框架注解支持-->
<mvc:annotation-driven/>

HelloController.java

1
2
3
4
5
6
7
8
@Controller
public class HelloController {
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("Hello SpringMVC");
return "success";
}
}

index.jsp

1
2
3
4
5
6
7
8
9
10
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>Hello World!</h3>
<a href="hello">入门程序</a>
</body>
</html>

success.jsp

1
2
3
4
5
6
7
8
9
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>入门成功!</h3>
</body>
</html>

启动服务器,加载一些配置文件

  1. DispatcherServlet对象创建
  2. springmvc.xml被加载
  3. HelloController创建成对象

发送请求,后台处理请求

后台处理

  1. 客户端发送Request请求(hello)
  2. 前端控制器查找方法,并执行,将返回结果传给视图解析器(InternalResourceViewResolver)
  3. 视图解析器根据传递过来的值获取seccess.jsp,返回视图给前端控制器
  4. 前端控制器将视图响应给客户端

RequestMapping注解

出现位置

  1. 类上面:

    1
    2
    3
    @Controller
    @RequestMapping(path = "/user")
    public class HelloController {
  2. 方法上面:

    1
    2
    3
    4
    5
    @RequestMapping(path = "/hello")
    public String sayHello(){
    System.out.println("Hello SpringMVC");
    return "success";
    }

作用

用于建立请求URL和处理请求方法之间的对应关系。

属性

  1. path:用于指定请求的URL。

  2. value:用于指定请求的URL。它和path属性的作用是一样的。

  3. method:用于指定请求的方式。

  4. params:用于指定限制请求参数条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样。

    例如:

    ​ parms={“accountName”},表示请求参数必须有accountName;

    ​ params=(“money!100”),表示请求参数中money不能是100。

  5. headers:用于指定限制请求消息头的条件。

注意:以上四个属性只要出现2个或以上时,他们的关系是与的关系。

示例:

1
@RequestMapping(value = "/hello", method = {RequestMethod.POST, RequestMethod.GET}, produces = "text/html;charset=UTF-8")

配置过滤器解决中文乱码

在web.xml中配置过滤器,将编码格式encoding初始化为UTF-8。

1
2
3
4
5
6
7
8
9
10
11
12
13
<!--配置解决中文乱码的过滤器-->
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

最后更新: 2020年06月29日 23:03

原始链接: http://ligangit.com/2020/06/27/SpringMVC学习/

× 请我吃糖~
打赏二维码