购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.10 搭建Java Web开发环境

Java不但可以开发桌面程序,而且它在Web应用领域也是“诸侯一霸”,这就是大名鼎鼎的JSP网页程序。在JDK、Eclipse已经准备好的基础上,只需要再安装一个Web服务器软件就可以成功搭建JSP开发环境。这里选择Tomcat 9作为Web服务器软件,Web服务器软件主要用于解析网页、执行Web服务端的Java代码,然后把结果返回给浏览器。

2.10.1 下载Tomcat

可以到官网(http://tomcat.apache.org/)下载Tomcat,单击Tomcat 9,如图2-25所示。

044-3

图2-25

然后根据操作系统选择合适的版本,这里选择32-bit/64-bit Windows Service Installer(pgp,sha512),下载的文件为apache-tomcat-9.0.41.exe,这是Windows下的安装文件。

2.10.2 安装Tomcat

直接双击下载的apache-tomcat-9.0.41.exe,会出现欢迎界面,如图2-26所示。

045-1

图2-26

单击Next按钮,出现License Agreement界面,单击I Agree按钮,出现Choose Components界面,保持默认选项,继续单击Next按钮,出现Configuration界面,在User Name文本框中输入admin作为用户名,在Password文本框中输入123456作为口令(即登录密码),其他文本框保持默认设置,如图2-27所示。

045-2

图2-27

然后单击Next按钮,出现Java Virtual Machine界面,保持默认设置,如图2-28所示。这个JRE路径就是前面安装JRE所设置的路径,应该保持一致。单击Next按钮,出现Choose Install Location界面,保持默认设置,如图2-29所示。

045-3

图2-28

045-4

图2-29

单击Install按钮开始安装。稍等片刻即可安装完成,如图2-30所示。

045-5

图2-30

单击Finish按钮完成安装。Tomcat自动启动,稍等片刻,可以在任务栏右下角看到Tomcat正在运行的图标 045-6

至此,Tomcat安装完毕。打开浏览器(比如火狐浏览器),在地址栏输入http://localhost:8080或http://127.0.0.1:8080,如果出现Tomcat示例主页,则表示服务器安装成功,如图2-31所示。

046-1

图2-31

2.10.3 在Eclipse中配置Tomcat

Tomcat安装完毕后,还需要让Eclipse“认识”这位老朋友,所以需要在Eclipse中进行Tomcat相关配置。打开Eclipse,然后单击主菜单中的Window→Preferences来打开Preferences窗口,然后在该窗口左边展开Server,选择Runtime Environment,如图2-32所示。

046-2

图2-32

单击右侧的Add按钮,出现New Server Runtime Environment窗口,选择Apache Tomcat v9.0。如图2-33所示。

047-1

图2-33

单击Next按钮,在随后出现的窗口中选择Tomcat的安装路径C:\Program Files\Apache Software Foundation\Tomcat 9.0,如图2-34所示。

047-2

图2-34

其他选项保持默认设置,单击Finish按钮。至此,Eclipse中的Tomcat配置完毕,以后新建Web工程时,Eclipse就会自动选择配置的Tomcat。

2.10.4 第一个Eclipse下的JSP工程

前面部署好了Tomcat软件,现在来看一下网页JSP的测试程序。下面通过一个Eclipse下的JSP工程来测试它是否能正常工作。

【例2.3】 第一个Eclipse JSP工程,在浏览器中查看结果

1)打开Eclipse,准备新建一个Web工程,即在主菜单中选择File→New→Dynamic Web Project,在Dynamic Web Project窗口中输入工程名myprj,其他保持默认设置,如图2-35所示。

048-1

图2-35

如果Target runtime下是None,则可以单击New Runtime添加Tomcat 9.0,这个配置前面介绍过了。

接着,直接单击Finish按钮。这时主界面左边的Project Explorer视图下就会出现myprj工程。同时,在工作区文件夹内会出现一个myprj文件夹,该文件夹就是工程文件夹,其中会自动创建一些文件夹和文件,比如build文件夹用来存放编译之后的文件,WebContent用来存放JSP文件。

2)为myprj工程添加一个JSP文件。右击Project Explorer视图下的项目名myprj,然后在快捷菜单中选择New→JSP File,此时会出现New JSP File窗口,如图2-36所示。

048-2

图2-36

WebContent文件夹通常用于存放JSP网页文件,src目录用于存放Java源文件(*.java),build文件夹用于存放生成的字节码文件(.class)。

我们要把NewFile.jsp文件放到WebContent目录下,因此要在树形控件内选中WebContent,然后输入新建JSP文件的文件名,这里保持默认文件名NewFile.jsp,单击Finish按钮,一个JSP文件就建好了,并且默认“帮助”我们编写了一些代码,不过我们并不需要这些代码,可以将其全部删除,然后输入如下短小精悍的代码:

01 <%@ page language="java" contentType="text/html; charset=utf-8" %>
02 <html>
03   <head>
04     <title>我的第一个JSP程序</title>
05   </head>
06   <body>
07     <h>下面的话来自Java:</h><br>
08     <% out.print("Hello world.我是Java,JSP中的Java!"); %>
09   </body>
10 </html>

在上述代码中,第01行是JSP指令标签,后面章节会详细阐述;第02~07行是HTML标记,<br>表示回车换行;第08行是Java代码,而且包含在指令标签<% %>中,这条Java代码很简单,就是输出一段文本。在JSP中,Java代码要编写在<%和%>之间,这样可以和HTML语言区分开来。读者在输入的时候,会发现输入“<%”时Eclipse会自动补齐“%>”,在输入out.时会自动显示out的很多方法,直接选择println即可,非常方便,这就是Eclipse提供的IntelliSense(智能感知)功能,大大提高了程序员的开发效率。最后记得保存一下这个文件。

3)配置Tomcat虚拟目录。Tomcat的默认根目录为C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\,初学者喜欢把Web项目都放到webapps目录下,这不大符合规范,也不专业(所有Web工程都放在默认的根目录下会很乱),最好还是把Tomcat的默认根目录和每个Web项目文件分开。专业的方式是设置虚拟目录,首先找到当前项目所在的路径,在Eclipse中展开myprj工程,右击WebContent,在快捷菜单中选择Properties,在属性对话框中将Location右边的路径复制下来,如图2-37所示。

049-1

图2-37

接着,进入Tomcat的安装路径下的conf子目录(C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf),用记事本或其他文本编辑工具打开server.xml文件,定位到末尾Host标签处,然后在Host标签中添加Context标签:

    <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

      <!-- SingleSignOn valve, share authentication between web applications
           Documentation at: /docs/config/valve.html -->
      <!--
      <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
      -->
  <Context path="" docBase="D:\eclipse-workspace\myws\myprj\WebContent"/>
     <!-- Access log processes all example.
           Documentation at: /docs/config/valve.html
           Note: The pattern used is equivalent to using pattern="common" -->
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="localhost_access_log" suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />

    </Host>

粗体部分(Context标记那一行)是我们添加的。操作server.xml这个文件要小心,首先要注意:Context path那一行的末尾“>”前面的“/”不要少了,这个“/”表示Context结束,如果少了“/”,Tomcat服务就无法启动,此时可以到C:\Program Files\Apache Software Foundation\Tomcat 9.0\logs下查看日志文件,比如catalina.2020-05-11.log,有一次笔者少写了“/”,该文件末尾就提示:

file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%209.0/conf/server.xml; lineNumber: 168; columnNumber: 9; 元素类型 "Context" 必须由匹配的结束标记 "</Context>" 终止。

接下来要注意的是,“docBase=”语句中开始的双引号右边不要有空格,结尾的双引号左边也不要有空格。

继续看server.xml,其中粗体部分是我们添加的,path的内容是浏览器访问的目录,现在为空,因此通过http://localhost:8080再加网页文件就可以直接访问Web下的JSP文件。docBase的内容表示虚拟目录对应的实际磁盘目录路径,也就是JSP文件所在的目录,而NewFile.jsp正是在D:\eclipse-workspace\myps\myprj\WebContent下。现在保存一下server.xml,然后重启Tomcat服务,可以右击右下角的Tomcat小图标,随后在快捷菜单中选择Stop Service,稍等片刻以同样的方式选择Start Service,这样就可以重启Tomcat服务,我们所设置的虚拟目录就能被Tomcat知道了。现在访问NewFile.jsp,打开浏览器输入URL:http://localhost:8080/NewFile.jsp,出现如图2-38所示的页面。

050-1

图2-38

如果想为虚拟目录添加一个名字,可以再为path赋值,比如path="/myprj",这样在浏览器中访问时输入URL也要增加myprj:http://localhost:8080/myprj/NewFile.jsp。

注意,一般不要把真实的工程名作为名字,比如path="/test",这样在浏览器中访问时要输入URL:http://localhost:8080/test/NewFile.jsp。

另外,path留空("")或"/"的效果是一样的。值得注意的是,如果path为空或“/”的话,则会覆盖/webapps/ROOT下的项目,导致ROOT下的内容无法访问。

我们的第一个JSP程序执行成功了。

为了让Tomcat的/webapps/ROOT下的内容可以访问,最好不要把path留空,可以把虚拟目录改为/hello,即把刚才在conf/server.xml文件中添加的Context标签改为:

<Context path="/myprj" docBase="D:\eclipse-workspace\myps\myprj\hello\WebContent"/>

重启Tomcat服务,打开浏览器,输入URL:http://localhost:8080/myprj/NewFile.jsp。

应该会出现同样的效果,如图2-39所示。

050-2

图2-39

现在输入http://localhost:8080/的话,可以访问/webapps/ROOT下的index.jsp文件,如图2-40所示。

050-3

图2-40

这就是采用虚拟目录的好处,即不影响默认系统主页。为了方便读者学习,笔者把server.xml放在本例工程源码目录下,如果要采用该文件的配置,那么记得把myps文件夹放到D:\eclipse-workspace\下,因为我们在server.xml中写“死”了这个路径。至此,第一个JSP工程创建成功了。

2.10.5 第一个JavaBean工程

JavaBean是一种可重复使用的Java组件,它可以被Applet、Servlet、JSP等Java应用程序调用,也可以可视化地被Java开发工具使用。它包含属性(Properties)、方法(Method)、事件(Event)等特性。

JavaBean是一种软件组件模型,就与ActiveX控件一样,它们提供已知的功能,可以轻松重用并集成到应用程序中的java类。任何可以用Java代码创造的对象都可以利用JavaBean进行封装。通过合理地组织具有不同功能的JavaBean可以快速地生成一个全新的应用程序,如果将这个应用程序比作一辆汽车,那么这些JavaBean就好比组成这辆汽车的不同零件。对于软件开发人员来说,JavaBean带来的最大优点是充分提高了代码的可重用性,并且对软件的可维护性和易维护性起到了积极作用。

JavaBean的种类按照功能可以划分为可视化和不可视化两类。可视化的JavaBean拥有GUI图形用户界面,对最终用户是可见的。不可视化的JavaBean不要求继承,它更多地被使用在JSP中,通常情况下用来封装业务逻辑、数据分页逻辑、数据库操作和事物逻辑等,这样可以实现业务逻辑和前台程序的分离,提高了代码的可读性和易维护性,使系统更健壮和灵活。随着JSP的发展,JavaBean更多应用在非可视化领域,并且在服务端的应用方面表现出了越来越强的生命力。

从功能上讲,JavaBean可以看成是一个黑盒子,即只需要知道其功能,而不必管其内部结构的软件设备。黑盒子只介绍和定义其外部特征以及与其他部分的接口,如按钮、窗口、颜色、形状、句柄等。通过将系统看成使用黑盒子关联起来的通信网络,我们可以忽略黑盒子内部的系统细节,从而有效地控制系统的整体性能。

用户可以使用JavaBean将功能、处理、值、数据库访问进行打包,也可以把其他任何用Java代码创造的对象进行打包,而其他的开发者可以通过内部的JSP页面、Servlet以及其他JavaBean、Applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴功能。

JavaBean的3部分说明如下:

(1)属性

JavaBean提供了高层次的属性概念,在JavaBean中不只是传统的面向对象的概念中的属性,同时还得到了属性读取和属性写入的API的支持。属性值可以通过调用适当的bean方法进行读写。比如,可能Bean有一个名字属性,这个属性的值可能需要调用String getName()方法读取,而写入属性值可能需要调用void setName(String str)方法。

每个JavaBean属性通常应该遵循简单的方法命名规则,这样应用程序构造器工具和最终用户才能找到JavaBean提供的属性,然后查询或修改属性值,对Bean进行操作。JavaBean还可以对属性值的改变做出及时的反应。比如一个显示当前时间的JavaBean,如果改变时钟的时区属性,则时钟会立即重画,显示当前指定时区的时间。

(2)方法

JavaBean中的方法就是通常的Java方法,它可以从其他组件或在脚本环境中调用。默认情况下,所有Bean的公有方法都可以被外部调用,但Bean一般只会引出其公有方法的一个子集。由于JavaBean本身是Java对象,调用这个对象的方法是与其交互的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外部世界访问其任何字段(因为JavaBean没有public字段)。这样,方法调用是接触Bean的唯一途径。

与普通类不同的是,对于有些Bean来说,采用调用实例方法的低级机制并不是操作和使用Bean的主要途径。公开Bean方法在Bean操作中降为辅助地位,因为两个高级Bean特性——属性和事件是与Bean交互的更好方式。因此,Bean可以提供让客户调用的public方法,应当认识到,Bean设计人员希望看到绝大部分Bean的功能反映在属性和事件中,而不是在人工调用的各个方法中。

(3)事件

Bean与其他软件组件交流信息的主要方式是发送和接收事件。我们可以将Bean的事件支持功能看作是集成电路中的输入输出引脚:工程师将引脚连接在一起组成系统,让组件进行通信。有些引脚用于输入,有些引脚用于输出,相当于事件模型中的发送事件和接收事件。

事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中一个适当的事件处理方法来处理这个事件。由此可见,JavaBean确实也是普通的Java对象,只不过它遵循了一些特别的约定而已。

JavaBean有如下6个特征:

1)JavaBean是一种Java语言编写的可重用类,此类要用访问权限修饰词public进行修饰,主要是为了方便JSP的访问。

2)JavaBean定义构造方法(或构造器或构造函数)时,一定要使用public修饰词,同时不能有参数。如果没有定义构造方法时,Java编译器会使用默认的无参数构造方法。

3)JavaBean的属性通常可以用访问权限修饰词private来修饰,表示该属性是私有的,即只能在JavaBean内被访问,在声明时若用public修饰词进行修饰,则表示该属性是公有的,可以被JavaBean外部访问,便于JSP的访问。

4)调用setXXX()方法和getXXX()方法可获取JavaBean中私有属性XXX的数值。

5)JavaBean一定要放在程序包内,既可以使用package自定义,又可以放在JavaBean代码的第一行。

6)对部署好的JavaBean进行修改时,一定要重新编译字节码文件,同时启动Tomcat服务器,之后才能够生效。

【例2.4】 第一个JavaBean工程

1)打开Eclipse,新建一个Dynamic Web工程,工程名是myprj。

2)在Eclipse的Project Explorer中,右击工程myprj,或者在展开的Java Resources中,右击src,随后在快捷菜单中选择New→Class,即新建一个Class,将Package命名为com.ljy,将类命名为Box,如图2-41所示。

052-1

图2-41

在图2-42中单击Finish按钮,此时IDE将打开Box.java文件,在其中输入如下代码:

package com.ljy;

public class Box
{
    double length;
    double width;
    double height;
    public Box()
    {
       length=0;
       width=0;
       height=0;
    }
    public void setLength(double length)
    {
       this.length=length;
    }
    public double getLength()
    {
       return length;
    }
    public void setWidth(double width)
    {
       this.width=width;
    }
    public double getWidth()
    {
       return width;
    }
    public void setHeight(double height)
    {
       this.height=height;
    }
    public double getHeight()
    {
       return height;
    }
    public double volumn()  //获取体积
    {
       double volumnValue;
       volumnValue=length*width* height;
       return volumnValue;
    }
 }

代码很简单,就是计算一个盒子的体积,通过该类的不同方法可以设置或获取盒子的长、宽、高或体积。输入后保存文件,此时将自动生成Box.class文件,到D:\eclipse-workspace\myws\myprj\build\classes\com\ljy\下查看,就会发现有Box.class文件。

3)右击Project Explorer视图下的项目名myprj,随后在快捷菜单中选择New→JSP File,此时出现New JSP File对话框,在File name框输入index.jsp作为文件名,如图2-42所示。

054-1

图2-42

然后单击Finish按钮,在index.jsp文件中添加如下内容:

<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ page import="com.ljy.Box" %>
<html>
<head>
<title>我的第一个Javabean 程序</title>
</head>
<body>

<h1><% out.print("我的第一个Javabean 程序!");

       Box box = new Box();
       box.setHeight(1);
       box.setWidth(2);
       box.setLength(3);

%></h1>
    <h1>计算体积</h1>
    <hr>
        长度:<%=box.getLength()%><br>
        宽度:<%=box.getWidth() %><br>
        高度:<%=box.getHeight() %><br>
        体积:<%=box.volumn()%>
       <hr>
</body>
</html>

保存该文件。接着,进入Tomcat的安装路径下的conf子目录(C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf),用记事本或其他文本编辑工具打开server.xml文件,定位到末尾Host标签处,然后在Host标签中添加Context标签:

<Context path="/myprj" docBase="D:\eclipse-workspace\myws\myprj\WebContent"reloadable="true"/>

保存server.xml文件,如果其中的reloadable属性设为true,那么Tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下Class文件的改动,如果监测到有Class文件被更新,服务器会自动重新加载Web应用。在开发阶段将reloadable属性设为true,有助于调试Servlet和其他的Class文件,但是这样也会加重服务器运行的负载,因此建议在Web应用的发布阶段将reloadable设为false。

下面将Box.class放到合适的位置,让index.jsp可以找到它。我们在D:\eclipse-workspace\myws\myprj\WebContent\WEB-INF\下新建一个文件夹classes,再根据Box的程序包名在classes下新建com文件夹,再到com文件夹下新建ljy文件夹,然后把D:\eclipse-workspace\myws\myprj\build\classes\com\ljy\下的Box.class复制到D:\eclipse-workspace\myws\myprj\WebContent\WEB-INF\classes\com\ljy\下,记得以后每次修改Box.java都要执行这个复制操作。其中,WEB-INF目录是Web目录中最安全的文件夹,用于保存各种类、第三方JAR包、配置文件。

最后,别忘记在桌面任务栏右下角重启Tomcat服务。

4)打开火狐或IE浏览器,输入http://localhost:8080/myprj/index.jsp,运行结果如图2-43所示。

055-1

图2-43

顺便扩展一下,如果不想使用<%@ page import= "com.ljy.Box" %>,也可以使用useBean指令,比如:

<jsp:useBean id="box" scope="page" class="com.ljy.Box"/>

其中,box是定义的对象名称,这样后续代码中就可以直接使用box对象了,而不必用Box box;来定义了。有兴趣的朋友可以试一试。

至此,第一个JavaBean运行成功。有了JavaBean,以后可以把一些加解密运算放在JavaBean中,然后供前台JSP调用。 +uu/0jO+IeLQNURyR2G4ztwCnQ1c1SbpmCQ5SO0NcN9WSwWWXglEkX5jmR1zSHOA

点击中间区域
呼出菜单
上一章
目录
下一章
×