首页 文章 精选 留言 我的

精选列表

搜索[Web安全],共10000篇文章
优秀的个人博客,低调大师

Mars-java 2.2.2 发布,不需要容器的 Java Web 开发框架

本次更新如下: 取消了MarsMapping注解,Controller里的所有public方法会自动映射成一个http接口,默认请求方式为get 新增了RequestMethod注解,用来指定http接口的请求方式(不加默认为get) 将Resource注解换成了MarsWrite注解,用法保持不变(防止跟jdk自带的Resource混淆) 将redis模块从Mars-extends项目移到了主项目,以后连接redis不在需要导入Mars-extends扩展包了 对Mars-config项目进行了整理,并且将依赖的Mars-java包升级到了2.2.2 升级了 cglib,asm,netty,等多个第三方依赖包 对代码进行了大量的重构和优化,性能更进一步提升 Controller的定义 @Controller public class TestController { /** * 方法的参数 可以是HttpRequest,HttpResponse以及自定义实体对象,顺序不限 */ public List<Map<String,Object>> selectList(HttpRequest request, HttpResponse response, 自定义实体类名 参数名){ return null; } /** * 方法的参数 可以是HttpRequest,HttpResponse以及自定义实体对象,顺序不限 */ @RequestMethod(ReqMethod.POST) public int insert(HttpRequest request, HttpResponse response){ return 0; } } 如上面的实例所示,依然跟以前一样,用Controller注解来定义一个Controller,Controller里的public方法会自动映射成一个http接口,如果要指定请求方式的话,可以用RequestMethod注解 Redis用法 在配置文件中加入如下配置 #redis配置 redis: # 这些都有默认值,可以不配 maxTotal: 10 maxIdle: 20 minIdle: 2 numTestsPerEvictionRun: 10000 timeBetweenEvictionRunsMillis: 10000 minEvictableIdleTimeMillis: 10000 softMinEvictableIdleTimeMillis: 10000 maxWaitMillis: 1000 testOnBorrow: true testWhileIdle: true testOnReturn: true jmxEnabled: false jmxNamePrefix: pool blockWhenExhausted: false # 这个必须配置 jedisShardInfos: - name: master host: 10.211.55.5 port: 6379 password: 123456 使用RedisTemplate进行redis操作 RedisTemplete.set(key,value); RedisTemplete.get(key,value); Jedis里的其他方法都支持 官网地址:http://mars-framework.com/

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

16、web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

【http://bdy.lqkweb.com】 【http://www.swpan.cn】 【转载自:http://www.lqkweb.com】 PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的信息 下载网址:http://phantomjs.org/download.html 下载对应系统版本 下载后解压PhantomJS文件,将解压文件夹,剪切到python安装文件夹 然后将PhantomJS文件夹里的bin文件夹添加系统环境变量 cdm 输入命令:PhantomJS 出现以下信息说明安装成功 selenium模块是一个python操作PhantomJS软件的一个模块 selenium模块PhantomJS软件 webdriver.PhantomJS()实例化PhantomJS浏览器对象get('url')访问网站find_element_by_xpath('xpath表达式')通过xpath表达式找对应元素clear()清空输入框里的内容send_keys('内容')将内容写入输入框click()点击事件get_screenshot_as_file('截图保存路径名称')将网页截图,保存到此目录page_source获取网页htnl源码quit()关闭PhantomJS浏览器 #!/usr/bin/envpython #-*-coding:utf8-*- fromseleniumimportwebdriver#导入selenium模块来操作PhantomJS importos importtime importre llqdx=webdriver.PhantomJS()#实例化PhantomJS浏览器对象 llqdx.get("https://www.baidu.com/")#访问网址 #time.sleep(3)#等待3秒 #llqdx.get_screenshot_as_file('H:/py/17/img/123.jpg')#将网页截图保存到此目录 #模拟用户操作 llqdx.find_element_by_xpath('//*[@id="kw"]').clear()#通过xpath表达式找到输入框,clear()清空输入框里的内容 llqdx.find_element_by_xpath('//*[@id="kw"]').send_keys('叫卖录音网')#通过xpath表达式找到输入框,send_keys()将内容写入输入框 llqdx.find_element_by_xpath('//*[@id="su"]').click()#通过xpath表达式找到搜索按钮,click()点击事件 time.sleep(3)#等待3秒 llqdx.get_screenshot_as_file('H:/py/17/img/123.jpg')#将网页截图,保存到此目录 neir=llqdx.page_source#获取网页内容 print(neir) llqdx.quit()#关闭浏览器 pat="<title>(.*?)</title>" title=re.compile(pat).findall(neir)#正则匹配网页标题 print(title) PhantomJS浏览器伪装,和滚动滚动条加载数据 有些网站是动态加载数据的,需要滚动条滚动加载数据 实现代码 DesiredCapabilities伪装浏览器对象execute_script()执行js代码 current_url获取当前的url #!/usr/bin/envpython #-*-coding:utf8-*- fromseleniumimportwebdriver#导入selenium模块来操作PhantomJS fromselenium.webdriver.common.desired_capabilitiesimportDesiredCapabilities#导入浏览器伪装模块 importos importtime importre dcap=dict(DesiredCapabilities.PHANTOMJS) dcap['phantomjs.page.settings.userAgent']=('Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/49.0.2623.221Safari/537.36SE2.XMetaSr1.0') print(dcap) llqdx=webdriver.PhantomJS(desired_capabilities=dcap)#实例化PhantomJS浏览器对象 llqdx.get("https://www.jd.com/")#访问网址 #模拟用户操作 forjinrange(20): js3='window.scrollTo('+str(j*1280)+','+str((j+1)*1280)+')' llqdx.execute_script(js3)#执行js语言滚动滚动条 time.sleep(1) llqdx.get_screenshot_as_file('H:/py/17/img/123.jpg')#将网页截图,保存到此目录 url=llqdx.current_url print(url) neir=llqdx.page_source#获取网页内容 print(neir) llqdx.quit()#关闭浏览器 pat="<title>(.*?)</title>" title=re.compile(pat).findall(neir)#正则匹配网页标题 print(title) 【转载自:http://www.lqkweb.com】

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

在阿里云服务器上如何部署Java Web项目(Linux系统)?

前段时间刚完成一个JavaWeb项目,想着怎么部署到服务器上,边学边做,花了点时间终于成功部署了,这里总结记录一下过程中所遇到的问题及解决方法。之所以选择阿里云,考虑到它是使用用户最多也是最广泛的云服务器。本人选择的是系统镜像:CentOS 7.3 64位。 根据需要部署了以下环境: 1、配置Java环境 2、安装Tomcat及配置、war包部署 3、安装MySql及配置、运行sql文件 准备工作: 1、首先需要开通项目用到的端口,例如8080端口,下图为本人开通的端口(授权对象ip就是被允许访问端口的主机ip,也就是阿里云公网ip,可以是其它云服务ip),仅供参考。详情点击打开连接 2、网上很多教程是通过Xshell终端模拟器访问远端不同系统下的服务器,以及配合Xftp文件传输客户端来上传文件(如Java、Tomcat安装包)。这里推荐使用MobaXterm,有SSH链接功能,也有FTP功能,还可以包括VNC远程桌面连接功能。MobaXterm官网。 3、下载Linux版本的jdk,选择后缀是.tar.gz的,如下图所示。点击打开链接。 4、下载Tomcat安装包,本人下载的是Tomcat 8.5.33版本。点击打开链接。 5、打开MobaXterm,连接系统。将上述两个安装包上传至指定目录下。操作步骤如下。 a.点击Session,选中SSH协议,输入阿里云公网IP地址,点击OK。 b.打开之后初始目录是root,返回上一级再打开home目录,将安装包均上传至该目录。 c.在usr目录下创建java,再在java下创建以下两个目录。 1、配置Java环境 a.运行解压命令:tar -xzf /home/jdk-8u181-linux-x64.tar.gz -C /usr/java/jdk b.配置环境变量(或者直接打开etc目录下的profile文件):vi /etc/profile 在文件末尾处添加以下内容并保存: 1 #set java environment 2 export JAVA_HOME=/usr/java/jdk/jdk1.8.0_181 3 export JRE_HOME=/usr/java/jdk/jdk1.8.0_181/jre 4 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 5 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH 保存命令:source /etc/profile c.验证安装,如下所示表示成功: 2、安装Tomcat及配置、war包部署 a.运行解压命令:tar -xzf /home/apache-tomcat-8.5.33.tar.gz -C /usr/java/tomcat b.配置环境,如下图所示,执行命令或者点击文件均可: 在文件末尾处添加以下内容并保存: 1 export JAVA_HOME=/usr/java/jdk/jdk1.8.0_181 2 export JRE_HOME=/usr/java/jdk/jdk1.8.0_181/jre c.在bin目录执行如图所示命令./startup.sh,验证安装: 或者浏览器输入阿里云公网IP地址加上8080端口,页面如下图所示表示成功: d.将JavaWeb项目的war包,上传至Tomcat的webapps目录下即可,如下图所示: 这时在8080端口后加上项目名称,即可运行此项目,如下图所示(如果有对应数据库的话,下一条继续介绍如何配置数据库): 3、安装MySql及配置、运行sql文件 a.安装MySQL官方的yum repository: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm b.下载rpm包: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm c.安装MySQL服务,最后会出现个complete!: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# yum -y install mysql-community-server d.修改MySQL配置文件(或者修改etc目录下的my.cnf文件并保存),跳过密码登录: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# vi /etc/my.cnf 末尾处添加如下内容: 1 skip-grant-tables e.启动MySQL服务: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# systemctl start mysqld.service f.登录MySQL: 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# mysql -u root g.修改密码: 1 mysql> use mysql; 2 Database changed 3 mysql> update mysql.user set authentication_string=password('1234') where user='root' ; h.退出mysql,重新在刚刚那个配置文件中去掉skip-grant-tables,然后重启MySQL: 1 mysql> exit 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# vi /etc/my.cnf 1 [root@iZwz9eu3mkqq1njlkrfhc8Z ~]# systemctl restart mysqld.service i.使用新密码登录MySql,如下图所示: j.必须重设密码,并设置密码等级与最小长度: 1 SET PASSWORD = PASSWORD('1234'); 1 mysql> set global validate_password_policy=0; //改变密码等级 1 mysql> set global validate_password_length=4; //改变密码最小长度 k.再次修改密码: 1 SET PASSWORD = PASSWORD('1234'); l.配置远程登录(root为用户名,1234为密码),以及刷新系统权限: 1 mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '1234' WITH GRANT OPTION; 1 mysql> flush privileges; m.创建数据库并运行sql文件: 1 mysql> create database corporate_genealogy; 1 mysql> use corporate_genealogy; 1 mysql> source /home/corporate_genealogy.sql; n.使用Navicat数据库管理工具连接阿里云数据库,如下图所示: 最后附上Linux系统下MySql数据库的常用操作(数据库操作必须以 ';' 号结尾): 点击打开链接 本文部分参考学习了:https://www.cnblogs.com/shanheyongmu/p/6070618.html http://www.cnblogs.com/wangshen31/p/9556804.html 至此是对JavaWeb项目部署部分功能的一个简单介绍,后续会继续说明其它部分功能所遇到的问题以及解决方法。 如有疏漏错误之处,还请不吝赐教! 原文地址:http://cloud.yundashi168.com/archives/475

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

面试官问你如何解决web高并发这样回答就好了

所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口、页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性。 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能,数值越高越好,一般需要压测(ab工具)得到数据。 假设我们的一个进程(也可以是线程或者协程)处理一次请求花费了50毫秒(业内达标范围一般是20毫秒至60毫秒),那么1秒钟就可以处理20个请求,一台服务器是可以开很多这样的进程并行去处理请求的,比如开了128个,那么这台机器理论上的QPS=2560。 千万不要小瞧这个数字,当你的QPS真有这么高的时候意味着你的DAU(用户日活)有2560*200=51.2万,业内一般是放大200倍计算,有这样的日活说明做得很不错了。 一台服务器能够达到的最大QPS受很多因素的影响,比如机器参数配置、机房地理位置、CPU性能、内存大小、磁盘性能、带宽大小、程序语言、数据库性能、程序架构等,我们一一细说。 推荐一个交流学习群:614478470 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 点击:加入 1.机器参数配置 这个很好理解,比如服务器最大可以开启128个进程,你设置了最大只开启100个,这属于服务器调优。 2.机房地理位置 如果你做海外用户,服务器机房应该选择国外的,反之应该选择国内的,因为机房距离用户越近,在传输上的时间损耗就越低。 3.CPU性能 CPU性能越好,处理速度就越快,核心数越多,能够并行开启的进程就越多。 4.内存大小 内存越大,程序就能把更多的数据直接放到内存,从内存读取数据比从磁盘读取数据的速度快很多。 5.磁盘性能 这个不用多说吧,一般固态硬盘的性能比机械硬盘的性能好很多,性能越好读写数据的速度就越快。 6.带宽大小 服务器的带宽一般指流出带宽,单位为Mb/S,比如带宽为8Mb/S即1MB/S,如果提供文件下载服务,可能一个用户的下载行为就把服务器带宽用完了。 一般把图片、视频、css文件、JavaScript脚本等资源放到第三方的CDN去,按流量计费,这样就不占用服务器带宽了。 如果用户规模小,基本上一台服务器就好了,这个时候一般会选按固定带宽大小计费。 如果用户规模很大了,基本上会用到负载均衡器来分流,即把流量按照一定的规则分配到不同的服务器上,负载均衡器一般会按流量来计费。 如果平均一次请求返回的数据大小为50KB,为了达到1000QPS这个指标,需要的带宽峰值=1000*50*8/1024=390.625Mb/S。 我们在设计接口的时候应该尽量减少返回的数据大小,比如user_id就可以简化为uid,像图片、视频、css等文件压缩的目的就是减少数据的大小。 7.程序语言 编译型语言的性能一般好于解释型语言的性能,比如go语言性能就好于php语言性能,当语言短期不会替换时,可以通过堆机器解决高并发问题。 8.数据库性能 一台服务器上部署的数据库总是有一个瓶颈的,比如每秒查询数、每秒写入数。 我们可以通过增加很多从库解决查询(select语句)的瓶颈,称之为多从库模型,需要注意的是主从同步数据可能有延迟,当修改数据后马上需要查询时需要设置强制从主库读取。 我们可以将业务拆分,让某些表存储在一个数据库实例上,另一些表存储在其他数据库实例上,虽然一个数据库实例有自己的瓶颈,但是很多的数据库实例堆积起来性能就会大大改善,多个数据库实例的方案称之为多主库模型,主要是为了解决写入瓶颈(insert语句、update语句、delete语句)。 如果你有多个主库又有多个从库,你就实现了多主多从模型。 如果一个表存储的数据量很大,这个时候就要考虑分表了(一般用中间件实现),比如按时间分表或者按用户分表,当把一个表的所有分表都放在一个数据库实例上都满足不了要求的时候,你应该把某些分表存储在新的数据库实例上,这个时候一个表的数据分布到了不同的数据库实例上,这就是所谓的分布式数据库方案了,你需要处理的事情就很复杂了,比如处理分布式事务。 数据库的并发连接数也是有限制的,我们可以用连接池技术来应对,就是保持一定数量的和数据库的连接不断开的长连接,需要连接数据库的时候就从池子里选择一个连接,用完放回去就好了,这个一般也是用中间件来实现。 好的索引也能提高数据库的性能,有时候比堆多个从库的方案还要好。 如果能够减少数据库的读写,也算间接提高了数据库的性能,比如我们用redis来做缓存,用消息队列异步落库等。 有时候某些数据用数据库来计算需要很长时间,可以取到元数据(最小粒度的数据)用程序来计算,这称之为用内存换时间。 9.程序架构 比如实现同样的功能,初级程序员写的程序需要循环100次,而高级程序员写的程序只需要循环10次,效果肯定不一样。 总结 一般大型项目基本是前后端分离的,从性能方面说就是为了将页面渲染的处理在客户端运行,降低服务器的压力。 从带宽层面考虑,css、图片、视频、JavaScript等文件资源能用CDN的就用CDN,能压缩的就尽量压缩,接口能减小返回数据的大小就尽量减小。 为了解决编程语言的不足或者单台服务器的瓶颈,可以先堆机器应对。 索引、多主多从、分布式数据库、缓存、连接池、消息队列等是从数据库方便考虑如何优化性能。 有时候程序的低耦合性比程序的高性能更重要,不要一味地追求高性能。 推荐一个交流学习群:614478470 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多 点击:加入

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

使用Python-Flask框架开发Web网站系列课程(一)构建项目

版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81907475 前言 使用IDE:PyCharm 操作系统: Mac Python版本:3.6 我的邮箱:51263921@qq.com 交流群: 372430835 请注意,既然要学习开发,那么要注意以下几个问题。 1、开发语言版本不一样,尤其是Python,会导致同一段代码压根跑不起来的情况。所以请保证版本一致。 2、操作系统不一样,自然也会有区分,但是Mac环境和Linux环境基本还是比较相近,贴合生产,所以使用Mac作为演示环境。但与Window的差别也不会很大。 3、简易使用一样的IDE工具,但是不强求。 4、本课代码的github地址在页面最底。 构建项目 一、创建虚拟环境venv 1、从前我很皮,不喜欢创建这东西,都是直接用系统环境的Python,后来项目一多,呵呵哒,这个项目用的Django1.9,那个项目又用Django2.0。得,乱套了。所以,请养成良好的习惯,使用venv大人。 2、通过PyCharm添加虚拟环境venv ,Windows在File->Settings,Mac在PyCharm->Preferences, 打开页面后,按下图配置。Add local Python Interpreter。最后 Apply -> OK。 二、安装flask 2.1 看下图,在Terminal控件里面执行 pip install flask==1.0.2 。 2.2 然后我们将这个阶段的依赖包记录下来,使用的命令为: pip freeze>requirement.txt 2.3 我们开始构建目录结构 我们需要一个目录放前端的代码(frontend),一个放后端代码(backend),一个放公共方法代码(utils),一个放配置文件(config)。 我们在根目录myproject里面右键New->Python Package,用这个创建包。按上面括号里面的名字建。 2.4 构建后端代码 2.4.1 添加config.py,在/myproject/config下。 这东西就是我们网站以后所有配置存放的地方啦,其中Config放的是各个环境都一致的配置,ProdConfig放的是生产环境的配置,SitConfig存放SIT环境配置,其他类比。 最后的一行,代表config = SitConfig() 当前获取的是SIT环境的配置。 全路径为:/myproject/config/config.py 内容如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2017/11/8. """ import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) class Config(object): """Base config class.""" # 版本 VERSION = 'beta 0.1' # 项目名称 PROJECTNAME = 'myproject' # 端口 PORT = 10101 SECRET_KEY = '1234567890!@#$%^&*()' class ProdConfig(Config): """Production config class.""" # 是否开启调试 DEBUG = False # 主机ip地址 HOST = '0.0.0.0' class SitConfig(Config): """Development config class.""" # Open the DEBUG # 是否开启调试 DEBUG = True # 主机ip地址 HOST = '127.0.0.1' class DevConfig(Config): pass # Default using Config settings, you can write if/else for different env config = SitConfig() 2.4.2 修改/myproject/backend/__init__.py 这个是未来整个后端的入口文件,具体内容如下: 全路径:/myproject/backend/__init__.py 具体代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午2:41. """ from flask import Flask from config.config import config def create_app(): #初始化项目实例 app = Flask(__name__) app.secret_key = app.config['SECRET_KEY'] #导入配置项 app.config.from_object(config) # 钩子 在请求执行之前 @app.before_request def before_request(): print('hi') return app 2.4.3 在根目录添加后端项目管理文件 manage.py 要先补一个模块 pip install Flask-Script==2.0.6 添加一个空的python脚本,manage.py 全路径:/myproject/manage.py 内容如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:40. """ from flask_script import Manager, Server from backend import create_app app = create_app() app.debug = app.config["DEBUG"] # 获取根目录config.py的配置项 host = app.config["HOST"] port = app.config["PORT"] # Init manager object via app object manager = Manager(app) # Create a new commands: server # This command will be run the Flask development_env server manager.add_command("runserver", Server(host=host,port=port,threaded=True)) @manager.shell def make_shell_context(): """Create a python CLI. return: Default import object type: `Dict` """ # 确保有导入 Flask app object,否则启动的 CLI 上下文中仍然没有 app 对象 return dict(app=app) if __name__ == '__main__': manager.run() 2.4.4 添加视图文件,views.py 我们访问一个链接,要显示或者返回什么东西,就是在这里处理后返回给浏览器或者接口的。 全路径:/myproject/backend/views.py 内容如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:51. """ from flask import Blueprint,jsonify #账户的蓝图 访问http://host:port/account 这个链接的子链接,都会跳到这里 account = Blueprint('/account', __name__) # 访问http://host:port/account/test 这个链接,就会跳到这里 @account.route('/test') #上面的链接,绑定的就是这个方法,我们给浏览器或者接口请求 一个json格式的返回 def test(): return jsonify({'code':0,'content':'hi flask'}) 2.4.5 添加路由文件,urls.py 全路径:/myproject/backend/urls.py 内容为: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午3:50. """ from backend.views import account # 蓝图注册 def register(app): app.register_blueprint(account, url_prefix='/account', strict_slashes=False) 2.4.6 最后一步,添加内容到入口文件__init__.py 我们添加了两行代码 from backend.urls import register register(app) 用来干啥的呢,是要把我们路由蓝图的对应关系注册到我们的 flask实例里面。和我们之前把配置文件注册到app.config里面是一个道理。 路径:/myproject/backend/__init__.py 内容如下: #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/21 下午2:41. """ from flask import Flask from config.config import config from backend.urls import register def create_app(): #初始化项目实例 app = Flask(__name__) app.secret_key = app.config['SECRET_KEY'] #导入配置项 app.config.from_object(config) # 注册路由 register(app) # 钩子 在请求执行之前 @app.before_request def before_request(): print('hi') return app 三、启动项目 3.1 点击根目录的manage.py,右键执行 执行方式如图1,然后我们会发现还是缺了参数,请看图2、图3,通过edit configurations,在弹出框中的 Parameters 里面输入runserver。Apply后OK。 现在再次点击根目录的manage.py,右键执行。 * Serving Flask app "backend" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:10101/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 110-176-230 现在,我们在浏览器输入 http://127.0.0.1:10101/account/test 图1: 图2 图3 四、GITHUB地址 https://github.com/lyy8510a/myproject/releases/tag/v1

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

SpringCloud+SpringBoot+mybatis分布式微服务云架构开发Web应用

在完成配置之后,举一个简单的例子,在快速入门工程的基础上,举一个简单的示例来通过Thymeleaf渲染一个页面。 @Controller public class HelloController { @RequestMapping("/") public String index(ModelMap map) { // 加入一个属性,用来在模板中读取 map.addAttribute("host", "http://blog.didispace.com"); // return模板文件的名称,对应src/main/resources/templates/index.html return "index"; } } <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" /> <title></title> </head> <body> <h1 th:text="${host}">Hello World</h1> </body> </html> 如上页面,直接打开html页面展现Hello World,但是启动程序后,访问http://localhost:8080/,则是展示Controller中host的值:http://blog.didispace.com,做到了不破坏HTML自身内容的数据逻辑分离。 更多Thymeleaf的页面语法,还请访问Thymeleaf的官方文档查询使用。 Thymeleaf的默认参数配置 如有需要修改默认配置的时候,只需复制下面要修改的属性到application.properties中,并修改成需要的值,如修改模板文件的扩展名,修改默认的模板路径等。 # Enable template caching. spring.thymeleaf.cache=true # Check that the templates location exists. spring.thymeleaf.check-template-location=true # Content-Type value. spring.thymeleaf.content-type=text/html # Enable MVC Thymeleaf view resolution. spring.thymeleaf.enabled=true # Template encoding. spring.thymeleaf.encoding=UTF-8 # Comma-separated list of view names that should be excluded from resolution. spring.thymeleaf.excluded-view-names= # Template mode to be applied to templates. See also StandardTemplateModeHandlers. spring.thymeleaf.mode=HTML5 # Prefix that gets prepended to view names when building a URL. spring.thymeleaf.prefix=classpath:/templates/ # Suffix that gets appended to view names when building a URL. spring.thymeleaf.suffix=.html spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain. spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved. 支持JSP的配置Spring Boot并不建议使用,但如果一定要使用,可以参考此工程作为脚手架:JSP支持 完整项目的源码来源 技术支持1791743380

资源下载

更多资源
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部分的功能。

用户登录
用户注册