首页 文章 精选 留言 我的

精选列表

搜索[零代码],共10000篇文章
优秀的个人博客,低调大师

从零学习Spring MVC框架「环境搭建和MVC架构」

这是Spring MVC框架教程的第一篇,首先为大家讲解MVC架构思想,MVC模式并不是Javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型「Model」、视图「View」和控制器「Controller」,即为MVC。 图源见文末我们直接拿例子来解释,最典型的MVC就是Jsp+servlet+Javabean模式。比如登陆的案例,在视图层即Jsp中有一个表单,用户填写用户名和密码,点击提交。这时候会跳转到控制层,控制层Servlet会接受到表单提交的用户名和密码。 注意:我们并不会在Servlet里面进行业务逻辑和数据库SQL编写,这样会显得杂乱不堪。MVC架构的思想是,控制层接到用户名和密码送给Service层,在Service层中进行业务逻辑的编写,比如判断当前有没有此用户、密码是否正确。 判断密码的正确性需要和数据库进行交互,此时就需要另一个Dao层,Dao是专门和数据库打交道,在Dao层中可以利用JDBCUtil进行SQL的编写,并把查询的结果返回给Service层。Service层有了Dao层的返回结果便可以进一步判断密码是否正确、用户名存不存在,从而给控制层一个答复。 控制层接到Service层的答复后进行跳转,比如:密码错误时,返回Json值到视图层,视图层进行渲染展示给用户,密码正确就可以直接跳转到主页面。这样分工明确才有利于项目的扩展和维护,我们学习的SSM框架便是很好的实践: 对于我们学习的SSM框架中,Spring MVC便是充当控制层的角色,即可以近似理解为提到了上面登陆例子中的Servlet,Mybatis作为数据访问层的解决方案,近似理解为登陆例子中JDBC,而Spring是横跨三层的一种容器框架。 简介Spring的模型-视图-控制器(MVC)框架是围绕一个 DispatcherServlet 来设计的,这个Servlet非常重要,此Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区 与主题渲染等,甚至还能支持文件上传。这个Servlet是框架的核心,暂时不理解没关系。 处理器是你的应用中注解 了 @Controller 和 @RequestMapping 的类和方法,Spring为处理器方法提供了极其多样灵活的 配置。Spring 3.0以后提供了 @Controller 注解机制、 @PathVariable 注解以及一些其他的特 性,也就是说你可以使用RESTful 风格的接口。上方的简介涉及的名称和注解不理解没关系,只需要有个大体的印象即可,我们会慢慢的为大家解释清楚。 起步 学习Spring MVC框架,首先我们搭建一个环境出来,在搭建环境的过程中就会对此框架有个大体的了解,开始我们的环境搭建。 去官网下载相应的Jar包,解压后这样的: Jar包就在libs此文件夹里,docs是相关文档,schema是xml上方的约束。libs下有我们需要的Jar包,它是class文件,docs是文档,source是源码java文件,准备好了Jar包我们就开始环境搭建。 案例截图 导入Jar包 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_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SpringMVC01</display-name> <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app> 在上方web.xml中,配置了一个用于调度控制的Servlet,在我们框架的学习过程中,DispatcherServlet是特别重要的,也是框架的核心。所有的请求驱动都围绕这个控制器开分派请求,分别Servlet的配置进行解释: 全限定类名org.springframework.web.servlet.DispatcherServlet此全限定类名可以在导入的Jar文件spring-webmvc-4.2.1.RELEASE.jar的第一个包org.springframework.web.servlet中找到。 在中添加的作用是在web服务器(tomcat)启动时会不会创建这个Servlet实例,即是否在Web服务器启动时调用该Servlet的 init()方法,而不是真正访问时才创建实例。 值大于等于0时,Web容器启动时就加载并初始化此Servlet,数字越小,被创建的越早。 当值小于0或不指定时,Servlet在真正被使用时才被创建。 值相同时,容器自己选择次序。 不要写/,否则所有的Jsp页面会报404错误,我们使用的是 / :表示包括静态文件,css、js等一并拦截,这就需要对静态文件进行处理,否则出现就会没有样式的情况,具体处理在后面文章给出。同样还可以使用/.do来拦截以.do结尾的请求,这也是开发中常用的。mvc在DispatcherServlet加载的时候需要一个Spring MVC 的配置文件,默认情况下,应用会去WEB-INF文件夹下查找对应的[name]-servlet.xml文件。对应我们的的xml配置就是是mvc-servlet.xml,也就是说mvc中参数名一定和Spring mvc的配置文件相同,如图: 并非一定要把Spring MVC的配置文件放在WEB-INF下面,你可以在Servlet的配置文件添加配置来指定配置文件路径。 HelloWorldController.java @Controller public class HelloWorldController { @RequestMapping("/test01") public ModelAndView test01(){ System.out.println("Hello World!"); return null; } @RequestMapping("/webjujidi") public ModelAndView upload(){ System.out.println("web项目聚集地"); return null; } } 我们创建一个类HelloWorldController,在类的上方添加@Controller注解,表明此类的实例是一个控制器,我们请求会在Controller中匹配方法进行处理,@RequestMapping注解类型用来映射一个请求和请求的方法,@RequestMapping("/test01")此注解表明凡是请求/test01路径都会被test01方法处理,即打印出Hello World。 在Spring MVC中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。 在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 注解标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。 7. mvc-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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 启动springMVC注解 --> <mvc:annotation-driven/> <!-- 扫描注解所在的包 --> <context:component-scan base-package="com.**.controller"></context:component-scan> </beans> 上面的xml就是Spring MVC的配置文件,这个文件用来编辑Spring MVC相关的配置,对配置的两行进行讲解: 这是一种简写形式,完全可以手动配置替代这种简写形式,此配置会自动注册为RequestMappingHandlerMapping和RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必须的。 在Controller中我们使用了@Controller和@RequestMapping注解,但是使用它们需要在Spring MVC的配置文件中添加配置用来启动Spring MVC的注解。 在xml配置了这个标签后,Spring可以自动去扫描base-pack下面或者子包下面的java文件,如果可以扫描到含有@Component @Controller@Service等这些注解的类,则把这些类注册为bean。 这里是自动扫描带@Controller注解的类注册为bean,没有学习Spring可能对这个地方不理解,不过没关系,我们会马上推出Spring的教程,你先暂时理解为:配置了它后,就可以找到带@Controller注解的类,我们就可以使用它了即可。 运行截图 注意观察,箭头的指向,我们在浏览器中请求 test01路径,此时test01的请求会被Servlet拦截,然后去匹配Controller中哪个方法上方@RequestMapping注解的值和test01相同,便会执行相应的方法。 注意观察,箭头的指向,我们在浏览器中请求/web路径,此时/web的请求会被Servlet拦截,然后去匹配Controller中哪个方法上方@RequestMapping注解的值和/web相同,便会执行相应的方法。 工作原理如果看到这里你能明白个大概就说明你已经入门了,接下来我会详细的和你解释一些刚刚的案例是怎么样的流程,以及Spring MVC的工作原理。 对于我们刚刚搭建的案例工作流程是这样的:用户发送请求至前端控制器DispatcherServlet。DispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成,我们没有使用)返回DispatcherServlet。 DispatcherServlet调用HandlerAdapter处理器适配器。HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。Controller执行方法在控制台打印"Hello World"等。 我们案例的视图层可以简单的理解为是控制台,但实际开发中并非这样,我只是为了降低难度,不想第一篇文章涉及太多概念,让读者失去学习的兴趣,而实际开发中Spring MVC的工作流程可以看下图: 流程解释 用户发送请求至前端控制器DispatcherServlet。 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 DispatcherServlet调用HandlerAdapter处理器适配器。 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 Controller执行方法在控制台打印"Hello World"等,我们测试学习使用的控制台,开发中执行完毕常常返回ModelAndView。 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 ViewReslover解析后返回具体View。 DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 DispatcherServlet响应用户。 上方是对比较完整的Spring MVC搭建的web项目工作原理的描述,我们刚开始的案例很多概念没有涉及到,如ModelAndView、视图解析器等,以后我们会逐渐完善项目,并且一一讲解。 原文发布时间为:2018-07-17本文作者:王久一本文来自云栖社区合作伙伴“Web项目聚集地”,了解相关信息可以关注“Web项目聚集地”。

优秀的个人博客,低调大师

高德地图“零佣金 不营利” 上线公益顺风车

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 3月27日消息,高德地图今日宣布推出顺风车业务,成都、武汉两地率先上线,同时开启北京、上海、广州、深圳、杭州等城市的车主招募,之后将逐步扩展到全国更多城市。与其他顺风车平台抽取用户10%佣金不同的是,高德公益顺风车平台没有任何商业化目的,将坚持对用户不抽佣,对行业不打补贴战,对城市道路不添堵,而是基于其长期积累的自驾出行用户及出行调度能力,在不增加城市道路压力的情况下,以科技手段提升运力,从而提升社会出行效率,缓解城市交通拥堵。 不以营利为目的 还原顺风车本质 在发布会上,高德集团总裁刘振飞表示:“顺风车本是非常绿色的共享出行方式,它在不增加道路压力的情况下,撮合共同的出行需求,可以有效提高社会出行效率,缓解城市交通拥堵,降低空气污染。但随着行业的发展,由于顺风车有巨大的发展潜力,我认为有些平台已经渐渐背离了顺风车的初衷。” 高德集团总裁刘振飞 据高德与清华-戴姆勒可持续交通研究中心此前发布的一份报告显示,以北京五环范围内为例,有16.4%的出行需求高度重合,若充分发展顺风拼车,预计每年可减少驾车里程约1.11亿公里,相当于减少3万吨的碳排放。 但目前部分平台为了提高市场占有率,依靠大量补贴拉拢新增车主,人为地刺激了道路车辆的增加,使得交通压力不降反增。据高德交通大数据显示,某平台在北京上线顺风车业务一周后后,包括海淀、石景山等多个城区的交通拥堵情况,不仅没有减缓反而有所增加。而这些平台在占据市场之后,为了获取营收,又不断提高抽取用户佣金的比例,一般约为车费的10%。 对此刘振飞表示,高德公益顺风车的初衷是“真公益,真顺风”,坚持不以营利为目的,撮合的是高德平台上现有的自驾出行用户以及真实的用户出行需求,坚决不打补贴战,不会刺激运力额外增加;高德顺风车也坚决不会抽取用户佣金,甚至目前还为用户补贴短信通知、保险等第三方服务费,保证乘客花多少钱,车主就能拿到多少钱。 交通大脑助力顺风车出行更智慧 “高德顺风车业务的推出,完全是顺势而为。”刘振飞表示,高德不仅拥有大量的用户出行需求,也有亿级的自驾车主用户,在使用场景上与顺风车具有非常高的契合度。此外,高德在交通大数据、智能躲避拥堵、城市交通大脑等方面有深厚的积累,与顺风车业务相结合,可以为用户提供更优质的出行体验。 据了解,作为国内***的移动出行平台,高德地图如今拥有7亿用户,同时还聚集了国内***数量的车主用户,平均每天为用户提供高达3.4亿次的出行路线规划。这些海量的用户出行需求,尤其是早晚高峰的通勤路线,往往具有较高的重合度。这都是高德顺风车得天独厚的用户优势。 在技术方面,高德地图还***地将顺风拼车与道路供需预测、实时交通路况、智能躲避拥堵等技术融合起来,更好地匹配用户的出行需求,提供不绕路、不拥堵的***合乘路线。同时,高德还会借助城市交通大脑,通盘考虑城市全局,比如城市主干、支路的交通情况,从而为用户推荐全局***的路线规划,提升城市出行效率,降低城市整体拥堵压力。据高德地图共享出行负责人童遥介绍,通过这些技术手段撮合现有出行需求,实现空座分享,就可以在不增加商业运力的情况下,将城市道路利用率提升一到三倍。 此外,作为阿里巴巴生态的一部分,高德顺风车还能提供成熟的移动支付和信用验证体系。 全方位安全守护 全局效率*** 凭借在用户、技术以及平台等诸多方面的深厚积累,高德顺风车在出行效率、安全、用户成本与司乘关系等方面具备了独特的优势。 在出行效率方面,高德顺风车可实现全局的更高效率,带来多方共赢。通过海量出行需求的撮合,乘客可以更容易、更快速地叫到车,提高个人出行效率;而车主借助高德的智能路线规划,不仅做公益,接人还不绕路,更节省时间;在社会交通出行层面,高德公益顺风车不仅可以智能规避拥堵路线,还可以避开主干道,更多地利用支小道路,分散交通压力,实现全局***调度,提高整个社会的出行效率。 在安全方面,高德顺风车打造了全方位的安全保障服务。在车主审核方面,严格要求车辆行驶证、司机驾驶证、手机号码上传和接受审核,并通过支付宝进行实名身份验证。为保证隐私安全,乘客和车主彼此联系时全部采用虚拟号码,防止真实手机号泄露。针对每一单的行程,都提供意外伤害保险,保证每个车主和乘客都受到权益保障。此外,高德顺风车平台还提供了司乘双方的信用值评分和匿名评价,以及7×24小时的客服支持等服务。 在用户成本方面,高德不抽佣金,目前由第三方收取的服务费,也由高德来补贴。因此,用户的出行成本目前仅限于行程费用,比出租车和网约车的成本要优惠得多。高德顺风车司乘双方通过支付宝进行支付,也能够带来更加透明、安全和便捷的体验。 在司乘关系方面,由于高德公益顺风车不为营利,这就使得双方的关系更纯粹,能够营造更平等、更和谐的司乘关系。另外,高德自驾用户大多为经验丰富的“老司机”,行程路线更熟悉,乘客不用担心绕路、行驶安全等问题,帮助用户温暖安心出行。 据童遥透露,高德顺风车业务今日在成都、武汉两个城市率先上线,两地的用户均可以尝鲜体验。同时,该业务今日还将同时开启北京、上海、广州、深圳、杭州等城市的车主招募。未来,高德顺风车将逐步在全国范围上线,给更多用户带去便利。 顺风车业务的上线,也意味着高德地图一站式公共出行服务平台易行平台的又一次升级。高德易行平台于2017年7月上线,目前已经接入了滴滴快车、神州专车、首汽约车、曹操专车、ofo、摩拜单车和飞猪旅行等众多的出行服务商,可为用户提供十多种不同的出行方式。 高德集团总裁刘振飞(左)高德地图共享出行负责人童遥(右) 在当日的发布会上,高德地图还公布了2018年公益计划,今年将不断落实精准扶贫、绿色出行、身边公益以及用户公益成就平台等众多公益创新项目。其中,公益顺风车就是践行绿色出行的重要项目。 【责任编辑: 赵立京 TEL:(010)68476606】

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册