1 jndi
配置数所源
<context:property-placeholder location="jdbc.properties"/>//引入资源文件
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.git.mm.mysql.Driver[${driverClassName}]"/>
<property name="url" value="jdbc:mysql://localhost:3306/database?useUnicode=true & characterEncoding=UTF-8[${url}]"/>
<property name="username" value="root[${username}]"/>
<property name="password" value="root[${password}]"/>
<!-- 连接池启动时的初始值勤 -->
<property name="initialSize" value="1[${initialSize}]"/>
<!-- 连接池的最大值 -->
<property name="maxActive" value="500[${maxActive}]"/>
<!-- 最大空闲值,当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="2[${maxIdle}]"/>
<!-- 最小空闲值,当连接池的连接数量少于阀值时,连接池就会申请一些连接,以免洪峰时来不及申请 -->
<property name="minIdle" value="1[${minIdle}]"/>
</bean>
2 bean
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://127.0.0.1:1433;databaseName=somken"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
<property name="mappingResources">
<list>
<value>org/somken/entity/UserInfo.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
3 读取hibernate.cfg.xml
<bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
posted @
2009-11-30 09:45 junly 阅读(300) |
评论 (0) |
编辑 收藏
摘要: IOC控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。
依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中。
-----------------------------------------------------------------------------
第一个项目
1 spring的依赖库
&n...
阅读全文
posted @
2009-11-30 08:58 junly 阅读(345) |
评论 (0) |
编辑 收藏
摘要: 静态代理
通过接口实现
动态代理
1 编写java代理类
public class SecurityHandler implements InvocationHandler {
private Object targetObject;
 ...
阅读全文
posted @
2009-11-30 08:36 junly 阅读(344) |
评论 (0) |
编辑 收藏
sql
package org.epet.dao.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.sun.java_cup.internal.internal_error;
public abstract class BaseDAO {
private static final String DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DATABASE_URL = "jdbc:sqlserver://localhost:1433;DatabaseName=epet";
private static final String DATABASE_USER = "sa";
private static final String DATABASE_PASSWORD = "accp";
/** *//**
* 返回连接
* @return
*/
public static Connection getConnection() {
Connection connection=null;
try {
Class.forName(DRIVER_CLASS);
connection = DriverManager.getConnection(DATABASE_URL,
DATABASE_USER, DATABASE_PASSWORD);
// Context tx=new InitialContext();
// DataSource ds=(DataSource)tx.lookup("java:comp/env/food");
// connection=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
/** *//**
* 查询
* @param sql
* @return
*/
public static ResultSet getDate(String sql){
Connection connection=getConnection();
ResultSet resultSet=null;
try {
PreparedStatement preparedStatement=connection.prepareStatement(sql);
resultSet=preparedStatement.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return resultSet;
}
public static int dele(String sql,int id){
int result=0;
Connection connection=getConnection();
try {
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setInt(1, id);
result=preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
mysql:
/**//*show databases;
create database aa;
use aa;
show tables;
select * from userinfo limit 1,2;
-----------------------------------------*/
public connection getConnection () throws SQLException{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.1:3306/somken(数据库名)";
return DriverManager.getConnection(url,"root","root");
}
posted @
2009-11-30 08:21 junly 阅读(516) |
评论 (0) |
编辑 收藏
1 自定义异常类 SystemException.java
public class SystemException extends RuntimeException{
//自定义key
private String key;
//自定义参数
private Object[] values;
//实现父类的构造方法
public SystemException() {
super();
}
public SystemException(String message, Throwable cause) {
super(message, cause);
}
public SystemException(String message) {
super(message);
}
public SystemException(Throwable cause) {
super(cause);
}
//自定义构造方法
public SystemException(String message, String key) {
super(message);
this.key=key;
}
//自定义构造方法,带一个参数
public SystemException(String message, String key,Object value) {
super(message);
this.key=key;
this.values=new Object[]{value};
}
//自定义构造方法,带多个参数
public SystemException(String message, String key,Object[] values) {
super(message);
this.key=key;
this.values=values;
}
//相应的get方法
public String getKey() {
return key;
}
public Object[] getValues() {
return values;
}
}
2 自定义异常处理器 SystemExceptionHandler.java
//作用:截获SystemException,并根据SystemException中的信息动态创建ActionMessage等这些错误信息,
将其存在request中
public class SystemExceptionHandler extends ExceptionHandler{
/**
* 处理SystemException异常
*/
@Override
public ActionForward execute(Exception ex,//抛出的异常
ExceptionConfig config,//struts-config.xml中的配置信息
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws ServletException {
ActionForward forward=null;
//创建ActionForward
if(config.getPath()!=null){
//有path属性,则根据path创建
forward=new ActionForward(config.getPath());
}else {
//没有path属性,则根据input属性创建
forward=mapping.getInputForward();
}
if(ex instanceof SystemException){
SystemException se=(SystemException)ex;
//key可有可无,所以取出key进行判断
String key=se.getKey();
ActionMessage error=null;
//如果自定义的key为空,用struts的
if(key==null){
//拿出error.default和message,创建ActionMessage对象
error=new ActionMessage(config.getKey(),se.getMessage());
}else {
//如果自定义的key有值
if(se.getValues()!=null){
error=new ActionMessage(key,se.getValues());
}else {
//如果自定义的key有值,则根据key创建ActionMessage对象
error=new ActionMessage(key);
}
}
//将这个ActionMessage放到request中。key为自定义的,error为ActionMessage对象
//forward是要转到什么地方,根据path属性创建。"request"为scope的一个,也可以
//用config.getScope()
this.storeException(request, key, error, forward, config.getScope());
return forward;
}
return super.execute(ex, config, mapping, form, request, response);
}
}
3 编写配置文件 struts-config.xml
<global-exceptions>
<exception key="error.default"
type="java.lang.Exception"
scope="request"
path="/common/exception.jsp"
<!-- 自定义的异常处理类 -->
handler="org.oa.common.SystemExceptionHandler"/>
</global-exceptions>
4 编写资源文件 ApplicationResources.properties
error.default={0}
error.org.del=Can't Del Orgnation,id is {0}!
5 业务代码
throw new org.oa.common.SystemException("存在子机构,不允许删除!","error.org.del",org.getOname());
posted @
2009-11-30 08:17 junly 阅读(494) |
评论 (0) |
编辑 收藏
框架
面向请求驱动:
struts1.x,struts2.x,WebWork
面向事件驱动的(JSF)
--------------------------------------
struts空字段测试
<input type="text" name="username"\>
ActionForm中有:
private String username;
private String password;
页面取得值:
<%=form.getUserName()%>//结果:
<%=form.getPassWord()%>//结果:null
${requestScope.userActionForm.username}//结果:
${requestScope.userActionForm.password}//结果:
----------------------------------------------------
java国际化
1 了解缺省Locale是由操作系统决定的,Locale是由语言和国家代码组成
2 国际化资源文件是由baseName+locale组成,一般在src目录下就可以了,如:MessageBundle_en_US.properties
baseName是任意合法的文件名
3 native2ascii命令的位置和用法
* 位置:java_home/bin
* 使用native2ascii.exe o.properties MessagesBundle_zh_CN.properties
* DOS
D:\>native2ascii -encoding gb2312 aaa.txt bbb.txt
------------------------------------------------------------------
struts国际化
1 在struts-config.xml文件中加入:<message-resources parameter="MessageResources"/>
注意:文件默认放在根src下,如入在其他目录下.
如:res目录下用"."连接<message-resources parameter="res.MessageResources"/>
2 提供不同版本的国际化文件,中文需要采用native2ascii转换成unicode
MessageResources_en_US.properties文件
user.login.success={0},Login Success
user.title=User Login
user.name=User Name
user.password=Password
user.button.login=Login
MessageResources_zh_CN.properties文件
user.login.success={0},\u767b\u5f55\u6210\u529f
user.title=\u7528\u6237\u767b\u5f55
user.name=\u7528\u6237\
user.password=\u5bc6\u7801
user.button.login=\u767b\u5f55
3 在jsp中采用<bean:message>标签读取国际化文本
<titel><bean:message key="user.title"/></title>
<bean:message key="user.name"/>:<input type="text" name="username"/>
<bean:message key="user.password"/>:<input type="password" name="password"/>
<input type="submit" value="<bean:message key="user.name"/>"/>
4 动态设置locale
Locale currentLocale=Locale.getDefalut();得到Locale
currentLocale=new Loale("zh","CN");//建立Locale
currentLocale=new Loale("en","US");//建立Locale
request.getSession().setAttribute(Globals.LOCALE_KEY,currentLocale);
this.setLocale(request,currentLocale);//效果同上
5 动态设置message
* 创建messages集合
ActionMessages messages=new ActionMessages();
* 创建国际化消息文本
public ActionMessage(String key,Object value)
ActionMessage message=new ActionMessage("user.login.success",username);//只不清一个参数
//ActionMessage message=new ActionMessage("user.login.success",new Object[]{username});//多个参数
messages.add("loginSuccess1",message);
* 传递国际化消息文本
this.saveMessages(request,messages);
错误信息传递使用:this.saveErrors(request,messages);
* 页面输出
通过<html:message>标签显示消息(可以显示普通消息和错误消息)
通过<html:errors>标签显示消息(只能显示错误消息)
<html:messages id="msg" message="true">//html:messages标记与ActionMessages messages集合对应
<bean:write name="msg"/>
<html:messages>
<html:messages id="msg" message="true" property="loginSuccess1">
<bean:write name="msg"/>
<html:messages>
-------------------------------------------------------------------
JSTL国际化
<fmt:setLocale vlaue="${header['accept-language']}"/>设置locale
<fmt:setBundle basename="res.MessageResources"/>//设置资源文件
<fmt:message key="user.username"/>
---------------------------------------------------------------------
struts的路径与模式匹配
posted @
2009-11-30 08:16 junly 阅读(344) |
评论 (0) |
编辑 收藏
1 建立页面
<form action="" name="form1" enctype="multipart/form-data" method="post">
2 建ActionForm类
private String title;
private FormFile file;//必须用apache的FormFile类(org.apache.struts.upload.FormFile)
3 建立Action类
UplodaActionForm uaf=(UplodaActionForm)form;
Systyem.out.println("title:"+uaf.getTitle());
FormFile file=uaf.getFile();
if(file!=null)
{
System.out.println("fileName:"+file.getFileName());
FileOutputStream fos=new FileOutputStream("c:\\"+file.getFileName());
fos.write(file.getFileData());
fos.flush();
fos.close();
}
return mapping.findForward("sessucc");
4 配置ActionForm和Action
<controller MaxFileSize="10M"></controller>该属性可以配置上传文件的大小等相关信息
posted @
2009-11-30 08:16 junly 阅读(416) |
评论 (0) |
编辑 收藏
1 ActionForm中的validate方法验证
1)重写ActionForm中的validate方法
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ActionErrors errors=new ActionErrors ();
if(username==null || username.length()<0){
errors.add("unameisnull",new ActionMessgae("error.validate.unull"));
}
return errors;
}
2)资源文件ApplicationResources.properties
error.validate.unull=usernaem is null
3)在config.xml的<action-mappings>中<action>加入validate="true"属性
4)页面标签
<html:errors/>
----------------------------------------------------
validate验证框架
1 创建form继承ValidatorForm或用DynaValidatorForm
2 在WEB-INF下创建validator-rules.xml和validation.xml
3 在src下创建资源文件ApplicationResources.properties
4 要struts-config.xml中配
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
5 编写validation.xml文件
<formset>
<form name="userForm">
<field property="username" depends="required">
<arg key="lable.username"/>
</field>
</form>
</formset>
6 页面使用<html:errors/>标签
posted @
2009-11-30 08:15 junly 阅读(478) |
评论 (0) |
编辑 收藏
struts标签的使用和配置
配置:
1 在struts-config.xml文件中加入(可以到示例中的struts-config.xml文件中复制)
<message-resources parameter="MessageResources" />
2 在示例的src下拷贝MessageResources.properties文件到项目src下
3 在页面引入就可使用
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
说明:第1,2步为struts的国际化资源束文件引入,第3为标签引入
-----------------------------------------------------------------------------
Bean标记
bean:define
从已有的变量或者变量的属性来定义一个新的变量。
<bean:define id="新定义的变量名" scope="原变量的scope" name="原变量名" toScope="新定义变量的scope"></bean:define>
<bean:define id="新定义的变量名" scope="原变量的scope" name="原变量名" property="原变量的属性名" toScope="新定义变量的scope"></bean:define>
bean:write
<bean:write scope="变量的scope" name="变量名" property="变量的属性名" filter="是否按html格式输出(默认true为文本输出)" format="数字(###,###.0000)日期(yyyy-MM-dd HH:mm:ss)"/>
结构数据中多重属性可用"."作导航取出来
bean:message
相当于jstl中<fmt:message>(国际化标签)
1 定义资源文件
com.itcast.ApplicationResources.properties
com.itcast.ApplicationResources_zh_CN.properties
2 在struts-config中添加:
<message-resources parameter="ApplicationResources" key="myKey" />
3 页面中使用
<bean:message bundle="myKey" key="userName"/>
<bean:message bundle="myKey" key="password"/>
bean:size标签
--------------------------------------------------------------
logic标记
logic:empty/login:notEmpty 判断对象是否为空
<logic:empty name="对象名" property="属性名" scope="对象的scope">
为空<br>
</logic:empty>
logic:notEmpty 判断对象是否不为空
<logic:notEmpty name="对象名" property="属性名" scope="对象的scope">
不为空<br>
</logic:notEmpty>
logic:present 判断对象是否存在(用方同上)
logic:notPresent
----------------------------------------------||
例子:
request.setAtrribute("attr1",null);
request.setAtrribute("attr2","");
request.setAtrribute("attr3",new ArrayList());
<logic:empty name="attr1">
11<br>
</logic:empty>
<logic:notEmpty name="attr1">
12<br>
</logic:notEmpty>
<logic:present name="attr1">
13<br>
</logic:present>
<logic:notPresent name="attr1">
14<br>
</logic:notPresent>
<logic:empty name="attr2">
21<br>
</logic:empty>
<logic:notEmpty name="attr2">
22<br>
</logic:notEmpty>
<logic:present name="attr2">
23<br>
</logic:present>
<logic:notPresent name="attr2">
24<br>
</logic:notPresent>
<logic:empty name="attr3">
31<br>
</logic:empty>
<logic:notEmpty name="attr3">
32<br>
</logic:notEmpty>
<logic:present name="attr3">
33<br>
</logic:present>
<logic:notPresent name="attr3">
34<br>
</logic:notPresent>
结果:
11空
14不存在
21空
23存在
31空
33存在
-----------------------------------------||
html:equal/html:notEqual
html:greaterEqual大于等于
html:greaterThan大于
html:lessEqual小于等于
html:lessThan小于
-----------------------------------------||
logic:iterate(循环)
name:对应的bean,是一个集合类型
property:对应的集合类型的属性
scope:变量的scope
id:临时变量名
offset:循环起始位置
indexId:集合中当前无素的下标
length:控制长度
单循环
<logic:iterate id="username" scope="request" name="对应的bean,是一个集合类型">
output every username:${username }<br>
</logic:iterate>
双循环
<logic:iterate id="user" scope="request" name="list" offset="2" indexId="i">
${user.username }<br>
<logic:iterate id="love" name="user" property="loves">
${love }
</logic:iterate><br>
</logic:iterate><br>
logic:
tiles标记
----------------------------------------------------------------
html标签
<html:form action="/login" method="post">
username:<html:text property="username" value="123"/>
password:<html:password property="password"/>
sex:<html:radio property="sex" value="0" />男
<html:radio property="sex" value="1" />女
likes:<html:checkbox property="0" value="0">吃饭</html:checkbox>
<html:checkbox property="0" value="1">吃饭</html:checkbox>
xueli:<html:select property="xueli">
<html:option value="0">小学</html:option>
<html:option value="1">小学</html:option>
<html:optionsCollection property="qxlist" label="qx" value="qxid"/>
//<html:optionsCollection name="qxlist" label="qx" value="qxid"/>
1.
</html:select>
<html:submit value="提交"/>
</html:form>
posted @
2009-11-30 08:14 junly 阅读(674) |
评论 (0) |
编辑 收藏
struts validator验证框架
1 配置:
* 加入国际化配置在struts-config.xml文件中,如:
<message-resources parameter="MessageResources"/>
* 提供国际化资源文件
* 引入validator插件在struts-config.xml文件中,如:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set=property
property="pathnames"
value="WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
/>
</plug-in>
* 提供validator.xml和validator_rules.xml文件,将此文件拷贝到WEB-INF下
2 validator服务器验证
* 配置validation.xml文件
3 validator客户验证(javascript)
* 配置validation.xml文件
* 在jsp页面中包含<html:javascript>
* 对需要验证的表单定义onsubmit事件,其中事件名称为validate+ActionForm的名称,如:validateLogin
posted @
2009-11-30 08:13 junly 阅读(303) |
评论 (0) |
编辑 收藏