开发一个Java应用程序(1)

App Engine上的Java Web应用程序通过Java Servlet标准接口与应用程序服务器交互。一个应用程序由一个或多个类组成,这些类都扩展自一个servlet基类。servlet是通过一个标准配置文件(叫做“部署描述符”)与URL映射起来的。当App Engine接收到一个请求时,首先会判断该使用哪个servlet类(根据URL和部署描述符),然后初始化该类,并调用这个servlet对象上的某个方法。

Java应用程序的所有文件(包括已编译的Java类、配置文件以及静态文件)都是以一种叫做Web应用程序档案(Web Application Archive,WAR)的标准目录结构组织起来的。WAR目录中的所有东西都会被部署到App Engine上去。WAR中的内容通常是在开发过程中由一组源文件生成的,你可以使用自动构建过程,也可以使用支持WAR的开发工具。

如果使用的是Eclipse IDE和GPlugin,则可以通过Web Application向导来创建新项目。在“File”菜单中,单击“New”,然后单击“Web Application Project”。在打开的窗口中,输入项目名(如Clock)和包名(如clock)。

取消“Use GWeb Toolkit”复选框的选中状态,并确保“Use GAE”复选框是选中的。( 如果选中了“GWT” 复选框, 则新项目在创建时会有一些初始文件。) 单击“Finish”即可创建该项目。

如果没有使用GPlugin for Eclipse,就要使用另一种办法来创建这些目录和文件了。如果对Java的Web开发已经很熟悉了,可以用你现有的工具和工序来生成最终的WAR。在本节余下的内容中,我们将假设该目录结构已经由GPlugin for Eclipse创建好了。

图2-8展示了该项目的文件结构,跟在Eclipse Package Explorer中显示的一样。

图2-8:一个新Java项目的结构,

跟Eclipse Package Explorer中所显示的一样

该项目的根目录(Clock)含有两个主要的子目录:src和war。src/目录所包含的是该项目全部的类文件,这是常见的Java包结构形式。根据clock的包路径,Eclipse将会在文件clock/ClockServlet.java中创建一个名为ClockServlet的servlet类。

war/目录所包含的是该应用程序完整的最终内容。Eclipse会自动编译src/中的源代码,并将编译后的类文件保存到war/WEB-INF/classes/中(默认情况下,该目录在Eclipse的Package Explorer中是不可见的)。Eclipse还会自动地将src/META-INF/中的内容复制到war/WEB-INF/classes/META-INF/。其他所有的东西都会被创建在war/目录中的指定位置。

下面,我们从一个简单的servlet开始构建咱们这个时钟应用程序,其功能就是显示当前时间。打开文件src/clock/ClockServlet.java(如果需要,应先创建),然后如示例2-10所示编辑其中的内容。

示例2-10:一个简单的Java servletpackage clock;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.SimpleTimeZone;

import javax.servlet.http.*;

@SuppressWarnings("serial")

public class ClockServlet extends HttpServlet {

public void doGet(HttpServletRequest req,

HttpServletResponse resp)

throws IOException {

SimpleDateFormatfmt=newSimpleDateFormat

("yyyy-MM-dd hh:mm:ss.SSSSSS");

fmt.setTimeZone(new SimpleTimeZone(0, ""));

resp.setContentType("text/html");

PrintWriterout=resp.getWriter();

out.println("

The time is: " + fmt.format

(new Date()) + "

");

}

}

该servlet类继承自javax.servlet.http.HttpServlet,并为它所希望支持的所有HTTP方法重写了基类中的相应方法。为了能够处理HTTP GET请求,我们的这个servlet重写了doGet()方法。服务器在调用该方法时,将会以一个HttpServletRequest对象和一个HttpServletResponse对象作为参数。HttpServletRequest含有该请求相关的信息,比如URL、表单参数以及cookie等。而该方法则通过HttpServletResponse上的一系列方法来准备响应,如setContentType()和getWriter()等。当这个servlet方法退出时,AppEngine就会将响应发送出去。

为了告诉App Engine使用这个servlet来处理请求,我们还需要一个部署描述符。打开或创建文件war/WEB-INF/web.xml,如示例2-11所示修改其内容。

示例2-11:该web.xml文件(也就是部署描述符)将所有URL都映射到了ClockServlet上<?xmlversion ="1.0"encoding="utf-8"?>

web-app PUBLIC

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

clock

clock.ClockServlet

clock

/*

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

java的应用程序开发_开发一个Java应用程序(1)相关推荐

  1. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  2. java 输出定位代码行_指定一个.java文件,输出其代码行数

    CountList2.java//用来统计java代码行数 import java.io.BufferedReader; import java.io.File; import java.io.Fil ...

  3. java配合什么做前端_作为一个java程序员 ,前端的技术需要达到什么水平?

    一个后端程序员,需要掌握前端技术吗? JSP时代 8年前,刚刚进入编程这个行业,当时的Web开发使用古老的SSH框架+JSP.那个时候,几乎所有的Java程序员都要懂得如何写JavaScript.如何 ...

  4. java做的桌面应用_把一个java web应用包装成桌面应用的简单做法

    昨天玩h2的时候想起来的, 这年头把在线应用报装成桌面应用是越来越流行了,几年前做过类似的事情,简单介绍一下. 1. 选择一个嵌入的web 服务器和 数据库. web服务器我选择的是jetty,虽然t ...

  5. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  6. java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器

    java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...

  7. 用java实现一个计算器程序_1.2第一个java程序——hello world

    第一个java程序--hello world 实现一个java程序,主要有三个步骤:1.编写源代码,2.编译源代码,3.运行.java的源代码必须先编译,然后才能由JVM解析执行.所以我们程序员第一步 ...

  8. 思考并实现以下程序功能:实现一个抢红包的程序 java

    抢红包的程序 java 思考并实现以下程序功能:实现一个抢红包的程序. 可参考模拟微信抢红包的过程:假如当前红包是x元,参与抢红包的有y人,按时间先后顺序保证y人正好抢完x元红包,其中每人抢的红包数值 ...

  9. java虚拟机的生命周期_深入理解Java虚拟机——JVM的生命周期

    package test; public class JVMTestLife { public static void main(String[] args) { new Thread(new Run ...

  10. SQL Server 2005 - 如何在预存程序中调用另外一个预存程序

    要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用:  <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...

最新文章

  1. 人工智能助力全国大学生智能车竞赛
  2. C++ lambda表达式
  3. 跨域解决方案之CORS
  4. 戴尔看好Ubuntu超越Windows的十个优势
  5. 家乡的楼房正在往高层发展
  6. pb retrieve时停止工作_大佬们挂在嘴边的PE、PB是什么?
  7. Java系列之雪花算法和原理
  8. jenkinsapi操作Jenkins,提示:No valid crumb was included in the request
  9. Python2 圆满落幕,Python 继续辉煌! | 原力计划
  10. UNIX 环境高级编程(七)—— 进程标识
  11. C语言读取图像像素坐标,OpenCL中读取image时的坐标
  12. 如何判断机器学习数据集是否是线性的?
  13. 第一章 语料库语言学基本知识
  14. 阿文PPT教程视频课程2019送PPT模板 我懂个P
  15. 新手入门|计算机科普
  16. 【新手福音】分享一个自己制作的机器学习工具集合
  17. kerberos开启kdc的debug日志
  18. FOP生成PDF中文乱码问题解决
  19. vscode插件快餐教程(3) - Diagnostic
  20. 第一性原理:戳中问题本质的人是怎么思考的?

热门文章

  1. 如何用Python发送通知到微信?
  2. SAP BTP 应用 mta.yaml 里的 sap-btp-project1-dest-content module
  3. 如何让SAP Spartacus ng build生成的JavaScript资源附带上store ID
  4. SAP Spartacus应用启用时导入的一些模块
  5. Angular 应用的Support package
  6. 执行SAP Hybris install.bat遇到JavaVersionChecker版本检测失败的问题
  7. Windows环境下,如何在Docker里运行SAP UI5应用
  8. SAP Hybris和Netweaver的租户隔离(Tenant isolation)机制设计
  9. SAP ABAP和Hybris Commerce的Sample数据
  10. SAP Cloud Platform上的WebIDE fullstack在哪里打开