Google App Engine上的Spring MVC和REST

前段时间,我写了一篇关于如何使用Spring MVC实现Restful Web API的文章 。 阅读我以前的文章以了解它。

在那篇文章中,开发了一个简单的Rest示例。 为了测试该应用程序,将文件复制到Web服务器(例如Tomcat )中,然后返回对字符1的http:// localhost:8080 / RestServer / characters / 1信息的访问。

在当前文章中,我将解释如何将应用程序转换为Google App Engine并使用Maven部署到Google的基础架构中。 当然,在这种情况下,我们将部署Rest Spring MVC应用程序,但是可以使用相同的方法将Spring MVC Web应用程序(或使用其他Web框架开发的任何其他应用程序)迁移到GAE。

首先,显然,您应该创建一个Google帐户并注册一个新的应用程序 (记住名称,因为它将在下一步中使用)。 之后,您可以开始迁移。

需要进行三个更改,创建定义应用程序名称的appengine-web.xml ; 使用Google帐户信息将服务器标记添加到settings.xml,并修改pom.xml以添加GAE插件及其依赖项。

让我们从appengine-web.xml开始。 GAE使用此文件来配置应用程序,并将其创建到WEB-INF目录(与web.xml处于同一级别)。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://appengine.google.com/ns/1.0 http://googleappengine.googlecode.com/svn/branches/1.2.1/java/docs/appengine-web.xsd"><application>alexsotoblog</application><version>1</version><system-properties><property name="java.util.logging.config.file" value="WEB-INF/classes/logging.properties"/></system-properties><precompilation-enabled>false</precompilation-enabled><sessions-enabled>true</sessions-enabled>
</appengine-web-app>

最重要的字段是应用程序标签。 此标记包含我们应用程序的名称(在您注册新的Google应用程序时定义)。

其他标签包括版本,系统属性和环境变量以及其他配置,例如您是否希望预编译以提高性能或应用程序需要会话。

而且您的项目不再需要修改,现在仅会触摸Maven文件。

settings.xml中 ,应该添加帐户信息:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"><localRepository>/media/share/maven_repo</localRepository><servers><server><id>appengine.google.com</id><username>my_account@gmail.com</username><password>my_password</password></server></servers></settings>

看到这和在Maven中注册任何其他服务器一样容易。

最后是最繁琐的部分,修改pom.xml

首先要添加新属性:

<gae.home>/media/share/maven_repo/com/google/appengine/appengine-java-sdk/1.5.5/appengine-java-sdk-1.5.5</gae.home>
<gaeApplicationName>alexsotoblog</gaeApplicationName>
<gaePluginVersion>0.9.0</gaePluginVersion>
<gae.version>1.5.5</gae.version><!-- Upload to http://test.latest.<applicationName>.appspot.com by default -->
<gae.application.version>test</gae.application.version>

在第一行中,我们定义了Appengine Java SDK的位置。 如果已经安装,则在此标记中插入位置,如果没有,则复制此pom的相同位置,然后将maven存储库目录(在我的情况下为/ media / share / maven_repo)更改为您的目录。 通常,您的Maven存储库位置为/home/user/.m2/repositoriesMaven将在部署时为您下载SDK

下一步是添加Maven GAE存储库。

<repositories><repository><id>maven-gae-plugin-repo</id><url>http://maven-gae-plugin.googlecode.com/svn/repository</url><name>maven-gae-plugin repository</name></repository>
</repositories><pluginRepositories><pluginRepository><id>maven-gae-plugin-repo</id><name>Maven Google App Engine Repository</name><url>http://maven-gae-plugin.googlecode.com/svn/repository/</url></pluginRepository>
</pluginRepositories>

因为我们的项目是虚拟项目, 所以不使用Datanucleus 。 对于更复杂的项目,需要使用例如JDO进行数据库访问,应添加下一个依赖项:

<dependency><groupId>javax.jdo</groupId><artifactId>jdo2-api</artifactId><version>2.3-eb</version><exclusions><exclusion><groupId>javax.transaction</groupId><artifactId>transaction-api</artifactId></exclusion></exclusions>
</dependency><dependency><groupId>com.google.appengine.orm</groupId><artifactId>datanucleus-appengine</artifactId><version>1.0.6.final</version>
</dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId><version>1.1.5</version><scope>runtime</scope><exclusions><exclusion><groupId>javax.transaction</groupId><artifactId>transaction-api</artifactId></exclusion></exclusions>
</dependency><dependency><groupId>com.google.appengine</groupId><artifactId>geronimo-jta_1.1_spec</artifactId><version>1.1.1</version><scope>runtime</scope>
</dependency><dependency><groupId>com.google.appengine</groupId><artifactId>geronimo-jpa_3.0_spec</artifactId><version>1.1.1</version><scope>runtime</scope>
</dependency>

如果您使用的是Datanucleus ,则应注册maven-datanucleus-plugin 。 请注意根据您的项目正确配置它。

<plugin><groupId>org.datanucleus</groupId><artifactId>maven-datanucleus-plugin</artifactId><version>1.1.4</version><configuration><!--Make sure this path contains your persistentclasses!--><mappingIncludes>**/model/*.class</mappingIncludes><verbose>true</verbose><enhancerName>ASM</enhancerName><api>JDO</api></configuration><executions><execution><phase>compile</phase><goals><goal>enhance</goal></goals></execution></executions><dependencies><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId><version>1.1.5</version><exclusions><exclusion><groupId>javax.transaction</groupId><artifactId>transaction-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-rdbms</artifactId><version>1.1.5</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-enhancer</artifactId><version>1.1.5</version></dependency></dependencies>
</plugin>

现在,添加了Google App Engine依赖项。

<dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-1.0-sdk</artifactId><version>${gae.version}</version>
</dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-tools-api</artifactId><version>1.3.7</version>
</dependency>

然后,如果您想测试GAE 功能 (在我们的虚拟项目中未使用),则添加下一个GAE库:

<dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-labs</artifactId><version>${gae.version}</version><scope>test</scope>
</dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-stubs</artifactId><version>${gae.version}</version><scope>test</scope>
</dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-testing</artifactId><version>${gae.version}</version><scope>test</scope>
</dependency>

接下来的更改是对maven-war-plugin的修改,其中将appengine-web.xml包含到生成的包中:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><webResources><resource><directory>src/main/webapp</directory><filtering>true</filtering><includes><include>**/appengine-web.xml</include></includes></resource></webResources></configuration>
</plugin>

最后添加maven-gae-plugin并将其配置为将应用程序上传到appspot

<plugin><groupId>net.kindleit</groupId><artifactId>maven-gae-plugin</artifactId><version>${gaePluginVersion}</version><configuration><serverId>appengine.google.com</serverId></configuration><dependencies><dependency><groupId>net.kindleit</groupId><artifactId>gae-runtime</artifactId><version>${gae.version}</version><type>pom</type></dependency></dependencies>
</plugin>

看到<serviceId>标记包含先前在settings.xml文件中定义的服务器名称。

另外,如果您使用的是maven-release-plugin ,则可以在release:perform目标期间将应用程序自动上传到appspot

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.2.1</version><configuration><goals>gae:deploy</goals></configuration>
</plugin>

现在运行gae:deploy目标。 如果您已经安装了Appengine Java SDK ,那么您的应用程序将被上传到您的GAE网站。 但是,如果这是您第一次运行该插件,则会收到错误消息。 不要惊慌,发生此错误是因为Maven插件未在您在<gae.home>标记中指定的目录中找到Appengine SDK 。 但是,如果您已将gae.home位置配置到本地Maven存储库中,只需运行gae:unpack目标,即可正确安装SDK ,因此当您重新运行gae:deploy时,您的应用程序将上传到Google基础架构中。

在后例子中,你可以去http://alexsotoblog.appspot.com/characters/1http://alexsotoblog.appspot.com/characters/1和JSON格式字符信息显示到浏览器中。

正如我在文章开头提到的那样,相同的过程可以用于任何Web应用程序,而不仅仅是Spring Rest MVC

由于教学目的,对应用程序pom进行了所有修改。 我的建议是,您要使用GAE相关标签创建父pom ,因此必须上传到Google App Engine的每个项目都来自同一pom文件。

我希望您发现这篇文章有用。

本周,我在devoxx ,在那与我见面;)我将在17日(星期四)13:00发表有关通过聚合和最小化加速Javascript和CSS下载时间的演讲 。

完整的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.springframework</groupId><artifactId>rest</artifactId><name>Rest</name><packaging>war</packaging><version>1.0.0-BUILD-SNAPSHOT</version><properties><java-version>1.6</java-version><org.springframework-version>3.0.4.RELEASE</org.springframework-version><org.aspectj-version>1.6.9</org.aspectj-version><org.slf4j-version>1.5.10</org.slf4j-version><!-- Specify AppEngine version for your project. It should match SDK version pointed to by ${gae.home} property (Typically, one used by your Eclipse plug-in) --><gae.home>/home/alex/.m2/repository/com/google/appengine/appengine-java-sdk/1.5.5/appengine-java-sdk-1.5.5</gae.home><gaeApplicationName>alexsotoblog</gaeApplicationName><gaePluginVersion>0.9.0</gaePluginVersion><gae.version>1.5.5</gae.version><!-- Upload to http://test.latest.<applicationName>.appspot.com by default --><gae.application.version>test</gae.application.version></properties><dependencies><!-- Rest --><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.2.4-1</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.8.5</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-lgpl</artifactId><version>1.8.5</version></dependency><!-- GAE libraries for local testing as described here: http://code.google.com/appengine/docs/java/howto/unittesting.html --><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-labs</artifactId><version>${gae.version}</version><scope>test</scope></dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-stubs</artifactId><version>${gae.version}</version><scope>test</scope></dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-testing</artifactId><version>${gae.version}</version><scope>test</scope></dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-api-1.0-sdk</artifactId><version>${gae.version}</version></dependency><dependency><groupId>com.google.appengine</groupId><artifactId>appengine-tools-api</artifactId><version>1.3.7</version></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version><exclusions><!-- Exclude Commons Logging in favor of SLF4j --><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${org.springframework-version}</version></dependency><!-- AspectJ --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><!-- Logging --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${org.slf4j-version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${org.slf4j-version}</version><scope>runtime</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.15</version><exclusions><exclusion><groupId>javax.mail</groupId><artifactId>mail</artifactId></exclusion><exclusion><groupId>javax.jms</groupId><artifactId>jms</artifactId></exclusion><exclusion><groupId>com.sun.jdmk</groupId><artifactId>jmxtools</artifactId></exclusion><exclusion><groupId>com.sun.jmx</groupId><artifactId>jmxri</artifactId></exclusion></exclusions><scope>runtime</scope></dependency><!-- @Inject --><dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency><!-- Servlet --><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.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- Test --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.7</version><scope>test</scope></dependency></dependencies><repositories><!-- For testing against latest Spring snapshots --><repository><id>org.springframework.maven.snapshot</id><name>Spring Maven Snapshot Repository</name><url>http://maven.springframework.org/snapshot</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><!-- For developing against latest Spring milestones --><repository><id>org.springframework.maven.milestone</id><name>Spring Maven Milestone Repository</name><url>http://maven.springframework.org/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><!-- GAE repositories --><repository><id>maven-gae-plugin-repo</id><url>http://maven-gae-plugin.googlecode.com/svn/repository</url><name>maven-gae-plugin repository</name></repository></repositories><pluginRepositories><pluginRepository><id>maven-gae-plugin-repo</id><name>Maven Google App Engine Repository</name><url>http://maven-gae-plugin.googlecode.com/svn/repository/</url></pluginRepository></pluginRepositories><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java-version}</source><target>${java-version}</target></configuration></plugin><!-- Adding appengine-web into war --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><configuration><webResources><resource><directory>src/main/webapp</directory><filtering>true</filtering><includes><include>**/appengine-web.xml</include></includes></resource></webResources><warName>abc</warName></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>install</id><phase>install</phase><goals><goal>sources</goal></goals></execution></executions></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>aspectj-maven-plugin</artifactId><!-- Have to use version 1.2 since version 1.3 does not appear to work with ITDs --><version>1.2</version><dependencies><!-- You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjtools</artifactId><version>${org.aspectj-version}</version></dependency></dependencies><executions><execution><goals><goal>compile</goal><goal>test-compile</goal></goals></execution></executions><configuration><outxml>true</outxml><source>${java-version}</source><target>${java-version}</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><junitArtifactName>junit:junit</junitArtifactName></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>tomcat-maven-plugin</artifactId><version>1.0-beta-1</version></plugin><!-- The actual maven-gae-plugin. Type "mvn gae:run" to run project, "mvn gae:deploy" to upload to GAE. --><plugin><groupId>net.kindleit</groupId><artifactId>maven-gae-plugin</artifactId><version>${gaePluginVersion}</version><configuration><serverId>appengine.google.com</serverId></configuration><dependencies><dependency><groupId>net.kindleit</groupId><artifactId>gae-runtime</artifactId><version>${gae.version}</version><type>pom</type></dependency></dependencies></plugin></plugins></build>
</project>

下载代码。
音乐: http : //www.youtube.com/watch?v = Nba3Tr_GLZU

参考:来自JCG合作伙伴 Alex Soto 在Google App Engine上的Spring MVC和REST,来自One Jar To Rule All All博客。

相关文章 :

  • 使用Spring MVC开发Restful Web服务
  • Spring MVC开发–快速教程
  • jqGrid,REST,AJAX和Spring MVC集成
  • 使用Spring 3.1和基于Java的配置构建RESTful Web服务,第2部分
  • Spring MVC3 Hibernate CRUD示例应用程序
  • Google AppEngine(GAE)中的多租户

翻译自: https://www.javacodegeeks.com/2011/12/spring-mvc-and-rest-at-google-app.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SALT+HASH撒盐加密

#region 撒盐加密string salt Guid.NewGuid().ToString();byte[] passwordAndSaltBytes System.Text.Encoding.UTF8.GetBytes(model.Password salt);byte[] hashBytes new System.Security.Cryptography.SHA256Managed().ComputeHash(passwordAndSaltBytes);string hashStr…

python 子串是否在字符串中_python七种方法判断字符串是否包含子串

1. 使用 in 和 not inin 和 not in 在 Python 中是很常用的关键字&#xff0c;我们将它们归类为 成员运算符。使用这两个成员运算符&#xff0c;可以很让我们很直观清晰的判断一个对象是否在另一个对象中&#xff0c;示例如下&#xff1a;>>> "llo" in &quo…

NYOJ 8 一种排序

一种排序 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述现在有很多长方形&#xff0c;每一个长方形都有一个编号&#xff0c;这个编号可以重复&#xff1b;还知道这个长方形的宽和长&#xff0c;编号、长、宽都是整数&#xff1b;现在要…

css3中的background

对background的两种运用&#xff1a;一是background中的线性渐变&#xff0c;background: linear-gradient(to bottom,#0e7bef,#0d73da);这个是对背景颜色从上到下的一种线性渐变&#xff08;linear-gradient&#xff09;&#xff0c;两个颜色参数是从第一个颜色参数渐变到第二…

Oracle JRockit Mission Control 4.1发布

Oracle发布了以前的仅JRockit专用工具Mission Control Suite&#xff08;JRMC&#xff09;的新版本。 4.1版本是次要版本升级&#xff0c;直接遵循4.0.1&#xff08;该版本发布于2010年中期&#xff09;。 但是&#xff0c;即使版本号表明是次要的升级&#xff0c;您仍然可以在…

pe安装usb3.0驱动_电脑店U盘启动盘制作工具下载安装须知

电脑店U盘启动盘制作工具集成最全面的硬件驱动&#xff0c;精心挑选的系统维护工具&#xff0c;加上独有人性化的设计&#xff0c;具备较强的兼容性、稳定性和安全性。能够完美兼容台式机、品牌机及笔记本等新老机型&#xff0c;且安全无毒&#xff0c;电脑店一键U盘启动盘制作…

Webwork【02】前端OGNL试练

1.OGNL 出现的意义 在mvc中&#xff0c;数据是在各个层次之间进行流转是一个不争的事实。而这种流转&#xff0c;也就会面临一些困境&#xff0c;这些困境&#xff0c;是由于数据在不同世界中的表现形式不同而造成的&#xff1a; a. 数据在页面上是一个扁平的&#xff0c;不带数…

python ATM购物程序

需求&#xff1a; 模拟实现一个ATM 购物商城程序 额度 15000或自定义实现购物商城&#xff0c;买东西加入 购物车&#xff0c;调用信用卡接口结账可以提现&#xff0c;手续费5%每月22号出账单&#xff0c;每月10号为还款日&#xff0c;过期未还&#xff0c;按欠款总额 万分之5…

NYOJ 10 skiing

skiing 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;5描述Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走上坡或…

Spring的REST服务发现性,第5部分

这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第五篇。 上一篇文章介绍了RESTful服务HATEOAS的可发现性的概念&#xff0c;然后介绍了一些由测试驱动的实际方案。 本文将重点介绍可发现性的实际实现以及使用Spring…

postman使用_postman如何使用集合断言?

在postman中&#xff0c;大家都使用过断言&#xff0c;但是我们使用的断言都是针对每一个接口或者是每一个用例添加的&#xff0c;那么是否有可以同时对多个用例或接口添加断言呢 &#xff1f; 答案是肯定有的。那么接下来我就带领大家认识下Postman中的批量断言&#xff0c;也…

纪念我的leetcode开门之旅

15.12.3在朋友的建议下开始了leetcode之旅&#xff0c;上面的题目先捡简单的刷吧。。。转载于:https://www.cnblogs.com/thewaytomakemiracle/p/5016825.html

NYOJ 16 矩形嵌套

矩形嵌套 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述有n个矩形&#xff0c;每个矩形可以用a,b来描述&#xff0c;表示长和宽。矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d&#xff08;相当于旋转X90度&…

沉思滥用:“强力使用,破坏滥用”

英国前首相本杰明迪斯雷利&#xff08;Benjamin Disraeli&#xff09;曾有一个古老的说法&#xff0c;说谎言分为三种&#xff1a;“谎言&#xff0c;该死的谎言和统计数据”。 这里的暗示是统计数据很容易弥补它们是不可靠的。 但是&#xff0c;统计学在经验科学中得到了广泛的…

centos和ubuntu下使用cron设置定时任务

1.启动cron工具[ps:使用root权限] centos启动cron两种方式 a) /etc/init.d/crond start b) service crond start ubuntu启动cron两种方式 a) /etc/init.d/cron start b) service cron start(推荐) 2.添加定时任务[每个整点执行ls命令] centos crontab -e命令打开文件 添加一行:…

算法与数据结构(一)

这里的许多资源&#xff0c;有时间可用多看看&#xff0c;写一下。 http://download.csdn.net/album/detail/3249/2 这个哥们的博客还不错&#xff1a;http://u.cxyblog.com/2/articles-3.html转载于:https://www.cnblogs.com/oxspirt/p/5805409.html

protected访问权限_权限修饰符 /重写

一 权限修饰符 private内容不能被继承类:只有public / default 可以修饰 ,且default 默认出现protected访问权限1.同包下的类2.不同包的子类,只能通过子父类关系访问,只有子类中才可以使用.权限修饰符只能修饰成员,成员修饰符(成员变量|成员方法)二 重写重写和重载的区别:(都指…

NYOJ 26 孪生素数问题

孪生素数问题 时间限制&#xff1a;3000ms | 内存限制&#xff1a;65535KB难度&#xff1a;3描述写一个程序&#xff0c;找出给出素数范围内的所有孪生素数的组数。一般来说&#xff0c;孪生素数就是指两个素数距离为2&#xff0c;近的不能再近的相邻素数。有些童鞋一看到题就…

python importlib_importlib --- import 的实现 — Python 3.10.0a2 文档

3.7 新版功能.这个模块使得Python的导入系统提供了访问*包*内的*资源*的功能。如果能够导入一个包&#xff0c;那么就能够访问那个包里面的资源。资源可以以二进制或文本模式方式被打开或读取。资源非常类似于目录内部的文件&#xff0c;要牢记的是这仅仅是一个比喻。资源和包不…

原生js使用forEach()与jquery使用each遍历数组,return false 的区别

原生js使用forEach()与jquery使用each()遍历数组&#xff0c;return false 的区别&#xff1a; 1、使用each()遍历数组a,如下&#xff1a; var a[20,21,22,23,24];$.each(a, function(index,val) {console.log(indexindex);if(index2){return false;}console.log(valval);}); …