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

embedded/2025/1/2 10:27:55/

三层架构和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}</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.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>


http://www.ppmy.cn/embedded/150151.html

相关文章

【设计模式】装饰器模式(Decorator Pattern)

定义 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式。 装饰器模式通过创建一个装饰类&#xff0c;包装原始对象&#xff0c;并在保持原始对象接口不变的情况下&#xff0c;扩展其功能。 模式示例 #include <iostream> #include <strin…

pytorch nn.Parameter模块介绍

在 PyTorch 中&#xff0c;nn.Parameter 是一个用于定义可训练参数的模块。它通常用于自定义模型时&#xff0c;将张量注册为模型的一部分&#xff0c;使其在训练过程中能够被优化。 nn.Parameter 的作用 可训练性&#xff1a;将一个普通张量转换为 Parameter 后&#xff0c;…

【HENU】河南大学计院2024 操作系统 简答题复习

和光同尘_我的个人主页 一直游到海水变蓝。 单项选择 15x2 30 判断 10x1 10 简答 3x10 30 综合 3x10 30 简答题 简述操作系统的四个基本特征。 并发性 共享性 虚拟性 异步性 并发性是最重要特性&#xff0c;其它三种特性以此为前提。 并发 并发(Concurrence)&#…

2.5.3 文件使用、共享、保护、安全与可靠性

文章目录 文件使用文件共享文件保护系统安全与可靠性 文件使用 操作系统向用户提供操作级、编程级文件服务。 操作级服务包括目录管理&#xff0c;文件操作&#xff08;复制、删除、修改&#xff09;&#xff0c;文件管理&#xff08;设置文件权限&#xff09;。 编程级服务包括…

sqlalchemy-access库操作MS Access

因目前项目中数据处理的量稍大&#xff0c;为了方便和业务进行交互&#xff0c;对数据的加工和处理放到微软桌面数据库MS Access中。然后有些地方通过 Python 来操作 MS Access 数据库&#xff0c;用到 sqlalchemy-access库。本文对操作的要点做简单的描述。 之前写过一篇 Pyt…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…

最新版Chrome浏览器加载ActiveX控件技术——alWebPlugin中间件V2.0.28-迎春版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

flask-admin 在modelview 视图中重写on_model_change 与after_model_change

背景&#xff1a; 当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型&#xff0c;其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。 制作&#xff1a; 1、在modelview视图下框架会通过默认视图…