当前位置: 首页 > 编程日记 > 正文

转载:用 Tomcat 和 Eclipse 开发 Web 应用程序


原文地址:http://www.ibm.com/developerworks/cn/opensource/os-eclipse-tomcat/

所需的组件

Eclipse V3.2 Callisto 集成开发环境 (IDE) 包括了用于 Web 开发及与服务器集成的工具。所以,除了软件开发工具箱 (SDK) 之外,只需安装 Eclipse 和 Apache Tomcat。本文所使用的组件和版本如下所示:


表 1. 使用的组件和版本
组件本文使用的版本
Eclipse Platform3.2.2
Java EE 5 SDK1.5.0_09
Apache Tomcat5.5.20

Eclipse IDE 是一种开源 IDE,用作 Java™Server Pages (JSP) 和 Java 文件的开发环境。如若同时安装 Web 和 Java 2 Platform,Enterprise Edition (J2EE) 开发工具,那么 Eclipse 将非常适合于创建 HTML、JSP 和 servlet。

运行 servlet 需要 Java SDK。最后,在 Java Servlet 和 Java Server Page 的正式参考实现中还会用到 Apache Tomcat,它是一款开源 Web 和 servlet 容器。

安装

Eclipse 和 Tomcat 的安装非常类似 — 都需要将归档文件解压缩到本地硬盘上的文件夹。如果想要卸载任何一个,只需将解压缩后的文件所在的文件夹删除即可。

安装 Eclipse

要安装 Eclipse IDE,将从 Eclipse 网站下载的压缩文件 (.zip 或 .tar.gz) 解压缩,然后将压缩后的文件夹放入合适的位置。我会根据所使用的操作系统的约定来选择安装的位置。如果在 Macintosh 上安装 Eclipse,我会将 Eclipse 文件夹放在 Applications 文件夹内。如果使用的是 Microsoft™ Windows™,我会将解压缩后的文件夹放入 C:\Program 文件目录。

下载和安装了 Eclipse 后,就可以启动它了。在开始创建 Web 项目之前,您需要安装 J2EE 和 Web Development 插件。所幸的是,借助 Callisto Discovery 站点很容易安装这些插件。

安装 Web 工具

Eclipse IDE 运行正常后,选择 Help > Software Updates > Find and Install。这个选项会让您可以下载和安装 Web 工具,且无需转到 Web 站点。

选择 Search for New Features to Install,如下所示,然后单击 Next


图 1. 安装/更新窗口
安装/更新窗口

选择 Callisto Discovery Site,如下所示,然后单击 Next


图 2. 选择 Callisto Discovery Site
选择 Callisto Discovery Site

Callisto Discovery Site 下,选中 Web and J2EE Development 复选框。向导会随即警告您,尚缺少依赖项。单击 Select Required,警告消失。在 Graphical Editors and Frameworks and Models and Model Development 类别中的部分或全部组件会被选中(如图 3 所示),这些组件是安装 Web 和 J2EE 插件所必需的。


图 3. 选择要安装的特性
选择要安装的特性

单击 Next 以继续,针对所选的每个特性的证书协议也会继而出现。如果您同意这些证书,就选择接受,继续向导的后续过程。当 IDE 完成插件的安装后,就会要求您重启 Eclipse 以便更改能够生效。在继续之前,请务必重启 IDE。

重启了 IDE 后,开始开发动态 Web 项目所需的新特性就已准备完毕。

安装 Tomcat

要安装 Apache Tomcat,将所下载的归档文件解压缩并放入到目录中,我将其放在了我的 C:\apps 目录下以便于日后查找。到目前所做的这些就足够了,使用随后显示的 Eclipse 来启动 Tomcat。





回页首


创建一个新的 Web 项目

从 Eclipse IDE,选择 File > New > Project 查看项目向导。在 Wizards 框,输入 Web,而 New Project 窗口会过滤向导以只显示匹配的那些项。利用这种方法可以很容易找到向导,而无需遍历每一项。

从列表中选择 Dynamic Web Project。我们要使用 Standard Web Project Wizard 来建立静态 HTML Web 项目。 虽然您也可以在技术上使用 Tomcat 运行静态 Web 站点,但 Web 服务器,比如 Apache Web Server 更适合于静态内容。 专门为服务于静态页面而设计的 Web 服务器拥有的开销更少,且专为此目的作了调优。

以运行库为目标

Target Runtime 下,可以看到 <None>,如图 4 所示,由于您尚未为 Apache Tomcat 创建运行库,所以需要单击 New 打开 New Target Runtime Wizard。从 Apache 文件夹中选择 Apache Tomcat V5.5,如图 5 所示,然后单击 Next


图 4.创建一个新的动态 Web 项目
创建一个新的动态 Web 项目


图 5.创建一个新的服务器运行库
创建一个新的服务器运行库

现在,您可以命名此运行库,当然保留 Apache Tomcat V5.5 的默认名也可以。单击 Browse 来定位用于 Apache Tomcat 配置的基本文件夹(我的是 C:\apps\apache-tomcat-5.5.20,如图 6 所示)。若无特殊原因,我建议不要更改,保留 IBM® Java Runtime Environment (JRE) 版本作为工作台的默认 JRE。输入有效目录之后,单击 Finish 创建运行库配置。


图 6. 定义服务器位置
定义服务器位置

运行库配置
若您日后发现需要更改自己的运行库配置,可以通过选择 Window > Preferences 实现此目的。在 filter 框,键入 Runtime,列表就会在 Server 类别下显示已安装的运行库配置设置。选择您的 Apache Tomcat 运行库,然后单击 Edit 来更改名称、目录位置或 JRE 版本。

您还需要选择是否想要转换到 J2EE Perspective。我总是选择是,因为这个透视图包含了一些很有用的视图,比如 Servers 视图,可以帮助您日后启动和停止 Tomcat。通过选择 Window > Show View 可以打开 Servers 视图。

添加服务器

Servers 视图目前没有包含任何内容。此视图针对的是应用程序和 Web 服务器;它让您可以控制它们并监视其状态。要从 IDE 直接控制 Tomcat,可通过从上下文敏感菜单选择 New > Server 来向 Tomcat 添加引用。图 7 所示的 New Server 向导将默认指向刚刚创建的那个 Apache Tomcat V5.5 运行库。


图 7. 定义新服务器
定义新服务器

单击 Next。系统提问您是否想要向服务器添加项目。选择在之前的步骤中创建的那个项目,然后单击 Add


图 8. 向服务器添加项目
向服务器添加项目

单击 Finish 关闭向导。现在,Servers 视图包含了 Tomcat V5.5 Server,且其下还包含项目。


图 9. Servers 视图中的 Tomcat 服务器
Servers 视图中的 Tomcat 服务器

创建示例页

测试新的动态 Web 项目以及 Tomcat 服务器集成的最简单方法是创建简单的 JSP 并将其部署到 Tomcat。您可以通过选择 File > New > Other 创建新的 JSP 文件,或者您也可以使用上下文敏感菜单,方法是右键单击 Project Explorer 视图中的项目名称,并选择 New > JSP

确保父目录是 WebContent,并将此文件命名为 index.jsp。单击 Finish 使用默认模板创建页面。如果单击 Next,还可以选择想要为新页面选用的模板(比如 HTML 或 XHTML)。对于本测试而言,可保留默认选项。

如下所示的页面代码显示了一个简单的日期,这表明该代码可以正常工作。


清单 1. index.jsp 的内容
                
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>My Title</title>
</head>
<body>
<% java.util.Date d = new java.util.Date(); %>
<h1>
Today's date is <%= d.toString() %> and this jsp page worked!
</h1>
</body>
</html>

部署此页

测试页完成后,可使用 Eclipse 将其重新部署到 Apache Tomcat。在 Servers 视图,注意到 State 已被设置成 Republish。这是因为自项目上次部署到服务器以来,已经发生了很多更改。右键单击此服务器并从菜单中选择 Publish。一旦项目被部署到此服务器,状态就会变成 Synchronized。

存在问题?
事情有时难免会出错。要查看从 Tomcat 产生的错误,可以使用 Console 视图。Console 捕获源自您在 Servers 视图中设置的服务器的输出。

项目成功部署且服务器成功启动之后,可以打开浏览器并导航到 http://localhost:8080/[ProjectName]/(其中 [ProjectName] 是所创建的动态 Web 项目的名称)。您所创建的新的 Web 页会随即出现,且日期应该是当前日期。如果刷新页面,日期还会随之变化。


图 10. index.jsp 在浏览器中的输出
index.jsp 在浏览器中的输出

Hello World servlet

您可以向您的项目添加 Java servlets 并加以部署。要为测试的目的而快速创建一个 servlet,可以使用 Servlet Wizard,方法是右键单击 Project Explorer 视图中的动态 Web 项目并选择 New > Other。在 Web 文件夹下,选择 Servlet,然后单击 Next

将包名称 com.example.servlets 添加到 Java Package 旁,将 HelloServlet 添加到 Class name 旁。单击 Finish。作为示例,可以保留默认值。Eclipse IDE 会生成一个 servlet 类。要查看应用当中的这个测试用 servlet,可以在 doGet() 方法中添加一行代码来向 ResponseWriter 打印消息。servlet 类应该类似如下所示的这个。


清单 2. HelloServlet.java 的内容
                
package com.example.servlets;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class for Servlet: HelloServlet**/public class HelloServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {/* (non-Java-doc)* @see javax.servlet.http.HttpServlet#HttpServlet()*/public HelloServlet() {super();}   	/* (non-Java-doc)* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("Hello, world!");}  	/* (non-Java-doc)* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}   	  	    
}

添加此 servlet 后,Eclipse IDE 会提示项目有所更改。重新查看一下 Servers 视图;Restart 现在出现在 Tomcat 服务器旁的 Status 列。要重启此服务器,右键单击 Servers 视图中的此服务器,然后选择 Restart > Start。 打开浏览器并导航到 http://localhost:8080/[ProjectName]/HelloServlet(其中 [ProjectName] 是动态 Web 项目的名称)。文本 "Hello, world!" 将会出现在浏览器窗口中。您可以添加日期,将与 index.jsp 文件中的类似的代码添加到 doGet() 方法,并使用 Eclipse IDE 重新部署 servlet。





回页首


结束语

不用离开 IDE 就可以启动、停止和部署到服务器,这种开发 JSP 和 servlet 的方法非常高效。Eclipse 和 Apache Tomcat 的组合则提供了一种简单的集成环境,让您可以加速开发。



参考资料

学习
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

  • 本文是 Geoffrey Duck 在 2004 年 6 月发表的文章 “使用 Eclipse 作为 Jakarta Tomcat 的开发环境” 的后续篇。

  • 获得更多有关 Java servlet 技术 的信息以开始构建功能强大的动态 Web 应用程序。

  • 访问 Sun Microsystems,获取有关 JavaServer Pages 技术 的信息来为您的动态 Web 站点构建 JSP。

  • 参阅 Eclipse Web Tools Platform (WTP) Project,获取有关使用 Eclipse 构建 Web 应用程序所需插件的更多信息。

  • 参阅 “Eclipse 推荐阅读清单”。

  • 浏览 developerWorks 上所有的 Eclipse 文章教程

  • Eclipse 的新手应该首先参看 现在开始学习 Eclipse

  • 通过查看 IBM developerWorks 的 Eclipse 项目资源 扩展您的 Eclipse 技能。

  • 要收听面向软件开发人员的有趣访谈和讨论,请参考 developerWorks podcasts

  • 有关 Eclipse platform 的简介,请参看 “Eclipse 平台入门”。

  • 随时关注 developerWorks 的 技术事件和网络广播

  • 查阅最近将在全球举办的面向 IBM 开放源码开发人员的会议、展览、网络广播和其他 活动

  • 访问 developerWorks 的 开源软件技术专区,获取广泛的 how-to 信息、工具和项目更新以帮助您利用开放源码技术进行开发并将其与 IBM 的产品结合使用。


获得产品和技术
  • 从该项目的官方 Web 站点下载 Eclipse,这个 IDE 功能强大(而且免费),并可用于 Java、JSP 等。

  • 下载 Apache Tomcat 并使用它来运行 Web 应用程序。

  • 从 Sun Microsystems 下载 Java EE 5 SDK

  • 参考 IBM alphaWorks 上最新的 Eclipse 技术下载

  • 下载 IBM 产品的评估版,实际体验这些来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

  • 使用 IBM 试用软件 改进您的下一个开源开发项目,这些软件可以下载或通过 DVD 获得。

讨论
  • Eclipse Platform 新闻组 应该是讨论有关 Eclipse 的问题的首站(选择它将会启动默认的 Usenet 新闻读写器应用程序并打开 eclipse.platform)。

  • Eclipse 新闻组 中含有面向有兴趣使用和扩展 Eclipse 的用户的很多资源。

  • 通过参与 developerWorks blog 加入 developerWorks 社区。



关于作者

Nathan A. Good 居住在明尼苏达州的双子城。其专职工作是软件开发、软件架构和系统管理。在不编写软件时,他喜欢组装 PC 和服务器、阅读和撰写技术文章,鼓励他的所有朋友转用开源软件。他自己编著以及与他人合著了很多书籍和文章,这其中包括 Professional Red Hat Enterprise Linux 3Regular Expression Recipes: A Problem-Solution ApproachRegular Expression Recipes for Windows Developers: A Problem-Solution ApproachPHP 5 Recipes: A Problem-Solution Approach 和最新的力作 Foundations of PEAR: Rapid PHP Development


转载于:https://www.cnblogs.com/mogu/archive/2009/09/22/store_2.html

相关文章:

【学习——字符串】字符串之一网打尽quq

学弟lyh上午讲课&#xff0c;喜闻乐见的制胡窜 一上午讲惹KMP&#xff0c; manachar&#xff0c; trie树&#xff0c; AC自动机 orz 例题都是洛咕咕上的&#xff0c; 贴一下&#xff08;督促自己不要咕 AC自动机不会qaq&#xff08;并且没有学的意向 manachar 没写过 P4555 […

分别用BFS和DFS求给定的矩阵中“块”的个数

目录 背景介绍 BFS实现 基本思想 获取相邻位置元素技巧 BFS函数 DFS实现 基本思想 DFS函数 完整代码 背景介绍 背景 给出一个mxn的矩阵&#xff0c;矩阵中的元素为0或1。称位置(x,y)与其上下左右四个位置(x,y1),(x,y-1),(x-1,y),(x1,y)是相邻的。如果矩阵中有若干(…

[Python_7] Python Socket 编程

0. 说明 Python Socket 编程 1. TCP 协议 [TCP Server] 通过 netstat -ano 查看端口是否开启 # -*-coding:utf-8-*-"""TCP 协议的 Socket 编程&#xff0c;Server 端Server 端绑定到指定地址&#xff0c;监听特定的端口&#xff0c;接受发来的连接请求 "&q…

2014.12.01 B/S之windows8.1下安装IIS

1、打开 控制面板——程序——程序和功能——启用或关闭windows功能 2、找到Internet信息服务 3、等待安装完毕即可 4、控制面板——系统和安全——管理工具——Internet Information Services (IIS)管理器 默认路径为 C:\inetpub\wwwroot 路径更改以后记得更改权限。 转载于:h…

[分享]C# 获取Outlook帐号和密码

[分享]C# 获取Outlook帐号和密码http://www.vjsdn.com/bbs/bbsTopicDetails.aspx?pid108281214 转载于:https://www.cnblogs.com/vjsdn/archive/2009/09/26/1574341.html

BFS:走出迷宫并输出最小步数

目录 背景 描述 例子 思路 完整代码 收获总结 背景 描述 给定一个n*m大小的迷宫&#xff0c;其中*代表不可通过的墙壁&#xff0c;而“.”代表墙壁&#xff0c;S表示起点&#xff0c;T代表重点。移动过程中&#xff0c;如果当前位置是(x,y)(下标从0开始)&#xff0c;且…

人工智能和机器学习领域有哪些有趣的开源项目

人工智能和机器学习领域有哪些有趣的开源项目&#xff1f;投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读 原文链接 [收藏] 本文简要介绍了 10 款 Quora 上网友推荐的 人工智能和机器学习领域方面的开源项目。 GraphLab GraphLab 是一种新的面向机器学习…

复杂度归纳--小结

一、复杂度分析的4个概念1.最坏情况时间复杂度&#xff1a;代码在最理想情况下执行的时间复杂度。2.最好情况时间复杂度&#xff1a;代码在最坏情况下执行的时间复杂度。3.平均时间复杂度&#xff1a;用代码在所有情况下执行的次数的加权平均值表示。4.均摊时间复杂度&#xff…

KDE社区:首个KDialogue正式开放

今天KDE社区与“People Behind KDE” 合作推出一个非常有意思的栏目&#xff0c;叫作KDialogue。 关于KDialogue&#xff0c;有点类似头脑风暴。简言之就是成员向社区发起关于KDE的话题&#xff08;或某一问题&#xff09;&#xff0c;然后KDE的开发者会被邀请参与这个话题。KE…

1091 Acute Stroke 需再做

这是BFS的典型应用场景&#xff1a;求给定矩阵中块(由相邻的点组成)的大小之和。不同的是这一次是三维。 判断是否邻接的依据是是否有公共边&#xff0c;还是可以用上增量数组的技巧 int X[6] {0,0,1,-1,0,0};//增量数组 int Y[6] {1,-1,0,0,0,0}; int Z[6] {0,0,0,0,1,-…

Ext UI 第一步

Code//Ext.onReady(function(){ var _panelnew Ext.Panel({ renderTo:Ext.getBody(), title:"XXX" });});空面板 加按钮方法:addButton(String/Object _config,Function _handler,Object _scope):添加一个按钮对象到面板Codevar loadfunction(){ …

深入浅出 Java Concurrency (29): 线程池 part 2 Executor 以及Executors[转]

Java里面线程池的顶级接口是Executor&#xff0c;但是严格意义上讲Executor并不是一个线程池&#xff0c;而只是一个执行线程的工具。真正的线程池接口是ExecutorService。 下面这张图完整描述了线程池的类体系结构。 首先Executor的execute方法只是执行一个Runnable的任务&…

WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口

原文:WPF的消息机制&#xff08;二&#xff09;- WPF内部的5个窗口之隐藏消息窗口版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/powertoolsteam/article/details/6109036 目录 WPF的消息机制&#xff08;一&#xff09;-让…

二叉树:root==NULL和*root==NULL的区别

root NULL 通常为查找的递归边界&#xff0c;说明当前结点不存在。 *root NULL 表明当且结点存在&#xff0c;但是内容不存在。是创建一棵二叉树时的初始化操作。 前者常用得多。

Intent携带额外的数据的方法

1、putExtras(Bundle data):向Intent中放入需要“携带”的数据。2、putXxx(String key,Xxx data):向Bundle放入Int、Long等各种类型的数据。3、putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。转载于:https://www.cnblogs.com/ahao214/p/41…

为什么 JavaScript 的私有属性使用 # 符号

这几天 JavaScript 的私有属性又成为了前端社区热议的话题。原因很简单&#xff0c;这家伙长这样&#xff1a; 惊不惊喜&#xff01;意不意外&#xff01; 而且 TC39 委员会以及对此达成了一致意见&#xff0c;并且该提案已经进入了 stage 3。在 es 规范阶段 stage 3 是候选提案…

程序员感悟----路该怎么走

有一句话我一直记得很深&#xff0c;“当人深处迷茫之中时早已不再迷茫”。很绕很矛盾的话&#xff0c;也可能有人听到后会马上跳脚喊&#xff0c;我一直迷茫怎么还是迷茫呢&#xff1f;呵呵。静一下想一下再喊。 大家都这么大了&#xff0c;路该怎么走&#xff0c;你知道么&am…

1020 Tree Traversals

1. 有这样一个经典结论&#xff1a;中序序列可以和先序序列、后序序列、层序序列中的任意一个来构建唯一的二叉树&#xff0c;而后三者两两搭配或者三个一起上都不行。因为从本质上来说&#xff0c;后三者都只提供根结点&#xff0c;只有通过中序才能区分左右子树。 2. 本题用…

Android添加权限大讲解

http://bbs.51cto.com/thread-1096739-1.html 对于新手来说&#xff0c;最烦恼的不是如何从网上下载到安卓项目&#xff0c;而是下载到的安卓项目不知道如何添加权限和要添加哪些权限。现在就针对安卓的权限来讲解这些权限应该具体用在什么地方 首先在项目下找到 AndroidManife…

经典算法之选择排序

问题 有一数组a&#xff0c;长度为n&#xff0c;把数组中的元素从大到小重新排列 思路 选择排序十分容易理解。可以理解为有一个盘子&#xff0c;里面装着很多钻石&#xff0c;你可以从里面拿钻石&#xff0c;但一次只可以拿一颗。第一次你当然会拿最大的出来了&#xff0c;第二…

PHP 读写数据库出现中文乱码问题

一、我在PHP读写数据库时&#xff0c;出现中文乱码问题的解决方案&#xff1a; 1、加入一句话就行了&#xff1a; mysql_query("set character set utf8");//读库 mysql_query("set names utf8");//写库 //其实读写都可以只加入 m…

1086 Tree Traversals Again

1. 这题的核心部分是&#xff0c;根据二叉树的先序序列和中序序列求后序序列。等于是在1020 Tree Traversals这一题的基础上&#xff0c;把怎么得到先序序列和中序序列的难度加大了&#xff0c;不是直接给出&#xff0c;而是要曲折一点得到。 2. 先序序列的得到就是把Push后面…

Eclipse的Java工作集和多工程构建路径

一、Java工作集&#xff1a; Eclipse有一个小功能&#xff0c;就是创建Java Working Set。它的作用是解决Package Explorer窗格中创建很多工程时出现拥挤的麻烦。 在创建&#xff08;New对话框&#xff09;时可以加入原来存在的Java工程。创建完后&#xff0c;在左方Package Ex…

ORA-08002: sequence MySeq.currval is not yet defined in this session

2019独角兽企业重金招聘Python工程师标准>>> MySeq.currval 从你的会话中的MySeq序列获取最新的值并返回&#xff0c;因此&#xff0c;它未曾被定义&#xff0c;直到你在你的会话中至少一次用MySeq.NEXTVAL获取一个值。CURRVAL的目的是让你在你的代码中使用某个序列…

【Vegas原创】exp时,ORA-00932: 数据类型不一致解决方法

现象&#xff1a; EXP-00056: 遇到 ORACLE 错误 932 ORA-00932: 数据类型不一致: 应为 BLOB, CLOB, 但却获得 CHAR EXP-00000: 导出终止失败 解决方法&#xff1a; 运行2个脚本&#xff1a; SQL> ?/rdbms/admin/catmetx.sql SQL> ?/rdbms/admin/utlrp.sql 转载于:htt…

1102 Invert a Binary Tree 需再做

1. 题目的输入是&#xff0c;先给出结点总数N&#xff0c;然后N行给出的是值为x&#xff08;0<x<N-1&#xff09;的结点的左右结点的值&#xff0c;若不存在左/右结点&#xff0c;则值为 - 。 2. 这一题我用动态链表没有做出来&#xff0c;根据参考书提示改用静态链表。…

iOS安全攻防(八)Thoes的Logos简介

个人原创&#xff0c;转帖请注明来源:cnblogs.com/jailbreaker 上一篇帖子&#xff0c;讲到使用iOSOpenDev开发基于Theos的Tweak,功能Hook了SpringBoard的 -(void)applicationDidFinishLaunching:(id)application。 先简单讲一下Hook,Hook中文翻译为“钩子”&#xff0c;非常形…

Algs4-1.1.13编写一段代码,打印出一个M行N列的二维数组的转置(交换行和列)

1.1.13编写一段代码&#xff0c;打印出一个M行N列的二维数组的转置(交换行和列&#xff09;。public class Test{public static void main(String[] args){//初始化int MInteger.parseInt(args[0]);int NInteger.parseInt(args[1]);String[][] arraynew String[M][N];for (int…

1053 Path of Equal Weight

1. 以下两组关系很大的概念 树的深度优先搜索 - 先根遍历 - 递归 树的广度优先搜索 - 层序遍历 - 非递归 本题考察的是前者&#xff0c;我设置了这样一个结构体 struct Prestruct{int totalWei 0;vector<int> pre; };Prestruct pre[maxn]; pre[idx].pre向量存放父节…

MapXtreme 2005 学习心得 在地图上创建点/线并显示标注(五)

新建示例 1&#xff1a;新建项目 新建一个网站&#xff0c;选择MapXtreme 6.7.1 Web Application在App_Code中&#xff0c;我们新建一个类&#xff0c;起名叫:LayerManager.cs2&#xff1a;把上节函数放到类LayerManager中 把上一节的函数代码全copy过来&#xff0c;还有using的…