在JSP中使用Commons FileUpload上载文件

08:40下午 三月 03, 2008 in category Java by 牛客

Commons fileUpload 是在JSP中使用的上传文件的组件,现在已经成为Apache项目的一部分。本例简单的说明如何使用 Commons fileUplad 上载文件,首先你要去下载这个组件,放在自己工程的 WEB-INF\lib 下。

第一个文件file.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/common.css" rel="stylesheet" type="text/css" >
<title>文件传输例子</title>
</head>

<body>
<BR><BR><BR><BR>
<BR><BR><BR><BR>
<center>
<p>本例使用commonfileupload组件上传文件,上传的文件放在file目录下。</p>
<form method="POST" action="upfile.jsp" ENCTYPE="multipart/form-data">
文件:<input type="file"  name="file"><input type="submit" value="上传" name="submit">
</form>
</center>
</body>
</html>

注意上面的form的ENCTYPE是multipart/form-data。

第二个文件,upfile.jsp接收文件,通过UUID随机产生一个文件名,把文件放在工程目录下的file目录里面,这个file目录要事先存在,和WEB-INF同级。

<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/common.css" rel="stylesheet" type="text/css" >
<title>文件传输例子</title>
</head>

<body>
<%
    boolean ret = true;
    String fname = UUID.randomUUID().toString();
    DiskFileUpload upload = new DiskFileUpload();
  Iterator it= upload.parseRequest(request).iterator();
  while(it.hasNext()){
      FileItem fileitem=(FileItem)it.next();
      if(!fileitem.isFormField()){
            try{
                fileitem.write(new File(application.getRealPath("/file")+System.getProperty("file.separator")+fname));
            }catch(Exception e){
                ret = false;
                System.out.print(e);

            }
      }
  }
%>
<center>
<BR><BR>
<%
    if(ret) {
        out.print("文件传输成功!文件重命名为:"+fname);
    }else{
        out.print("文件传输失败!");
    }
%>
</center>
</body>
</html>

评论[0]

架设PHP虚拟主机时要限制每个用户的存取目录的相关指令

10:54下午 二月 28, 2008 in category Apache by 牛客

架设PHP虚拟主机,如何将用户对文件的存取权限限制在自己的目录呢?查了半天资料,可能用到如下的指令,暂时记下,省得遗忘啊。

php_value  name  value
php_flag name on|off
php_admin_value name value
php_admin_flag name on|off 

在httpd.conf里面加了php_admin_value后,一直使用如下的测试文件

<?php
     echo `cat /etc/passwd`;
?>

竟然还能能读出数据来。后来参看了手册,用

<?php
     readfile(’/etc/passwd’);
?>

就会提示错误,好像php_admin_value所能控制到的是php自己的那些函数,对于系统的命令则控制不了,有待于继续研究。

评论[0]

Cygwin简介

08:55下午 一月 26, 2008 in category General by 牛客

 

  Cygwin是什么?

  Cygwin是一个在windows的类Linux环境。它包含两部分:
  ●一个DLL (cygwin1.dll),它担任Linux API模拟层提供实际的Linux API功能。
  ●一个工具集合提供了Linux的外观和感觉。
  Cygwin DLL当前工作在所有最近的商业上的Windows x86 32位和64位版本,除了Windows CE。
  注意,Cygwin1.7.0及其后,将不再提供对Windows 95、Windows 98和Winodws Me的支持。

  Cygwin不能做什么?  

  ●Cygwin不能在Windows上运行本地的应用程序。你必须从源代码重建应用程序如果你想它在windows上运行。
  ●Cygwin不能让本地Windows应用程序使用UNIX&copy;功能,像signals、ptys等。另外,如果你想利用Cygwin功能你需要从源代码重新构建你的应用程序。

  Cygwin能做什么?

    ● Windows的Dos Scripts功能非常薄弱,命令行工具也非常少;如果您对Linux比较熟悉,那么Cygwin可以帮助您在Windows下面使用强大的Bash,以及使用数量繁多的Linux命令,通过Scripts,可以更加高效的完成系统管理工作。 [例如在Windows服务器上都安装有Cygwin,所有的系统维护,数据备份,SCP自动同步,都可以在Cygwin下面处理。不可否认,很多时候,命令行工具比图形界面工具要方便快捷。]
    ● 如果您刚进入Linux的世界,使用Cygwin可以让你在Windows下面练习Linux的Bash,以及常用工具。而不需要安装Linux,也不用担心Windows被破坏。
 

  Cygwin的安装 

  对于Cygwin的安装也非常简单,到官网下载安装文件setup.exe,进行安装就可以了。安装所需的其它文件,都有安装程序从网上下载,所以你只有联网才能安装!

评论[0]

Solaris下监视包传送的命令snoop

04:47下午 一月 26, 2008 in category Apache by 牛客

snoop命令用来捕捉和监视网络包。snoop从网络捕捉包并显示它们的内容。snoop使用网络包过滤器和流缓冲器模型来提供有效的网络包捕捉。捕捉的包可以即时显示也可以保存在一个文件中用来以后观察。snoop可以以单行摘要或者详细的多行摘要来显示包内容。在摘要格式上,某些VLAN包除外,仅显示高级协议的数据。如果一个包含有VLAN头并且它的VLAN ID非零,snoop将显示的包会有VLAN标签。例如,一个NFS包将仅显示NFS信息。除了刚才描述的情况下的VLAN信息,底层的RPC、UDP、IP和Ethernet帧信息被抑制,但是可以被显示如果使用了verbose选项。如果没有一个名称服务例如LDAP或者NIS,snoop会显示IP地址。snoop需要一个交互式的接口。

语法:snoop  [-aqrCDNPSvV] [-t [r |  a |  d]] [-c maxcount][-d device] [-i filename] [-n filename] [-o filename][-p first [, last]] [-s snaplen] [-x offset [, length]][expression] 

        [ -a ]                  # Listen to packets on audio
        [ -d device ]           # Listen on interface named device
        [ -s snaplen ]          # Truncate packets
        [ -c count ]            # Quit after count packets
        [ -P ]                  # Turn OFF promiscuous mode
        [ -D ]                  # Report dropped packets
        [ -S ]                  # Report packet size
        [ -i file ]             # Read previously captured packets
        [ -o file ]             # Capture packets in file
        [ -n file ]             # Load addr-to-name table from file
        [ -N ]                  # Create addr-to-name table
        [ -t  r|a|d ]           # Time: Relative, Absolute or Delta
        [ -v ]                  # Verbose packet display
        [ -V ]                  # Show all summary lines
        [ -p first[,last] ]     # Select packet(s) to display
        [ -x offset[,length] ]  # Hex dump from offset for length
        [ -C ]                  # Print packet filter code
        [ -q ]                  # Suppress printing packet count
        [ -r ]                  # Do not resolve address to name

        [ filter expression ]  # 过滤器表达式

例子:
        snoop -o saved  host fred

        snoop -i saved -tr -v -p19


评论[0]

Sun将让海豚MySQL遨游四海

09:36上午 一月 23, 2008 in category MySQL by 牛客

  Jonathan在其博客宣布,Sun将用10亿美金对MySQL进行收购。MySQL在互联网的名气众所周知,她就是LAMP的中“M”。在Sun的开源社区已经有了操作系统SolarisJavaGlassfish,但是就是缺少数据库这个重量级的产品,现在Sun对于互联网在开源社区已经拥有了完整的解决方案,这是其它公司所没有的。可以预计,Solaris、JSP、MySQL将是JSP虚拟主机的首选支持平台,同是Sun开源社区的产品,它们之间配合起来的性能在将来绝对会有更好的表现。

  数据库市场现在已经是三国鼎立时代,MySQL、Oracle和Microsoft SQL Server,其它数据库所占市场份额极小。Sun的收购将会对Microsoft SQL Server和Oracle造成冲击,这个150亿美金的市场竞争将更加激烈。BEA也被Oracle收购了,看来IT垄断时代已经来临了。 

  

评论[0]

Solaris下查看PATH变量的值

11:04上午 一月 09, 2008 in category Solaris by 牛客

使用 echo $PATH,例如

# echo $PATH
/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/openwin/bin:/usr/ucb:/usr/dt/bin:/usr/ccs/bin
#
 

评论[0]

Solaris 10 8/07有关区域的增强功能

02:14下午 一月 08, 2008 in category Solaris by 牛客

使用capped-memory限制区域使用的物理内存、交换空间和锁定内存。

global# zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set physical=500m
zonecfg:myzone:capped-memory> set swap=1g
zonecfg:myzone:capped-memory> set locked=100m
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
----------------------------------------------------------------------
也可以在运行时进行改变

改变物理内存

 

global# rcapadm -z myzone -m 600m

改变交换空间

global# prctl -n zone.max-swap -v 2g -t privileged   -r -e deny -i zone myzone

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

IP实例

这个新功能允许一个容器独占一个网络接口。其它容器即使是全局区域都不能使用它占用的网络接口。

这允许一个容器能够控制它自己的网络配置,包括路由、IP过滤、做一个DHCP客户端等等。语法例子如下:

global# zonecfg -z myzone
zonecfg:myzone> set ip-type=exclusive
zonecfg:myzone> add net
zonecfg:myzone:net> set physical=bge1
zonecfg:myzone:net> end
zonecfg:myzone> exit

评论[0]

为何使用GlassFish(摘自GlassFish社区)

07:00下午 一月 07, 2008 in category Apache by 牛客

问: 为何使用 GlassFish?

GlassFish 社区实现了开源 Java EE 5 应用服务器。GlassFish 是一款强健的商业兼容应用服务器,达到产品级质量,可免费用于开发、部署和重新分发。以下列出了应使用 GlassFish 的诸多原因。

   
GlassFish 是开源的基于社区的 Java EE 5 实现。
   
与早期的 J2EE 版本相比,Java EE 5 有了巨大的改进(J1 主题)。
   
GlassFish 达到产品级质量,具有非常好的性能并具有可伸缩性
   
GlassFish 用于 SJS AS 9.0Java EE 5 SDKNetBeans 5.5
   
GlassFish 已经得到了广泛的采用并受到分析家的关注 [1]、[2]。
   
GlassFish 已被其他公司使用,如用在 TMaxSoft 公司的 JEUS 6 Preview 中。
   
GlassFish 具备众多附加功能,包括 Java DBJava Blueprints 和 AJAX 示例以及样例
   
GlassFish 致力于开发您最喜欢的框架和应用程序
   
GlassFish 具有大量的文档
   
GlassFish 提供迁移工具支持
   
GlassFish 具有产品级质量管理控制台安全性支持。
   
GlassFish 在采用 JPA 方面走在最前面。
   
GlassFish Web 服务栈十分出色,并在日益加强完善
   
GlassFish 的 Grizzly 实现了出众的 Web 层性能与灵活性。
   
GlassFish 提供了开发者支持软件服务培训课程论坛博客以及其他更多资源。
   
GlassFish 支持 AJAX 脚本
   
GlassFish 提供平台和工具 SOA 支持,其中包括 JBI 和 BPEL。
   
GlassFish 直接用于 Java EE 5 的官方参考实现。
   
GlassFish 是 Sun Java System Application Server 的代码库。
   
GlassFish 将合并 SJS AS 8.x 中目前可用的企业功能。
   
Maven 系统信息库中包含了大量组件;很快会增加更多的组件。
   
我们已经开始开发后续发行版详细信息)。
   
请参阅来自各方的赞誉


问: 什么是 GlassFish 项目?

GlassFish 是用于构建 Java EE 5 应用服务器的开源开发项目的名称。它基于 Sun Microsystems 提供的 Sun Java System Application Server PE 9 的源代码以及 Oracle 贡献的 TopLink 持久性代码。该项目提供了开发高质量应用服务器的结构化过程,以前所未有的速度提供新的功能。这是对希望能够获得源代码并为开发 Sun 的下一代应用服务器(基于 GlassFish)作出贡献的 Java 开发者作出的回应。该项目旨在促进 Sun 和 Oracle 工程师与社区之间的交流,它将使得所有开发者都能够参与到应用服务器的开发过程中来。

问:Web 站点上提供了哪些内容?

应用服务器的每晚构建 (nightly build) 和源代码位于 http://glassfish.dev.java.net。与其他社区开发站点一样,在该站点上您也可以找到电子邮件列表、讨论论坛、新闻、反馈、许可信息以及大量的帮助资源。

问:GlassFish 社区的规模有多大?

GlassFish 开发社区正处于起步阶段,虽然规模较小,但正在迅速发展。目前,已有超过 100 名贡献者签约。目前,参与开发该产品的 Sun 和 Oracle 工程师的人数与其他应用服务器开发者社区的工程师人数相当。随着 GlassFish 项目向社区中发布,我们期待参与代码开发的开发者的人数有极大的增长。

问:从何处可以访问 GlassFish 项目?

http://glassfish.dev.java.net

问:我能否作为开发者根据需要对代码进行更改?

可以。在遵守通用开发和发布许可 (Common Development and Distribution License, CDDL) 版本 1.0 的前提下,开发者可以免费获得源代码,还可以对代码进行更改(只要他们认为合适)。要申请 Java Compatibility,商业分发的开发者需要签署 Java Developer License (JDL),并在重新分发代码前验证代码已通过兼容性测试套件 (compatibility test suite, CTS) 的测试。任何人均可签署分发协议,对代码进行审阅以贡献更改、错误修复和功能。

问: 我每隔多长时间可以获得一次 GlassFish 的更新?

GlassFish 的更新版本将于每晚发布在 glassfish.dev.java.net 上。发布的代码已经过了非常基本的测试以确保它们能够进行构建并执行,但这些代码并没有象产品发行版那样经过完整测试。此外,您具有对 CVS 树的读取访问权限(开发者对此 CVS 具有同样的权限),这样您便可以通过此 CVS 树始终了解最新版本的代码。偶尔(通常为一周左右),我们还会推出“提升”(promoted) 版本,这种版本经过了更为详尽的测试,与普通的每晚构建相比,提升版本 (promoted build) 中包含了更多记录的功能。基于 GlassFish 构建的受支持的 Beta 和 FCS 版本的 Sun Java System Application Server 9.0。

问: 该 GlassFish 适用于什么版本的 Java EE?

GlassFish 将实现最新版本的 Java EE 平台 Java EE 5,这两者将大约同时成为最终版本。同时,Sun 还将基于 GlassFish 发行最终的受支持的兼容 Sun Java System Application Server PE 9.0。

问:将要发行什么,于何时发行?

在 2005 年 6 月,Sun 将 GlassFish 项目的 Web 站点向公众开放,从而发布了 GlassFish 项目。开发者可以访问源代码、每晚构建、讨论组和电子邮件列表。这是开发者首次能够了解并参与应用服务器的开发过程。在未来的 6 个月内,Sun 将逐步提供关于代码的更多详细信息。最初,访问仅限于 Web 层,随着 GlassFish 的开发,访问也将扩大到其他模块。

问:会对 Java EE 许可证持有者产生什么影响?

GlassFish 项目将 Java EE 呈现在更多爱好者面前,这些人最终将成为 Java EE 许可证持有者的客户。GlassFish 不会更改许可证持有者的任何许可证条款。在遵守其许可证条款的前提下,许可证持有者仍可以销售或分发代码,并对已通过 TCK 的产品使用 Java Compatibility 品牌。在遵守授予开发者的 CDDL 许可证条款的前提下,他们可以使用、编辑、更改代码,并可以分发代码或将其用于生产。但他们没有得到使用 CTS 的许可,也不能使用 Java Compatibility 品牌。

问:都有哪些许可条款?

OSI 批准的 CDDL 许可证正用于 GlassFish 项目,允许开发者查看、使用、编辑和更改代码,并可以分发代码或将其用于生产。部分代码尚未以源文件的格式提供。因此,一小部分代码仍需遵循二进制分发许可证。随着时间的推移,我们将逐步开放更多的代码,最终目标是开放所有的代码并取消二进制分发许可证。这并不是因为我们有什么不良的企图,而是因为将资源移入开放的环境并不是一件易事,我们期待能够在夏末之前发布实现这一目标的计划。

想重新分发我们的应用服务器构建的用户没有获得使用 CTS 的许可证,也不得使用 Java Compatibility 品牌。他们可以选择签署 JDL 商业许可证并通过 CTS,从而可以分发代码并使用 Java Compatibility 品牌。

问:我现在是 SCSL 许可证持有者,想使用 CDDL,可以吗?

可以。当前的 SCSL 许可证持有者可选择使用 CDDL,但他们必须点击通过新的许可证并在他们的工作中使用 CDDL 通知。

问:从何处可以获得有关 CDDL 许可证的更多信息?

可于此处获得有关 CDDL 的详细信息。

问:会进行 Java EE 5 平台的兼容性测试吗?

会。Java EE 5 兼容性测试套件 (Compatibility Test Suite, CTS) 将可用于 Java EE 5 平台。目前,J2EE CTS 包含 5,000 多种针对 J2EE 1.4 的测试,而针对 Java EE 5 及未来版本的测试会更多。该套件通过执行特定的应用程序功能并检查测试结果来进行测试。例如,要测试向数据库中插入行的 JDBC 调用,EJB 组件会进行调用来插入行,然后通过调用检查该行是否已被插入。要通过完整的测试套件不仅要通过测试本身,还要求符合一组特定的规则。这些规则十分重要,在很多情况下,这些规则甚至比测试内容本身还重要。

问:成为 Java EE 许可证持有者与实现 Java EE 兼容性有何区别?

Java EE 许可证持有者已签署了 Java EE 的商业分发许可证。这意味着许可证持有者可以进行兼容性测试并已承诺保持兼容性。但这并不意味着许可证持有者的产品一定是兼容的。查找 Java EE 品牌,该品牌意味着具有该特定品牌的产品已通过了兼容性测试套件 (Compatibility Test Suite, CTS) 的测试,是兼容的。

评论[0]

Solaris10下区域创建基本步骤

06:19下午 一月 07, 2008 in category Solaris by 牛客

创建一个区域

系统启动就进入'全局'区域。这是一个主要的区域。

# mkdir /x1/zones/<zonename>   [不能是一个符号链接]
# chmod 700 /x1/zones/<zonename>
# zonecfg -z <zonename>
create
set zonepath=/x1/zones/<zonename>
set autoboot=true (或者 autoboot=false)
add inherit-pkg-dir
[只读路径, 从全局区域使用回送文件系统(lofs)挂载]
set dir=/opt
end
add net
set address=<ip> [区域IP]
set physical=bge0 [使用的网络接口]
end
add dataset [如果使用ZFS存储器]
set name=zonestorage/<zonename>
end
commit
exit
# zoneadm -z <zonename> install
[安装区域,需要一定的时间]
# zoneadm -z <zonename> boot
# zlogin -C <zonename>

初次进入区域,会提示你配置区域。就像你新安装了一个Solaris系统,例如主机名、root口令、DNS配置、时间区域等等。

在第一次启动的时候配置区域

1. 选择 'X Terminal Emulator' (xterms)    - 选项 12
...
2. 输入完整的主机名 (例如 <zonename>zones.apache.org)
[ 此处使用Esc-2来代替F2的功能. ]
[ Before this step, minotaur's named should have the name as a valid DNS entry ]
3. 不配置Kerberos security (这个是默认的)
4. 选择DNS

domain zones.apache.org
nameserver 140.211.166.130
nameserver 140.211.166.131
search apache.org zones.apache.org

5. 选择时间区域 (timezone offset of 0)
It is the bottom option; scroll down
6. 选择root口令
7. 选择 'discover NFSv4 domain',当然如果是独立的计算机,此处不选!
[ 系统重起 ]



8. 初始化 sfw配置文件的本地拷贝
(允许本地的sudoers)

# cp -rp /opt/sfw/etc.orig /etc/opt/sfw

9. 禁止服务 (看下面).

10. 完成!

---
建议使用smf管理服务,而不是使用/etc/init.d/。

禁止服务:
svcadm disable network/smtp [i.e. sendmail]

启用服务:
svcadm enable network/smtp [i.e. sendmail]

列出正在运行的服务:
svcs

建议在区域中禁止的服务,可根据自己的实际情况来决定。
[可以把这些命令粘贴到你的终端]:
svcadm disable network/smtp
svcadm disable network/telnet
svcadm disable network/ftp
svcadm disable network/finger
svcadm disable network/login:rlogin
svcadm disable network/shell:default
svcadm disable application/x11/xfs
svcadm disable network/rpc/rstat
svcadm disable network/rpc/rusers
svcadm disable network/rpc/smserver
svcadm disable network/rpc/gss
svcadm disable network/rpc/rquota
svcadm disable network/rpc/cde-calendar-manager
svcadm disable network/rpc/cde-ttdbserver
svcadm disable network/nfs/client
svcadm disable network/nfs/cbd
svcadm disable network/nfs/mapid
svcadm disable network/nfs/status
svcadm disable network/nfs/nlockmgr
svcadm disable network/nfs/rquota
svcadm disable network/stdiscover
svcadm disable network/stlisten
svcadm disable network/cde-spc
svcadm disable network/rpc-100235_1/rpc_ticotsord
svcadm disable network/security/ktkt_warn

---
为了最新的安全更新:
[ 仅在全局区域中执行]

# smpatch update

有用的区域命令

这些命令都在全局区域中运行。

列出所有区域:
$ zoneadm list -vc

启动一个区域:
# zoneadm -z <zonename> boot

登录到区域的控制台:
# zlogin -C <zonename>
[escape via ~. ;
remember to ~~ if you are connecting via SSH!]

进入一个区域
[必须是root帐号; 进入到区域后使用区域的root身份]:
# zlogin <zonename>
[通过关闭shell退出区域]

通过指定用户登录到区域:
# zlogin -l <username> <zonename>

关闭一个区域:
# zlogin
# shutdown -i5 -y -g0 [典型的Solaris关闭命令]

重起一个区域
[强制重起; 通过shutdown脚本]:
# zoneadm -z <zonename> reboot

删掉一个区域:
# zoneadm -z <zone-to-zap> uninstall [卸载]
# zonecfg -z <zone-to-zap> delete [删除]

评论[0]

Solaris10自带的Apache2的使用

05:42下午 一月 07, 2008 in category Solaris by 牛客

目录:
/usr/apache2 - 二进制文件。
/etc/apache2 - 配置文件。
/var/apache2 - 日志(logs)、网页主目录(htdocs)等。
使用root登录,进入到/etc/apache2目录。
拷贝 httpd.conf-example 成 httpd.conf,只要httpd.conf存在,重起的时候,这个apache2就会自动启动。
运行:
# mkdir /var/run/apache2
(这个允许httpd写pid文件。)
注意:好像重起会清除/var/run中内容,所以可以在其它位置定义它。
检测配置信息
# /usr/apache2/bin/apachectl configtest
启动Apache2:
# /usr/apache2/bin/apachectl -k start
停止Apache2:
# /usr/apache2/bin/apachectl -k stop
如果遇到问题,请检查日志
位于 "/var/apache2/logs"

评论[0]