Spring MVC实战指南:构建高效Web应用的架构与技巧(一)

三层架构和MVC

三层架构

开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序。 Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构

表现层:springmvc框架,单例的;struts2,多例的。作用:和客户端进行数据的交互。代替了servlet
业务层:spring框架,处理具体的业务逻辑
持久层三个框架:JDBC、Template、mybatis,用来操作数据库的

MVC模型

  1. Model:数据模型,JavaBean的类,用来进行数据封装。
  2. View:指JSP、HTML用来展示数据给用户
  3. Controller:controller类,用来接收用户的请求,整个流程的控制器。用来进行数据校验等。

springmvc的入门案例

springmvc的概述

  1. 是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。
  2. Spring MVC属于SpringFrameWork的后续产品,Spring 框架提供了 MVC 组件
  3. 使用Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。
    SpringMVC在三层架构中的位置
    表现层框架,页面进行交互

SpringMVC的入门程序

  1. 创建maven的Javaweb项目,导入开发的坐标(pom.xml)

  2. 编写index.jsp和suc.jsp

  3. 编写controller类

  4. 配置前端控制器(servlet类,springmvc框架提供的),springmvc的底层就是servlet(web.xml)

  5. 编写springmvc.xml配置文件(开启注解扫描,配置视图解析器,)

  6. 启动tomcat,测试
    第一步:创建maven的javaweb项目,导入jar包

    <properties> <spring.version>5.0.2.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} ​ org.springframework spring-webmvc {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.0</version>
    <scope>provided</scope>
    </dependency>
    </dependencies>

**第二步:**编写jsp页面
第三步:编写controller类

复制代码
// 把当前类交给IOC容器进行管理
@Controller
public class HelloController {
​
    /**
     * 处理超链接发送出来的请求
     * @return
     */
    // 配置映射的配置
    @RequestMapping(path = "/hello.do")
    public String sayHello(){
​
        System.out.println("入门方法执行了2...");
​
        // 跳转的JSP页面的路径,默认使用的是请求的转发
        // return "/WEB-INF/pages/suc.jsp";
​
        // 配置了视图解析器后,写法
        return "suc";
    }

第四步:在web.xml文件中配置核心控制器(dispatcherServlet、加载springmvc.xml文件)

复制代码
<!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--加载springmvc.xml配置文件,配置的是Spring配置-->
    <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>

第五步:编写springmvc.xml的配置文件

复制代码
   <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd">
  <!-- 配置spring创建容器时要扫描的包 -->
    <context:component-scan base-package="com.qcbyjy"></context:component-scan>
     
    <!-- 配置视图解析器 前缀、后缀-->
    <bean id="viewResolver" 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>

**第六步:**启动tomcat服务器,进行测试

入门案例的执行过程分析

启动tomcat因为配置了load-on-startup,所以在创建dispatcherservlet对象时,会加载springmvc.xml文件

  1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载springmvc.xml配置文件
  2. 开启了注解扫描,那么HelloController对象就会被创建
  3. 从index.jsp发送请求,请求会先到达DispatcherServlet核心控制器,根据配置@RequestMapping注解找到执行的具体方法
  4. 根据执行方法的返回值,再根据配置的视图解析器,去指定的目录下查找指定名称的JSP文件
  5. Tomcat服务器渲染页面,做出响应


springmvc的组件有哪些

  1. 前端控制器(DispatcherServlet)
  2. 处理器映射器(HandlerMapping)-----找到url
  3. 处理器(Handler),相当于controller
  4. 处理器适配器(HandlAdapter)----找到controller
  5. 视图解析器(View Resolver)
  6. 视图(View)

RequestMapping注解

一级路径:写在类的上面;
二级路径:写在方法的上面;
细节:路径可以不写/,表示应用的根目录开始

作用

建立请求url和处理方法之间的对应关系

RequestMapping的属性

path:指定请求的路径信息
value:value属性和path属性是一样的
method:指定该方法的请求方式(get获取、post修改、delete删除、put添加)
params:指定限制请求参数的条件,多个参数要用{}括起来

  • RequestMapping中没有属性时,代表的是value,因为只有value可以省略不写,但是当value有多个参数时,value是要声明出来的

  • 超链接是get请求,405错误表示请求方式错误

    @Controller
    @RequestMapping(path = "/role") // 一级请求路径
    public class RoleController {
    /**
    * /role/save.do
    * method="当前方法允许请求方式能访问"
    * params="请求路径上传参数"
    * @return
    */
    @RequestMapping(path = "/save.do",method = {RequestMethod.GET},params = "username")
    public String save(String username){
    System.out.println("保存角色...");
    return "suc";
    }
    @RequestMapping(value = "/delete.do")
    public String delete(){
    System.out.println("删除角色...");
    return "suc";
    }

getMapping、postMapping、putMapping、deleteMapping、requestMapping。requestMapping是其它四个的综合

请求参数的绑定

表单提交数据的形式:key=value形式
参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定

类型(4种)

  • 基本数据类型和字符串类型的接收:
    params属性来绑定入参;
    提交表单的name和方法中的参数名称是一样的;
    区分大小写
  • 实体类(javaBean)接收:
    当参数多的时候封装到一个实体类中
    提交表单的name和JavaBean中的属性名称需要一致;
    如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name
  • 集合数据类型(List、map集合等)接收
  • Date类型 :Date birthday,数据输入的默认形式为2024/02/01,用.或者-都不行。
    通过以下方式来改变:日期的写入形式
    实体类中: @DateTimeFormat(pattern="yy-MM-dd HH:ss:mm")
    配置文件(springmvc文件)中:让映射器生效

    绑定格式后必须按格式写,默认的格式就不能使用了。

请求参数中文乱码的解决

在web.xml文件中配置spring提供的过滤器来解决

复制代码
 <!-- 配置过滤器,解决中文乱码的问题 -->
    <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>
相关推荐
疾风铸境8 分钟前
Qt5.14.2+mingw64编译OpenCV3.4.14一次成功记录
前端·webpack·node.js
晓风伴月12 分钟前
Css:overflow: hidden截断条件‌及如何避免截断
前端·css·overflow截断条件
最新资讯动态14 分钟前
使用“一次开发,多端部署”,实现Pura X阔折叠的全新设计
前端
爱泡脚的鸡腿29 分钟前
HTML CSS 第二次笔记
前端·css
灯火不休ᝰ1 小时前
前端处理pdf文件流,展示pdf
前端·pdf
智践行1 小时前
Trae开发实战之转盘小程序
前端·trae
最新资讯动态1 小时前
DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗
前端
lvbb661 小时前
框架修改思路
前端·javascript·vue.js
树上有只程序猿1 小时前
Java程序员需要掌握的技术
前端
从零开始学安卓1 小时前
Kotlin(三) 协程
前端