SpringMVC(第十二阶段)

本文详细介绍了SpringMVC框架的作用、原理及其在开发WEB项目中的应用,包括接收客户端请求参数、数据转发、重定向、使用Session、拦截器等内容。SpringMVC简化了控制器与视图的交互,减少了大量Servlet的使用,提高了开发效率和内存管理。通过实例展示了如何配置DispatcherServlet,创建自定义控制器,并使用Thymeleaf展示页面。同时,文章还探讨了各种接收请求参数的方法、数据转发策略、重定向操作以及Session的使用。最后,讲解了拦截器的概念和配置,以及GET和POST请求的区别,转发与重定向的差异,Session的适用场景,以及如何解决POST请求的乱码问题。
摘要由CSDN通过智能技术生成

目录

SpringMVC

SpringMVC框架的作用

SpringMVC原理

使用SpringMVC框架开发WEB项目

接收客户端提交的请求参数

数据转发

重定向(Redirect)

使用Session

拦截器(Interceptor)

拦截器(Interceptor)


SpringMVC

SpringMVC框架的作用

MVC = Model(数据模型) + View(视图) + Controller(控制器)

SpringMVC框架主要解决了V与C的交互问题,与M无关!

在传统的JavaEE技术中,使用`Servlet`作为`Controller`控制器,用于接收客户端提交的请求,并能够给予响应结果!由于绝大部分`Servlet`都只处理1种请求,例如使用`UserLoginServlet`处理用户的登录请求,使用`UserReigsterServlet`处理用户的注册请求,如果某个项目中,请求的种类太多,就会导致需要开发大量的`Servlet`,有500种请求,就需要开发500个`Servlet`,关于`Servlet`的配置代码也会较长,不易于管理,在实际运行时,服务器的内存中就会有500个`Servlet`的对象,占用的内存较多!

使用SpringMVC框架就可以很好的解决以上问题!

SpringMVC原理

使用SpringMVC框架开发WEB项目

1.案例目标:打开浏览器,输入`http://localhost:8080/项目名称/hello.do`,可以看到自定义的页面!

2. 创建项目

创建`Maven Project`,创建时,勾选`Create a simple project`,**Group Id**为`cn.tedu.spring`,**Artifact Id**为`SpringMVC01`,**Packaging**选择`war`。

创建好的项目报错,需要生成**web.xml**文件。

由于这将是一个WEB项目,所以,对项目点右键,在属性中勾选Tomcat。

SpringMVC框架是基于Spring框架的,所以,在前序项目中复制**spring.xml**文件到当前项目中。

从前序项目中复制依赖的代码到当前项目的**pom.xml**中!本次使用SpringMVC框架时,必须添加`spring-webmvc`的依赖,推荐使用4.2或以上版本的`spring-webmvc`框架!

> spring-webmvc是包含spring-context的!

3. 使得DispatcherServlet接收所有.do请求

`DispatcherServlet`是SpringMVC框架中的`Servlet`,其本质就是一个`Servlet`,所以,必须在**web.xml**中添加配置:

    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

当启动项目时,还应该加载**spring.xml**,以得到整个Spring容器!

在`DispatcherServlet`的父类`FrameworkServlet`中,定义了名为`contextConfigLocation`的属性,属性值应该是配置文件的名称,一定指定了配置文件,当初始化`DispatcherServlet`时,就会自动读取配置文件的内容!则配置为:

     <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

最后,再将该`DispatcherSerlvet`设置为启动时初始化即可:

     <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

4. 使用自定义控制器接收请求

在`cn.tedu.spring`包(组件扫描指定的包)中创建`HelloController`控制器类,并在类的声明之前添加`@Controller`注解(此处只能使用这个注解):


    package cn.tedu.spring;
    
    import org.springframework.stereotype.Controller;
    
    @Controller
    public class HelloController {
    
    }

在类中添加处理请求的方法,在方法之前通过`@RequestMapping`注解配置**请求路径与处理请求的方法的对应关系**,例如:


    @RequestMapping("hello.do")
    public void a() {
        
    }

关于处理请求的方法的设计原则:

1. 应该使用`public`权限;

2. 暂时使用`String`作为返回值类型;

3. 方法名称可以自定义;

4. 参数列表暂时为空。

所以,关于处理请求的方法可以设置为:


    @RequestMapping("hello.do")
    public String showHello() {
        System.out.println("UserController.showHello()");
        return null;
    }

完成后,打开浏览器,输入`http://localhost:8080/SpringMVC01/hello.do`进行测试,在浏览器中将无法正常显示页面内容,但是在Eclipse的控制台可以看到以上方法输出的内容,并且,刷新页面或重复提交请求,在控制台可以看到多条输出语句!
.5. 显示页面

在SpringMVC中,当控制器接收到请求后,可以通过JSP页面向客户端呈现数据,或者使用其它的页面技术,例如Thymeleaf等。

如果需要使用Thymeleaf来呈现页面与数据,则需要在项目中添加Thymeleaf依赖,与Thymeleaf整合Spring的依赖:

     <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>3.0.11.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>3.0.11.RELEASE</version>
    </dependency>

此前在控制器中返回`String`类型的数据,其值就是`ModelAndView`中的`View`,即返回的字符串表示**视图名称**,则需要通过`ViewResolver`得到视图组件,在使用`Thymeleaf`时,需要使用的`ViewResolver`是`ThymeleafViewResolver`:

     <!-- 配置模版解析器 -->
    <!-- 1. ClassLoaderTemplateResolver,文件需要放在resources下 -->
    <!-- 2. ServletContextTemplateResolver,文件需要放在webapp下 -->
    <bean id="templateResolver"
        class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver">
        <property name="prefix"
            value="/templates/" />
        <property name="suffix"
            value=".html" />
        <property name="characterEncoding"
            value="utf-8" />
        <property name="templateMode"
            value="HTML" />
        <property name="cacheable"
            value="false" />
    </bean>
        
    <!-- 配置模版引擎 -->
    <bean id="templateEngine"
        class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver"
            ref="templateResolver" />
    </bean>
        
    <!-- 配置视图解析器 -->
    <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="templateEngine"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值