mashiguang

小马快跑

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  20 随笔 :: 0 文章 :: 60 评论 :: 0 Trackbacks

#


调用ejb时,如果客户端和ejb不在同一个jvm,就要设置InitialContext,不同的应用服务器InitialContext写法也不同.
Context.INITIAL_CONTEXT_FACTORY:指定到目录服务的连接工厂
Context.PROVIDER_URL:目录服务提供者URL

//jboss:
Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"
Context.URL_PKG_PREFIXES, "org.jboss.naming"
Context.PROVIDER_URL, "localhost:1099"

//weblogic:
Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"
Context.PROVIDER_URL, "t3://localhost:7001"

//apusic(金蝶):
Context.INITIAL_CONTEXT_FACTORY, "com.apusic.jndi.InitialContextFactory"
Context.PROVIDER_URL, "rmi://localhost:6888"

//WebSphere:
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
Context.PROVIDER_URL, "iiop://localhost:900"


//J2EE  SDK(J2EE  RI):
Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"
Context.PROVIDER_URL, "iiop://127.0.0.1:1050"

//SilverStream:
Context.INITIAL_CONTEXT_FACTORY, "com.sssw.rt.jndi.AgInitCtxFactory"
Context.PROVIDER_URL, "sssw://localhost:80"

//OC4J:
Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory"
Context.PROVIDER_URL, "ormi://127.0.0.1/"

//WAS5:
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"
Context.PROVIDER_URL, "iiop://localhost:2809"

 

常用JNDI服务提供者连接工厂:
Filesystem:  Com.sun.jndi.fscontext.FSContextFactory或者com.sun.jndi.fscontext.RefFSContextFactory
LDAPv3:    Com.sun.jndi.ldap.LdapCtxFactory
NDS:     com.novell.naming.service.nds.NdsInitialContextFactory
NIS:     com.sun.jndi.nis.NISCtxFactory
RMI registry: com.sun.jndi.rmi.registry.RegistryContextFactory
IBM LDAP服务提供者:   com.ibm.jndi.LDAPCtxFactory
BEA 名字服务提供者:   weblogic.jndi.WLInitialContextFactory
JBOSS名字服务提供者:  org.jnp.interfaces.NamingContextFactory

posted @ 2008-07-14 16:35 mashiguang 阅读(14299) | 评论 (2)编辑 收藏

自JDK1.0开始就存在包装器类,但是在JDK5.0之前,必须手工地插入打包和拆包的代码.
JDK5.0中就有了自动打包功能,但在5.0中自动打包时存在一些差异,刚才看《java核心技术第7版》时才发现.

代码1:
Integer a=1000;
Integer b
=1000;
System.out.println(a
==b);//false
代码2:
Integer a=100;
Integer b
=100;
System.out.println(a
==b);//true
代码3:
Integer a=new Integer(100);
Integer b
=new Integer(100);
System.out.println(a
==b);//false

第一段代码不成立,而第二段代码成立的原因是:自动打包
自动打包规范要求boolean,byte,char≤127,介于-128→127之间的short和int被包装到固定的对象中.
打包和拆包是编译器认可的,而不是虚拟机,编译器在生成类的字节码时,插入必要的方法调用,虚拟机只是执行这些字节码。

第三段代码不用多说肯定不成立.

 

posted @ 2007-12-13 17:03 mashiguang 阅读(1328) | 评论 (6)编辑 收藏


在应用的web.xml中配置了InvokerServlet.

 <servlet>
  
<servlet-name>InvokerServlet</servlet-name>
  
<servlet-class>
   org.apache.catalina.servlets.InvokerServlet
  
</servlet-class>
  
<init-param>
   
<param-name>debug</param-name>
   
<param-value>0</param-value>
  
</init-param>
  
<load-on-startup>-1</load-on-startup>
 
</servlet>
  
<servlet-mapping>
    
<servlet-name>action</servlet-name>
    
<url-pattern>*.do</url-pattern>
  
</servlet-mapping>


在jboss4.0.5中使用没有问题,但迁移到4.2时,当使用到InvokerServlet就会出异常,解决办法:
在D:\jboss-4.2.1.GA\server\all\deploy\jboss-web.deployer下context.xml文件中的context元素中添加属性:privileged

<Context cookies="true" crossContext="true" privileged="true">

出现这个问题可能是tomcat5.5和tomcat6的差异,暂未查明,本文只供个人参考,不接受评论.

 

posted @ 2007-11-28 10:46 mashiguang| 编辑 收藏

     摘要: 用一个简单的ejb3.0示例记录ant打ear包的过程 源码下载 环境: apache-ant-1.6.5 jboss-4.2.1.GA jboss-annotations-ejb3.jar jboss-ejb3.jar jboss-ejb3x.jar 最后三个包在jboss里有. 1,建ejb3.0项目 session bean接口:HelloWorld pub...  阅读全文
posted @ 2007-11-24 00:44 mashiguang 阅读(6329) | 评论 (1)编辑 收藏

使用commons mail时需要的jar包:
1,commons-email-1.1.jar
2,mail.jar
3,activation.jar
(在web应用里只需要commons-email包)

发送简单的文字邮件:

SimpleEmail email = new SimpleEmail();

email.setHostName(
"smtp.sina.com");
email.setAuthentication(
"username""password");//在邮件服务商处注册的用户名和密码
email.addTo("mailTo@163.com");
email.setFrom(
"username@sina.com""alias");

email.setCharset(
"UTF-8");//gbk或gb2312,只要支持中文就行
email.setSubject("title");
email.setMsg(
"content");
email.send();

发送带附件的邮件:
// Create the attachment
EmailAttachment attachment = new EmailAttachment();
attachment.setPath(
"mypictures/john.jpg");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(
"Picture of John");
attachment.setName(
"John");

// Create the email message
MultiPartEmail email = new MultiPartEmail();
email.setHostName(
"mail.myserver.com");
email.setAuthentication(
"username""password");
email.addTo(
"jdoe@somewhere.org""John Doe");
email.setFrom(
"me@apache.org""Me");
email.setCharset(
"UTF-8");
email.setSubject(
"The picture");
email.setMsg(
"Here is the picture you wanted");

// add the attachment
email.attach(attachment);

// send the email
email.send();

创建多个EmailAttachment对象,并调用MultiPartEmail.attach();就可以发送多个附件.

发送HTML格式的邮件:

发送html格式的邮件和简单邮件的区别就在创建HtmlEmail对象
并用email.setHtmlMsg(String)或email.setMsg(String)把含有html标签的字符串赋给email对象.
HtmlEmail对象还有一个setTextMsg(String)方法,这个方法参数里的html标签会被当做普通字符处理,不会被解析成html元素.
更详细内容可以看apache commons-email的用户指南.

posted @ 2007-11-01 16:51 mashiguang 阅读(1364) | 评论 (4)编辑 收藏

贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧。

Struts本身有一套完善的防止重复提交表单Token(令牌)机制,但笔者目前的项目自写的framework没有用到Struts,故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制。不难,容易实现。

实现原理:一致性。jsp生成表单时,在表单中插入一个隐藏<input>字段,该字段就是保存在页面端的token字符串,同时把该字符串存入session中。等到用户提交表单时,会一并提交该隐藏的token字符串。在服务器端,查看下是否在session中含有与该token字符串相等的字符串。如果有,那么表明是第一次提交该表单,然后删除存放于session端的token字符串,再做正常业务逻辑流程;如果没有,那么表示该表单被重复提交,做非正常流程处理,可以警告提示也可以什么也不做。

看代码。

首先是Token主类。类很简单,而且主要方法都给doc注释了

/*
* blog: 
http://hi.baidu.com/bobylou
* $Revision: 1.1 $
* $Date: 2007/07/18 10:02:55 $
* $Author: bobrow$
*/


package com.paizuo.framework.util;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

public class Token {

    
private static final String TOKEN_LIST_NAME = "tokenList";

    
public static final String TOKEN_STRING_NAME = "token";

    
private static ArrayList getTokenList(HttpSession session) {
       Object obj 
= session.getAttribute(TOKEN_LIST_NAME);
       
if (obj != null{
          
return (ArrayList) obj;
       }
 else {
          ArrayList tokenList 
= new ArrayList();
          session.setAttribute(TOKEN_LIST_NAME, tokenList);
          
return tokenList;
       }

    }


    
private static void saveTokenString(String tokenStr, HttpSession session) {
       ArrayList tokenList 
= getTokenList(session);
       tokenList.add(tokenStr);
       session.setAttribute(TOKEN_LIST_NAME, tokenList);
    }

   
    
private static String generateTokenString(){
       
return new Long(System.currentTimeMillis()).toString();
    }


    
/**
     * Generate a token string, and save the string in session, then return the token string.
     * 
     * 
@param HttpSession
     *            session
     * 
@return a token string used for enforcing a single request for a particular transaction.
     
*/

    
public static String getTokenString(HttpSession session) {
       String tokenStr 
= generateTokenString();
       saveTokenString(tokenStr, session);
       
return tokenStr;
    }


    
/**
     * check whether token string is valid. if session contains the token string, return true. 
     * otherwise, return false.
     * 
     * 
@param String
     *            tokenStr
     * 
@param HttpSession
     *            session
     * 
@return true: session contains tokenStr; false: session is null or tokenStr is id not in session
     
*/

    
public static boolean isTokenStringValid(String tokenStr, HttpSession session) {
       
boolean valid = false;
       
if(session != null){
          ArrayList tokenList 
= getTokenList(session);
          
if (tokenList.contains(tokenStr)) {
             valid 
= true;
             tokenList.remove(tokenStr);
          }

       }

       
return valid;
    }

}



怎么使用?

在jsp页面端。

首先import该类:

<%@ page import="com.paizuo.framework.util.Token" %>

表单包含隐藏的token字符串:

 

<form>

<input type="hidden" name="<%=Token.TOKEN_STRING_NAME %>" value="<%=Token.getTokenString(session) %>">

</form>

 

在Server端action中进行检验。

 

if(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME), request.getSession())){
//进行正常业务流程
}

else{
//进行防重复提交处理流程
}

完毕。

posted @ 2007-08-21 11:45 mashiguang 阅读(3943) | 评论 (6)编辑 收藏

1.创建mysql用户并授权:GRANT

语法:
GRANT privileges (columns)
ON what
TO username IDENTIFIED BY "password"
WITH GRANT OPTION

privileges :授予用户的权限
columns :权限运用的列,可选
what :权限运用的对象,可以是数据库,表,列
username :权限授予的用户
password :密码
WITH GRANT OPTION子句是可选的。

先来创建一个用户plmm(漂亮mm),给她最大的权限,可以对所有的表做任何操作,密码是"1234",但是她只能从本地登陆:
grant all
on *.*
to plmm@localhost identified by "1234"
再来创建一个用户klmm(恐龙mm),我们只给她查看test数据库里的table1表的权限,而且只能在192.168.0.%登陆,这里的"%"是个通配符,如果要使用通配符的话一定要用引号括起来.
grant select
on test.table1
to klmm@'192.168.0.%' identified by "1234"

下面表中列出privileges  除了上面用到的all和select还有哪些值可以选择
权限指定符 权限允许的操作
ALTER 修改表和索引
CREATE 创建数据库和表
DELETE 删除表中已有的记录
DROP 抛弃(删除)数据库和表
INDEX 创建或抛弃索引
INSERT 向表中插入新行
REFERENCE 未用
SELECT 检索表中的记录
UPDATE 修改现存表记录
FILE 读或写服务器上的文件
PROCESS 查看服务器中执行的线程信息或杀死线程
RELOAD 重载授权表或清空日志、主机缓存或表缓存。
SHUTDOWN 关闭服务器
ALL 所有;ALL PRIVILEGES同义词
USAGE 特殊的“无权限”权限

2.撤消用户权限:revoke
上面我们创建plmm用户时给了她所有的权限,现在要撤消她更新(update)数据库的权限
revoke update ON *.* FROM plmm@localhost
posted @ 2007-07-07 01:03 mashiguang 阅读(274) | 评论 (0)编辑 收藏

      以往每添加一个servlet就要在web.xml里添加<servlet><servlet-mapping>,随着项目的进度,servlet数目越来越可观.
web.xml里也密密麻麻的排满了<servlet><servlet-mapping>这些食之无味弃之崩溃的东西,有一种方法可以改善这种境况.
      在web.xml里添加如下的配置:
    <servlet>
        
<servlet-name>InvokerServlet</servlet-name>
        
<servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        
</servlet-class>
        
<init-param>
            
<param-name>debug</param-name>
            
<param-value>0</param-value>
        
</init-param>
        
<load-on-startup>-1</load-on-startup>
    
</servlet>
    
    
<servlet-mapping>
        
<servlet-name>InvokerServlet</servlet-name>
        
<url-pattern>/servlet/*</url-pattern>
    
</servlet-mapping>
      ok,现在web.xml里保留这一个servlet配置就可以满足所有的servlet调用了,比如调用UserManagerService这个servlet,在页面表单里这样写:
<form name="f" method="post" action="/servlet/com.mashiguang.servlet.UserManagerService">
      
<input/>
      
<submit/>
</form>
      注意表单action "/servlet/"后面是这个servlet class的全名.
posted @ 2007-07-06 19:17 mashiguang 阅读(1828) | 评论 (5)编辑 收藏

1.配置tomcat可以浏览web应用目录:
   修改%tomcat_home%/conf/web.xml,listings参数值为true代表可以浏览web应用的目录.

<init-param>
   
<param-name>listings</param-name>
   
<param-value>true</param-value>
</init-param>
posted @ 2007-07-04 18:29 mashiguang 阅读(293) | 评论 (0)编辑 收藏

一.相关下载
   svn-1.4.0
   apache_2.0.55-win32-x86-no_ssl
   mod_auth_mysql-2.0.49-w32.zip
   site-1.0.4.zip(subclipse用于eclipse3.1.x)
   site-1.2.2.zip(subclipse用于eclipse3.2.x)
   TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi
  
二.安装配置
 首先安装apache,安装过程中会提示填写ServerName等,有的话就填,没有的话就写上IP,我填的是localhost.
 安装完apache,如果没有出错的话ApacheMonitor会出现在系统任务栏,并显示已运行状态.
 
 安装svn-1.4.0,安装过程中svn会检测到系统中已经运行apache,apache会在期间自动重新启动,
 ApacheMonitor的状态栏也会自动改为"Apache/2.0.55(Win32) SVN/1.4.0 DAV/2",说明svn安装成功.
 
 如果apache和svn没有自动集成成功,也可以手动修改apache httpd.conf文件如下3步:
  1.找到以下两行:
   #LoadModule dav_module modules/mod_dav.so
   #LoadModule dav_fs_module modules/mod_dav_fs.so

   改为:
   LoadModule dav_module modules/mod_dav.so
   #LoadModule dav_fs_module modules/mod_dav_fs.so(网上很多说法是把这一行也去掉#注释
,但好像并非必须去掉.)
  2.添加以下两行:
   LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
   LoadModule authz_svn_module 
"C:/Program Files/Subversion/bin/mod_authz_svn.so"
   # 
"C:/Program Files/Subversion"是Subversion的安装目录
  3.在httpd.conf的最后添加如下内容:
   <Location /svn>
      DAV svn
      SVNParentPath 
"E:/svndemo"
      # SVNParentPath指向svn资源库的上一级目录
      # SVNPath 
"E:/svndemo/repository"
      # SVNPath指向svn资源库目录
      # 使用SVNParentPath或SVNPath根据相应需求
      # 关于如何创建svn资源库目录在本文最后有补充
   </Location>
  现在已经可以通过http://localhost:8080/svn/repository/来访问资源库了.
三.使用apache身份验证
 使用apache身份验证就要使用apache的htpasswd.exe命令生成密码文件,示例如下:
  命令行下执行:htpasswd –c E:\svndemo\svn_auth_passwd plmm
  参数-c创建密码文件svn_auth_passwd并添加用户plmm,然后会提示输入密码.
  继续添加用户:htpasswd -m E:\svndemo\svn_auth_passwd klmm
  参数-m在已有的密码文件中添加新用户klmm,并用MD5加密密码.
  这样就创建了一个密码文件添加了两个用户.
 修改apache httpd.conf文件,添加如下内容:
  <Location /svn>
     DAV svn
     SVNParentPath 
"E:/svndemo"
    
     AuthType Basic
     AuthName 
"Subversion repository"
     Require valid-user
     AuthUserFile 
"E:/svndemo/svn_auth_passwd"
     # AuthUserFile指向密码文件
  </Location>
 现在通过http://localhost:8080/svn/repository/访问资源库需要输入用户名密码.
四.结合mysql实现身份验证
 1.解压上面下载的mod_auth_mysql-2.0.49-w32.zip文件,拷贝mod_auth_mysql.so文件至apache下modules目录.
 2.修改apache httpd.conf文件,添加如下内容:
   使apache加载mysql身份验证模块:
    LoadModule mysql_auth_module modules/mod_auth_mysql.so
   配置apache用来验证用户名密码的数据库表:
   <Location /svn>
      DAV svn
      SVNParentPath 
"E:/svndemo"
    
      AuthType Basic
      AuthName 
"Subversion repository"
      #AuthUserFile 
"E:/svndemo/svn_auth_passwd"
      Require valid-user
  
      AuthMySQLHost localhost
      AuthMySQLUser root
      # AuthMySQLUser 数据库登陆用户名
      # AuthMySQLPassword 
1234
      AuthMySQLDB svn
      # AuthMySQLDB 数据库名
      AuthMySQLUserTable users
      # AuthMySQLUserTable 数据库表名
      AuthMySQLNameField user_name
      # AuthMySQLNameField 用户名字段
      AuthMySQLPasswordField user_passwd
      # AuthMySQLPasswordField 密码字段
      # AuthMySQLMD5Passwords On
      AuthMySQLCryptedPasswords Off
   </Location>
 3.重启apache,现在通过http://localhost:8080/svn/repository/访问资源库需要输入mysql表中的用户名密码.
五.相关命令
 安装apache服务:apache -k install
 卸载apache服务:apache -k uninstall
 启动apache服务:apache -k start或net start Apache2
 停止apache服务:apache -k stop 或net stop Apache2
 
 svn创建资源库:svnadmin create E:\svndemo\repository
 启动资源库服务:svnserve -d -r E:\svndemo\repository
 
 拷贝my.ini到c:\winnt
 安装MySQL服务:mysqld-nt -install
 启动MySQL服务:net start mysql
 停止MySQL服务:net stop mysql
 卸载MySQL服务:mysqld-nt -remove
 
posted @ 2007-07-03 18:34 mashiguang 阅读(2119) | 评论 (0)编辑 收藏

仅列出标题
共2页: 上一页 1 2