文档中心 V3.0
Java

概述

web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet不过现在使用的很少,Java在服务器端的应用非常丰富:比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。

开发指南

下面为大家实战演示如何发布Java Web项目的demo。该demo有4个目的:

  • 打印简单的欢迎词
  • 绑定mysql服务并打印已绑定的mysql信息
  • 绑定Glusterfs服务并判断路径是否有效
  • 打印正在使用的JAVA版本信息

使用示例

1.创建新的Java_web应用

javaweb-1.png
javaweb-2.png


2.进入刚刚创建的应用控制台

javaweb-3.png


3.在应用下创建mysql,Glusterfs服务

javaweb-4.png
javaweb-5.png


4.点击绑定按钮,管理您所创建的服务

javaweb-6.png


5.把您的项目打包成war文件,开始上传

javaweb-8.png


6.查看代码演示效果

javaweb-9.png


Glusterfs代码示例

package com.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUpload extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
String path = "/home/vcap/app/data/e60389cd-9201-4634-b746-9579efa53021/";
factory.setRepository(new File(path));
factory.setSizeThreshold(10*1024*1024);
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list = upload.parseRequest(req);
for(FileItem item : list){
String name = item.getFieldName();
if(item.isFormField()){
String value = item.getString();
//req.setAttribute(name, value);
//System.out.println("1:" + name + ":" + value);
} else {
String value = item.getName();
int start = value.lastIndexOf("\\");
String filename = value.substring(start+1);
//req.setAttribute(name, filename);
//System.out.println("2:" + name + ":" + filename);
OutputStream os = new FileOutputStream(new File(path, filename));
InputStream is = item.getInputStream();
int length = 0;
byte[] buff = new byte[1024];
while((length = is.read(buff)) != -1){
os.write(buff, 0, length);
}
is.close();
os.close();
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
File file = new File(path);
String[] fileList = file.list();
for(int i = 0; i < fileList.length; i++){
req.setAttribute(String.valueOf(i+1), fileList[i]);
}
req.setAttribute("length", fileList.length);
req.getRequestDispatcher("filelist.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
}
}


扩展服务

目前支持的扩展服务包括:

  • Glusterfs(文件系统)用户和程序可以像访问本地文件一样访问远端系统上的文件
  • MySQL(数据库)提供分布式的关系型数据库服务
  • PostgreSQL(数据库)提供分布式的关系型数据库服务
  • Mongodb(数据库)提供高性能的非关系型数据库
  • Memcached(缓存服务)提供高性能的分布式内存对象缓存服务

注意事项

1、环境变量
如果给应用绑定了相关的服务,MoPaaS将会生成对应的环境变量,您可以在代码中使用获取环境变量的方法来代替手动写入环境变量。当然,您也可以通过自定义环境变量来设置环境变量。详细请见环境变量篇章。
2、权限相关
出于安全性考虑,上传到MoPaaS的代码不被允许进行write操作,因此,有安装过程的应用需要将配置文件(一般为数据库配置文件)通过Glusterfs服务存放到文件管理中心,有上传文件功能的应用需要把文件的存放路径指向为Glusterfs给定的路径。
3、上传代码包
当手动将应用工程压缩成zip压缩包时,请勿直接将工程根目录打包,正确的打包方式为进入工程根目录,选中根目录下所有文件及文件夹,打包成zip压缩包。
4、配置默认首页
用户应用工程如未显式配置默认首页路径,如Java Web应用没有在web.xml中配置welcome页面,平台将寻找应用工程根目录下的index.html或index.php等页面作为应用的默认首页,如在应用工程根目录下未找到相关页面,则直接访问应用url时可能出现“Not Found”错误信息,在该种情况下用户需要在浏览器地址栏种输入完整的路径才能访问相关页面,例:yourappname.butterfly.mopaasapp.com/admin/login.html (yourappname是您的应用名,admin是您打包文件夹的名称,login.html是您想要访问的文件名,请根据项目定义)