springmvc的工作原理是什么
springmvc的工作原理是:1、浏览器发送请求给DispatcherServlet;2、根据请求找到对应的Controller;3、返回ModelAndView;4、找到对应的视图对象View并渲染;5、返回到浏览器。
SpringMVC工作原理:
(推荐学习:java入门程序)
1、浏览器发送指定的请求都会交给DispatcherServlet,他会委托其他模块进行真正的业务和数据处理;
2、DispatcherServlet会查找到HandleMapping,根据浏览器的请求找到对应的Controller,并将请求交给目标Controller;
3、目标Controller处理完业务后,返回一个ModelAndView给DispatcherServlet;
4、DispatcherServlet通过ViewResolver视图解析器找到对应的视图对象View;
4、视图对象View负责渲染,并返回到浏览器。
(视频教程推荐:java视频教程)
下面我们来看一下代码实例:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>springmvc</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- spring入口 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 项目启动时,就加载并实例化 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 拦截所有不包括jsp的请求 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- springmvc注解驱动 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 开启注解扫描 --> <context:component-scan base-package="cn.itcast.controller"></context:component-scan> <!-- 配置试图解析器 prefix:指定试图所在目录 suffix:指定视图的后缀名 例如:prifex="/WEB-INF/jsp/",suffix=".jsp",当viewname="test"时,跳转到/WEB-INF/jsp/test.jsp页面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
UserControll类
@Controller @RequestMapping("user") public class UserController { @RequestMapping("findAllUsers") public ModelAndView findAllUsers() { ModelAndView mv = new ModelAndView(); ArrayList<User> users = new ArrayList<User>(); for (int i = 0; i < 5; i++) { User user = new User(); user.setUsername("zs" + i); user.setAge(20 + i); user.setIncome(16000.0+i*100); user.setIsMarry(false); user.setHobby(new String[] { "篮球"+i, "足球"+i }); users.add(user); } mv.addObject("users", users); mv.setViewName("users"); return mv; } }
实体类
public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String username; private Integer age; private Boolean isMarry; private Double income; private String[] hobby; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Boolean getIsMarry() { return isMarry; } public void setIsMarry(Boolean isMarry) { this.isMarry = isMarry; } public Double getIncome() { return income; } public void setIncome(Double income) { this.income = income; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } @Override public String toString() { return "User [username=" + username + ", age=" + age + ", isMarry=" + isMarry + ", income=" + income + ", hobby=" + Arrays.toString(hobby) + "]"; } }
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <link rel="stylesheet" type="text/css" href="/css/user.css" /> </head> <body> <table id="customers"> <tr> <th>用户名</th> <th>年龄</th> <th>收入</th> <th>婚姻状态</th> <th>兴趣爱好</th> </tr> <!-- 遍历后台传递的集合数据 --> <c:forEach items="${users}" var="user"> <tr> <td>${user.username}</td> <td>${user.age}</td> <td>${user.income}</td> <!-- 判婚姻状态 --> <td><c:choose> <c:when test="${user.isMarry}">已婚</c:when> <c:otherwise>未婚</c:otherwise> </c:choose> </td> <td> <!-- 再次遍历用户爱好 --> <c:forEach items="${user.hobby}" var="hobby" varStatus="status"> ${hobby} <!-- 如果不是最后一个爱好,则加上逗号,否则就不加 --> <c:if test="${!status.last}">,</c:if> </c:forEach> </td> </tr> </c:forEach> </table> </body> </html>
以上是springmvc的工作原理是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Solana区块链和SOL代币Solana是一种专注于为去中心化应用程序(dApps)提供高性能、安全和可扩展性的区块链平台。SOL代币作为Solana区块链的原生资产,主要用于支付交易手续费、质押和参与治理决策。Solana的独特之处在于其快速的交易确认时间和高吞吐量,使其成为开发者和用户青睐的选择。通过SOL代币,用户可以参与Solana生态系统的各种活动,并共同推动平台的发展和进步。Solana的工作原理Solana采用一种创新的共识机制,被称为历史证明(PoH),能够有效处理数千笔交易。

SpringDataJPA基于JPA架构,通过映射、ORM和事务管理与数据库交互。其存储库提供CRUD操作,派生查询简化了数据库访问。此外,它使用延迟加载,仅在必要时检索数据,从而提高了性能。

VET币:基于区块链的物联网生态系统VeChainThor(VET)是一种基于区块链技术的平台,旨在通过确保数据的可信性和实现价值的安全转移来提升物联网(IoT)领域的供应链管理和业务流程。VET币是VeChainThor区块链的原生代币,具有以下功能:支付交易费用:VET币用于支付VeChainThor网络上的交易费用,包括数据存储、智能合约执行和身份验证。治理:VET币持有者可以参与VeChainThor的治理,包括对平台升级和提案进行投票。激励:VET币用于激励网络中的验证者,以确保网络的

ShibaInu币:以狗狗为灵感的加密货币ShibaInu币(SHIB)是一种去中心化的加密货币,灵感源自于其标志性的柴犬表情包。该加密货币于2020年8月推出,旨在成为以太坊网络上的一种替代狗狗币。工作原理SHIB币是建立在以太坊区块链上的数字货币,符合ERC-20代币标准。它运用去中心化共识机制,即权益证明(PoS),这使得持有者可以通过抵押他们的SHIB代币来验证交易,并从中获得奖励。主要特点庞大的供应量:SHIB币的初始供应量为1000万亿枚,使其成为流通量最大的加密货币之一。低价格:S

Polygon:构建以太坊生态系统的多功能区块链Polygon是一个建立在以太坊之上的多功能区块链平台,原名为MaticNetwork。其目标是解决以太坊网络中的可扩展性、高费用和复杂性问题。Polygon通过提供可扩展性解决方案,为开发者和用户提供更快速、更便宜、更简单的区块链体验。Polygon的工作原理如下:侧链网络:Polygon创建了一个由多个侧链组成的网络。这些侧链与以太坊主链并行运行,可以处理大量交易,从而提高整体网络吞吐量。Plasma框架:Polygon利用Plasma框架,这

Algorand:基于纯拜占庭共识协议的区块链平台Algorand是建立在纯拜占庭共识协议之上的区块链平台,旨在提供高效、安全且可扩展的区块链解决方案。这一平台由麻省理工学院的教授SilvioMicali于2017年创立。工作原理Algorand的核心在于其独特的纯拜占庭共识协议,即Algorand共识。这个协议允许节点在不信任的环境中实现共识,即使网络中存在恶意节点。Algorand共识通过一系列步骤来实现这一目标。密钥生成:每个节点生成一对公钥和私钥。提议阶段:一个随机选择的节点提议一个新区

AR币:基于增强现实技术的数字货币AR币是一种数字货币,利用增强现实技术为用户提供与数字内容互动的体验,使他们可以在现实世界中创造身临其境的体验。工作原理AR币的工作原理基于以下关键概念:增强现实(AR):AR技术将数字信息叠加在现实世界中,使用户能够与虚拟对象进行交互。区块链:区块链是一种分布式账本技术,用于记录和验证交易。它为AR币提供安全性和透明度。智能合约:智能合约是存储在区块链上的代码,用于自动化特定操作。它们在AR币的创建和管理中发挥着至关重要的作用。AR币的工作流程如下:创建AR体

Beam币:注重隐私的加密货币Beam币是一种专注于隐私保护的加密货币,旨在提供安全且匿名的交易。它采用了MimbleWimble协议,这是一种区块链技术,通过合并交易和隐藏发送者与接收者的地址来增强用户的隐私保护。Beam币的设计理念是为用户提供一种能够确保交易信息保密的数字货币选择。通过采用这种协议,用户可以更加放心地进行交易,而无需担心他们的个人隐私信息被泄露。这种隐私保护的特性使得Beam币Beam币的工作原理MimbleWimble协议通过以下方式增强隐私:交易合并:它将多个交易组合成
