怎样用Jbuilder 2005开发Java Applet应用

技术怎样用Jbuilder 2005开发Java Applet应用今天就跟大家聊聊有关怎样用Jbuilder 2005开发Java Applet应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希

今天,我将和大家谈谈如何用Jbuilder 2005开发Java Applet应用程序。很多人可能不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

一、JBuilder 2005的新特性

JBuilder 2005加速了企业JavaBeans、WEB服务器、XML、移动产品和数据库应用、双向可视化设计工具和J2EE应用服务器快速调用的开发,其中包括BEA WebLogic、IBM WebSphere、Sybase EAServer、JBoss和Integrated Borland企业服务器。凭借创新强大的JavaServer Faces、Struts和Web服务设计工具,支持J2SE 5.0 (JDK 1.5)、UML代码可视化、分布式因子分解、代码审计、企业单元测试、多语言控制系统等。

其次,举例说明JBuilder 2005开发的Applet程序。

从简单的Applet程序开始,我们可以一步一步领略到JBuilder 2005的强大功能。为了提高读者的感性认识,我每一步都提供了清晰的图形。

第三,在JBuilder 2005中测试Applet程序

Borland在JBuilder 2005中构建了两种小程序测试工具:小程序测试床和小程序查看器。

本文只介绍了JBuilder2005在开发Applet程序时的便利性,但这只是JBuilder 2005出色性能的冰山一角。我的目的只是希望读者朋友们能够通过这篇文章对JBuilder 2005有一个初步的了解。我将在以后的文章中继续介绍JBuilder 2005在开发EJB、Web服务和与UML集成中的应用。

一、JBuilder 2005的新特性

JBuilder 2005加速了企业JavaBeans、WEB服务器、XML、移动产品和数据库应用、双向可视化设计工具和J2EE应用服务器快速调用的开发,其中包括BEA WebLogic、IBM WebSphere、Sybase EAServer、JBoss和Integrated Borland企业服务器。凭借创新强大的JavaServer Faces、Struts和Web服务设计工具,支持J2SE 5.0 (JDK1.5)、UML代码可视化、分布式因子分解、代码审计、企业单元测试和多语言控制系统。

JBuilder 2005的新特性是:

1.支持最新标准,快速开发各种Java应用。

Borland JBuilder 2005企业版支持各种Java应用开发,包括JSF、JavaServer Page (JSP)、Servlets、企业JavaBean (EJB)、Web Services、Struts、XML、Swing、数据库应用、移动设备应用等。JBuilder帮助开发人员理解最新的J2SE 5.0 (JDK 1.5)语言的新功能带来的帮助,并为J2SE 5.0提供重构和调试功能。JBuilder 2005也有一个满足J2EE 1.4规范的Tomcat 5.0 Web服务器。

2.开发企业J2EE平台应用程序,并将其部署在主要应用程序服务器中。

可以重用的企业JavaBean可以通过使用双向可视化EJB设计工具快速建立。可视化双向部署描述符编辑器可帮助您管理部署结构、事务、策略、安全角色以及EJB组合和部署所需的其他属性和信息,并涵盖特定于特定服务器的标准部署描述符和部署描述。JBuilder紧密集成了多个行业领先的J2EE应用服务器,包括Borland Enterprise Server、BEA WebLogic Server、JBoss、IBM WebSphere和Sybase EAServer。

3.简化JavaServer Faces和Struts应用程序开发

通过JBuilder提供的许多工具和向导,使用JSF、Struts、Servlets、JavaServer Page和JSP表达式语言开发动态Web应用程序变得更加容易。在流程设计工具的帮助下,JSF所需的文件可以与现有的Web应用程序相结合,形成功能齐全的应用程序。Struts设计工具紧密结合了开发基于Struts的应用程序所需的工具。此外,TagInsight向导可以自动为JSP、HTML和XML文件提示标签,并可以用不同的颜色标记JSP Expression Language关键字,从而提高程序代码的编写速度,减少出错的机会。

4.交付高质量和高性能的应用程序。

p>  JBuilder 2005 Enterprise 版是市场上唯一完全整合效能调校工具之Java 整合开发环境,内建包含剖析工具(profiler ) 、执行绪除错器( thread debugger ) 与程序代码涵盖分析工具(Code Coverage),协助开发人员找出与修正效能相关问题。JBuilder 2005 Enterprise 版中增添了J2EE 效能剖析工具 Borland Optimizeit Request Analyzer协助您分析 J2EE 架构中跨越不同层级 ( tiers ) 程序代码之执行效率。

  此外, JBuilder 2005 中所内建之程序代码稽核 ( code audit ) 工具能够自动发现常见之错误写码方式,进而协助开发团队建立高质量、高效能之应用系统。

  二、使用JBuilder 2005开发Applet应用

  为了协助我们开发、测试与部署Applet应用程序,JBuilder2005提供下列工具:

   Applet Wizard:可快速建立Applet基本结构与相对应的HTML文件。

   AppletTestBed:JBuilder提供的Applet执行与测试工具,我们可以利用它来查看Applet执行结果。

   Applet Viewer:Sun Microsystems公司提供的Applet执行与测试工具。

  (一)使用Applet Wizard 

  JBuilder 2005提供的Applet Wizard可协助我们建立Applet的基本程序代码。启动Applet Wizard的方式如下:

  ● 选取File | New,打开“Object Gallery”对话框。

  ● 在Web窗格内,选取Applet图标后按下[OK]按钮。(如下图1)

图1(点击放大)

  以下是Applet Wizard的各项步骤:

  在步骤一中我们要在name栏中输入HelloApplet,directory栏中修改路径为c: jbprojectHelloApplet,并勾选[Generate standard method)选项。按下[Next]按钮前往步骤二。(如下图2)

图2(点击放大)

  在步骤二中有JDK版本、Output path、Backup path、working directory以及选择的default path和test path,在这里我们都选默认值,按下[Next]按钮前往步骤三。(如下图3)

图3(点击放大)

  在步骤三中我们修改class Javadoc fields中的Title、Description、Copyright、Company、author和version字段的值,其他项采用默认值,按下[Finish]按钮。(如下图4)

图4(点击放大)

接下来开始下面的Applet Wizard四个步骤操作:(如下图5)

图5(点击放大)

  ● Package字段:Applet隶属的套件名称,默认为目前工程名称。

  ● Class name字段:Applet类名称。

  ● Base class字段:Applet所继承的基础类,分为java.applet.Applet与javax.swing.JApplet两种;前者为AWT套件,后者则是使用Swing套件。

  此步骤还包含下列三个选项:

  ● Generate header comments:在Applet类文件内加上标头注解信息(设置于“Project Properties”对话框的General窗格)。

  ● Can run standalone:在Applet类内加入一个main()方法(主要用途是方便测试), 我们不需要另外撰写一个HTML文件就可以测试Applet。

  ● Generate standard methods:建立标准的Applet方法,例如:start()、stop()、destroy()、getAppletlnfo()与getParameterlnfo()方法。

  选择[Next] 按钮进入下一步:(如下图6)

图6(点击放大)

  现在我们可以设置欲传入Applet的参数了。Applet Wizard会在HTML文件的<applet>标签内产生<param>标签,并在Applet类文件内加入必要的程序代码。点击[Add Parameter]按钮将产生一笔新数据,其Name字段值默认为param0。

  选择[Next] 按钮进入下一步:(如下图7)

图7(点击放大)

  在这一步中,如果我们勾选了[Generate HTML Page)选项,Applet Wizard将会建立一个HTML文件:其中包含调用Applet所需要的<applet>标签。此外,我们可以通过Name、Codebase、Width、Height等字段来设置<applet>标签的各项属性。

  选择[Next] 按钮进入下一步:(如下图8)

图8(点击放大)

  在这一步中,我们可以定义Applet的“运行时期配置”(runtime configuration)。如果我们的工程内并未定义任何“运行时期配置”,[Create a runtime configuration)默认会被勾选,请在Name字段内指定“运行时期配置”的名称。按下[Finish]按钮,离开Applet Wizard。回到“工程窗格”中,我们将发现Applet Wizard产生了两个文件:HelloApplet.java与 HelloApplet.html。

  (二)编译并执行HelloApplet

  虽然HelloApplet尚未具备任何功能,但是它已经是一个不折不扣的Applet了,让我们先看看它的执行结果。请在AppBrowser主菜单内选取Run | Run Proiect,执行结果如图9所示。

图9(点击放大)

  当我们按下[Exit]按钮离开,接下来将设计Applet的用户界面。

  (三)设计Applet用户界面

  在此步骤中,我们将利用JBuilder 2005的设计工具为HelloApplet添加较丰富的用户界面,步骤如下。

  1、在“工程窗格”中,以鼠标左键双击HelloApplet.java文件,将它打开于JBuilder编辑器中。

  2、选取编辑器下方的Design页签。

  3、如图10所示,先在“结构窗格”的组件树中选取this节点,然后在查看器内将this节点的Layout属性更改为BorderLayout(原来为<defaultlayout>)。

图10(点击放大)

  4、依照下列步骤在Applet内加入两个Panel容器对象

  点击“组件托盘”的AWT页签,在AWT页签内选取java.awt.Panel组件,然后以鼠标左键点击“结构窗格”的this节点。新的Panel对象将会出现在this节点下方,名称为panel1。请在查看器中将panel1的Constraints属性设置为North。仿照上一步骤加入第二个Panel对象,将它的Constraints属性设置为Center。

  5、更改Panel对象的名称与属性

  在panel1上点击鼠标右键,选取[Rename],将其名称更改为UpperPanel。接着在查看器内将background属性更改为Light Gray。

在panel2上点击鼠标右键,选取[Rename],将其名称更改为LowerPanel。接着在查看器内将background属性更改为White(我们也可以依照自己的喜好来设置背景颜色)。

  6、在LowerPanel加入两个Panel对象

  将LowerPanel的layout属性设置为CardLayout,在“组件托盘”内选取AWT页签的java.awt.Panel组件,然后点击“结构窗格”的LowerPanel节点,这个动作将加入一个Panel对象。新加入的Panel对象会出现在LowerPanel节点下方(名称为panel1)。依此要领加入第二个Panel对象(名称为panel2)。

  将panel1与panel2的Layout属性设置为BorderLayout,将panel1与panel2的background属性分别设置为White与Pink。

  完成上述所有步骤后,请先保存我们的工程。 现在我们已经完成Applet用户界面的基本雏形,接下来要加入某些UI组件。

  (四)设计UpperPanel容器对象

  依照下列步骤在UpperPanel内加入两个UI组件(Label与Choice):

  1、在“组件托盘”的AWT页签内选取,java.awt.Choice组件,然后点击“结构窗格”的UpperPanel节点。新的Choice组件将会出现在UpperPanel节点下方。

  2、在“组件托盘”的AWT页签内选取java.awt.Label组件,然后点击“结构窗格”的UpperPanel节点,这个动作将会加入新的Label组件。新的Label组件将出现在UpperPanel节点下方。

  3、更改lable1对象的属性:

  在“结构窗格”内点击label1对象,将Text属性更改为“Select a language:"。点击font属性的按钮打开Font对话框,在Size字段里输入20。 将foreground属性设置为Blue,“Select a Language:”字符串将以蓝色显示。

  4、在panel1与panel2对象内分别加入一个Label组件。首先在“组件托盘”内选取AWT页签的java.awt.Label组件,然后点击LowerPanel节点下的panel1节点。新加入的Label对象将会出现在panel1节点下方(名称为label2)。依此要领,在panel2内加入另一个Label组件(名称为label3)。

  5、依照下列方式设置label2的属性

  将text属性设置为“Good Movning!”,constraints属性设置为Center, alignment属性设置为CENTER。点击font属性的按钮,在Font对话框内将Size设置为24。

  6、依照下列方式设置label3的属性

  将text属性设置为“早上好”,constraints属性设置为Center,alignment属性设定为CENTER。点击font属性的按钮,在Font对话框内将Size设置为24。

  完成上述步骤就会出现如下图11所示:

图11(点击放大)

 (五)设计Choice对象

  在此步骤中,我们将在Choice对象内加入两个选项,并加入必要的程序代码。

  1、点击编辑器下方的Source页签,切换到源代码编辑画面。

  2、点击“结构窗格”的init()方法,JBuilder 2005会自动将光标移到init()方法的声明位置。

  3、在init()方法内加入下列两行程序代码,用蓝颜色标识的(位于try/catch区块上方):(如下图12所示)

图12(点击放大)

---------------------------------------------------

choice1.addItem("English");

choice1.addItem("Chinese");

--------------------------------------------------

  说明:additem()方法可以为Choice对象加入一个选项。

  4、点击Design页签回到UI设计工具。

  5、在“结构窗格”内点击choice1节点,然后选取“查看器”的Event页签。

  6、以鼠标左键双击itemStateChaoged事件,JBuilder会在HelloApplet.java内新增一个choice1_itemStateChanged()方法,并将光标移到该方法所在位置。

  7、参考下列范例撰写choice1_itemstateChanged()方法的内容,用蓝颜色标识的(如下图13所示)。

------------------------------------------------------------------------------------

public void choice1_itemStateChanged(ItemEvent e) {

if ("English".equals(choice1.getSelectedItem())){

cardLayout1.show(LowerPanel,"panel1");

}

else if ("Chinese".equals(choice1.getSelectedItem())){

cardLayout1.show(LowerPanel,"panel2");

}

}

-------------------------------------------------------------------------------------

图13

  当HellloApplet被执行时,如果Choice选项为“English”,LowerPanel对象内将显示“Good Movning!”字符串(包含于panel1容器);如果Choice选项为“Chinese”,LowerPanel对象内将显示“早上好”字符串(包含于panel2容器)。

  8、保存JBuilder工程,编译并执行HelloApplet,执行结果如图14所示。

图14

  9、将[Select a language]旁边的下拉式菜单(Choice对象)切换至“Chinese”,我们将发现下方的信息更改为“早上好”。如图15所示。

图15

 Applet1.java源代码如下:

package helloapplet;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

/**

* <p>Title: Study</p>

*

* <p>Description: This is a Stendent</p>

*

* <p>Copyright: Copyright (c) 2004</p>

*

* <p>Company: </p>

*

* @author ghq

* @version 1.0

*/

public class Applet1 extends Applet {

 boolean isStandalone = false;

 BorderLayout borderLayout1 = new BorderLayout();

 BorderLayout borderLayout2 = new BorderLayout();

 Panel UpperPanel = new Panel();

 Panel LowerPanel = new Panel();

 CardLayout cardLayout1 = new CardLayout();

 Panel panel1 = new Panel();

 BorderLayout borderLayout3 = new BorderLayout();

 Panel panel2 = new Panel();

 BorderLayout borderLayout4 = new BorderLayout();

 Choice choice1 = new Choice();

 Label label1 = new Label();

 Label label2 = new Label();

 Label label3 = new Label();

 //Get a parameter value

 public String getParameter(String key, String def) {

  return isStandalone ? System.getProperty(key, def) :

  (getParameter(key) != null ? getParameter(key) : def);

 }

 //Construct the applet

 public Applet1() {}

 //Initialize the applet

 public void init() {

  choice1.addItem("English");

  choice1.addItem("Chinese");

  try {

   jbInit();

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 //Component initialization

 private void jbInit() throws Exception {

  this.setLayout(borderLayout2);

  UpperPanel.setForeground(Color.lightGray);

  LowerPanel.setForeground(Color.white);

  LowerPanel.setLayout(cardLayout1);

  panel1.setLayout(borderLayout3);

  panel2.setForeground(Color.pink);

  panel2.setLayout(borderLayout4);

  panel1.setForeground(Color.white);

  label1.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20));

  label1.setForeground(Color.blue);

  label1.setText(""Select a Language:"");

  label2.setAlignment(Label.CENTER);

  label2.setFont(new java.awt.Font("Dialog", Font.PLAIN, 24));

  label2.setText(""Good Movning!"");

  label3.setAlignment(Label.CENTER);

  label3.setFont(new java.awt.Font("Dialog", Font.PLAIN, 24));

  label3.setText(""早上好"");

  choice1.addItemListener(new Applet1_choice1_itemAdapter(this));

  this.add(UpperPanel, java.awt.BorderLayout.NORTH);

  UpperPanel.add(label1);

  UpperPanel.add(choice1);

  this.add(LowerPanel, java.awt.BorderLayout.CENTER);

  LowerPanel.add(panel1, "panel1");

  LowerPanel.add(panel2, "panel2");

  panel1.add(label2, java.awt.BorderLayout.CENTER);

  panel2.add(label3, java.awt.BorderLayout.CENTER);

 }

 //Get Applet information

 public String getAppletInfo() {

  return "Applet Information";

 }

 //Get parameter info

 public String[][] getParameterInfo() {

  return null;

 }

 public void choice1_itemStateChanged(ItemEvent e) {

  if ("English".equals(choice1.getSelectedItem())){

   cardLayout1.show(LowerPanel,"panel1");

  }

  else if ("Chinese".equals(choice1.getSelectedItem())){

   cardLayout1.show(LowerPanel,"panel2");

  }

 }

}

class Applet1_choice1_itemAdapter implements ItemListener {

 private Applet1 adaptee;

 Applet1_choice1_itemAdapter(Applet1 adaptee) {

  this.adaptee = adaptee;

 }

 public void itemStateChanged(ItemEvent e) {

  adaptee.choice1_itemStateChanged(e);

 }

}

  三、在JBuilder 2005中测试Applet程序

  当Applet开发完毕后,我们可以直接在JBuilder 2005内测试Applet的执行结果是否正确,方式有下列两种:

  ● 利用JBuilder 2005的AppletTestBed。

  ● 利用Sun Microsystems的Applet Viewer。

  1、使用JBuilder 2005的AppletTestBed 

  AppletTestBed是JBuilder 2005提供的Applet执行环境,当我们选取Run | Run Project时将会启动AppletTestBed,并执行JBuilder工程的“主要类”(main class)。我们可以依照下列方式将Applet设置为该工程的“主要类”:

  1)选取Project | Project Properties,打开“Project Properties”对话框。

  2)切换至Run窗格,按下[New]按钮建立新的“运行时期配置”;或是按下[Edit]按钮编辑既有的“运行时期配置”。

  3)打开“New Runtime Configuration”对话框之后,我们可以在Main class字段内定义“主要类”是什么。

  利用AppletTestBed执行Applet的结果,上方包含四个按钮:

  Info:显示Applet的参数; Start:执行Applet; Stop:停止Applet; Exit:离开AppletTestBed。

  2、使用Sun Microsystems的Applet Viewer

  在JBuilder 2005内欲使用Applet Viewer执行Applet时,必须通过一个包含<applet>标签的HTML文件。只要在该HTML文件上点击鼠标右键,选取(Run using“运行时期配置名称”)即可启动Applet Viewer。

  3、开发Applet时应注意的事项

  Applet的主要执行环境为Web浏览器。为了让Applet能够正确执行于客户端浏览器,请确定客户端浏览器是否提供JDK的支持。此外,JDK版本也应该和Applet一致,否则Applet执行结果可能和预期的不同。

  在开发Applet过程中,或许我们碰到过一些问题,明明Applet都可以顺利编译,但是却无法正确显示于HTML页面。问题发生的原因通常是<applet>标签的属性定义错误,例如:

  1)忽略Java语言必须区分大小写

  定义<applet>标签的code或archive属性时,其名称与大小写必须和服务器上的文件名称完全相同,否则Applet类文件将无法载入。

  2)code属性并未指定完整的类名称

  code属性所定义的Applet类文件必须包含套件(与子套件)名称。

  3)codebase属性设置有误

  如果Applet参照其他类文件或JAR文件,就必须将其路径定义在codebase属性。

  4)遗漏archive属性

  常见的Applet部署方式是将相关文件包装成JAR或ZIP文件,此时我们必须在 <applet>标签内定义archive属性。

  如果以JBuilder 2005的Applet Wizard来开发Applet,我们可以选择是否由JBuilder自动产生此类型HTML文件。

  以下两点是我们在开发Applet必须要考虑的要点:

  1、浏览器所支持的JDK版本

  随着Java技术的演进,光是JDK就分为好几个版本。某些开发人员偏好以较新的JDK来开发程序,但是他们往往忽略了一点:在一般情况下,用户通常不会自行更新浏览器的版本。

  因此经常会发生某些人可以正常执行Applet,但是其他人却无法执行的窘境。针对上述问题,我们应该从两个地方着手:

  1)要求或协助公司内所有员工的Web浏览器必须更新。

  2)如果Applet应用程序可通过Intemet存取,不妨在网页内加上警告信息,例如“为达到最佳执行效果,请确定我们的浏览器版本为XXX以上”。

  如果我们遭遇到浏览器JDK版本不合的问题,可参考下列几个解决方案:

  1)使用Java外挂程序(plug-in):

  大部分的JDK不相容问题都可以经由“Java外挂程序”来解决。举例来说,如果我们的Applet使用了Swing程序库,但是客户端浏览器的JDK版本太旧,无法支持Swing。

  我们可以要求客户端更新浏览器版本,或是前往http://java.sun.com/products/plugin/寻找适当的外挂程序。

  2)开发时期所使用的JDK版本尽量与客户端一致。 

  3)使用Java Web Start。

  Java Web Start是Sun Microsystem公司所研发的一项新技术。用户可以在网页内点击某个链接,由此启动Applet或其他应用程序。这项技术能够有效解决JDK版本不合的问题,只要客户端浏览器事先安装Java Web Start外挂程序,就可以正确无误地执行Applet。

  2、安全性议题

  通过网络将应用程序传送到客户端执行----这点是Applet最为人诟病的地方。由于网络是一个开放式环境,任何在网络上传送的事物都有可能被人拦截、窃取甚至更改。因此,在开发Applet时必须格外重视应用程序的安全性。我们也必须有所了解,某些操作在一般的Java应用程序可以执行,但在Applet内却是不允许的。

  为了避免Applet执行时因为不明原因(有可能是程序代码遭到篡改)破坏或窃取客户端电脑数据,所有Applet都会被放在一个安全环境下执行,我们称之为Sandbox。这个安全机制可以确保用户电脑不会遭受危险程序的影响。目前Applet能够安全地在网络上传输与使用,Sandbox机制居功甚伟!在此机制的保护下,Applet不能删除或更改主机内的文件名称、不能建立文件,也无法检查文件与目录名称。Java解释器也会严格检查Applet是否执行任何不合法的操作,一旦发生将立刻中断程序执行。此外,Applet只能和原来的Web服务器进行数据交换,无法将数据传送到其他电脑。这些特性都是在开发Applet时必须特别注意的。有了这些严密的保护措施,就可以将用户可能面临的安全性问题降到最低。

  以下是与Applet安全性有关的开发技巧:

  1)对Applet加上标记式

  这个做法可以确保Applet在传送过程的完整性,然而它会有些缺点。以现阶段而言,还没有一套针对Applet制作标记式的标准。如果我们想获取更进一步的信息,请前往http://www.suitable.com/docs/signing.html。

  2)考虑以其他技术来克服Applet的安全性限制

  Applet的某些安全性限制可能导致特定动作无法执行,此时我们可以搭配其他Java技术来完成。举例来说,如果我们希望将数据回写至Web服务器,不妨利用Servlet来完成(因为Servlet是在服务器端执行的应用程序,不像Applet需要传送到客户端才执行,不会有程序代码遭到篡改的疑虑)。

看完上述内容,你们对怎样用Jbuilder 2005开发Java Applet应用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/131703.html

(0)

相关推荐

  • 【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法

    技术【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法 【CSS】让图片在高宽固定的div里水平垂直都居中的三种办法效果:实现一:绝对定位加精算!DOCTYPE html
    html
    head

    礼包 2021年12月21日
  • Charles 移动设备抓包

    技术Charles 移动设备抓包 Charles 移动设备抓包Charles 移动设备抓包(转载)
    除了最常见的网页爬虫,还有一种是针对客户端软件的爬虫。前者使用范围广泛,对后者的数据采集需求越来越大。

    礼包 2021年12月7日
  • 澳大利亚旅游得多少钱,去澳大利亚旅游要花多少钱

    技术澳大利亚旅游得多少钱,去澳大利亚旅游要花多少钱我想你悉尼和墨尔本这两个最著名的城市肯定是要去的吧。如果是穷游,可以在城内不采用交通工具,完全靠走。吃和住弹性都比较大,自己选择适合自己价位的酒店就行,如果不介意的话去超

    生活 2021年10月25日
  • vue生命周期多少个钩子函数(vue生命周期和钩子函数的区别)

    技术Vue生命周期中的八个钩子函数相机是怎样的Vue生命周期中的八个钩子函数相机是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、beforeCre

    攻略 2021年12月16日
  • 怎么用Python爬虫预测今年双十一销售额

    技术怎么用Python爬虫预测今年双十一销售额本篇内容主要讲解“怎么用Python爬虫预测今年双十一销售额”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python爬虫

    攻略 2021年11月10日
  • 初二二次根式计算题,二次根式比较大小[初二]?

    技术初二二次根式计算题,二次根式比较大小[初二]?对于这样的比较大小,因为都是正数,可以直接利用初二二次根式计算题:A2(A平方,以下类同)>B2 等价于 A>B
    (A+B)2>(C+D)2等价于(A+B)>(C+D).

    生活 2021年10月23日