html学习地址

http://www.enet.com.cn/eschool/zhuanti/easyhtml/

posted @ 2012-11-26 16:19 youngturk 阅读(294) | 评论 (0)编辑 收藏

服务器端回复邮件功能(javamail发送邮件的简单实例)

     摘要: 为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。 第一个类:MailSenderInfo.java package com.util.mail;   /** *//**   * 发送邮件需要使用的基本信息 *aut...  阅读全文

posted @ 2012-11-23 12:39 youngturk 阅读(1795) | 评论 (1)编辑 收藏

eclipse 使用tomcat需要首先安装其插件,然后下载服务器,最后部署, Eclipse Tomcat插件的配置, 及 Tomcat 的配置

首先下载 对应 eclipse 版本的 tomcat 插件版本,(这里要注意: Tomcat 插件是Tomcat 插件,Tomcat 是 Tomcat, 两者不能混淆!)

下载地址:http://www.eclipsetotale.com/tomcatPlugin.html

然后将得到的压缩包解压,放入 eclipse 的 plugins 目录中重启 eclipse, Tomcat 插件安装成功!

当然安装成功不并代表能使用,这里还要配置 Tomcat, 才能正常使用 Tomcat 插件,

配置过程:

首先下载当前 Eclipse 能使用的 Tomcat 版本,

下载地址:http://tomcat.apache.org/ 

然后解压到指定的目录,然后配置

Eclipse - toolsbar  ->  Window  ->  Prefences  ->  Tomcat  -> 指向刚才 Tomcat 解压的目录,

到此配置完成,使用 Tomcat 插件可以启动、关闭 Tomcat.

使用 Eclipse 建立 Dynamic Web Project 如:HelloProject

右键 Run As –>  Run On Server  ->  如图:

HelloProject

弹出如图界面配置:

HelloProject.ConfigSever

配置完成,会在看到这样效果项目目录下会有 Servers 一个目录,是专属 HelloProject 项目的 Tomcat 配置,

还会在控制台那块看到 Servers 如图:

finish

这时已经可以使用 Tomcat , Start、Stop、Restart 等.

重点要说的,也是下边要讲的是:

对于上图红圈中的 server.xml 和 Tomcat/conf/server.xml  文件,

我们说过了红圈中的 server.xml 是针对 HelloProject 生成的配置文件,当然多个项目也可以共用 一个 Servers 目录下的配置!这个暂时先不讲。

而 Tomcat/conf/server.xml  是 Tomcat 本身所有,有更大的通用性。

为了便于区分我们把红圈中的 server.xml 叫 project.server.xml, 把 Tomcat/conf/server.xml 叫 tomcat.server.xml。

本次主要讲 server.xml 中的 <Context … />

来看 project.server.xml 中的  <Context docBase="HelloProject" path="/HelloProject" reloadable="true" source="org.eclipse.jst.jee.server:HelloProject"/>

docBase 指的是 相对 Servers 目录 平级的 HelloProject 目录 即项目目录,如图:

dir 

path 指的是 网站访问路径,如:http://locahost:8080/HelloProject

像这样生成的这个 project.server.xml 我们一般不要动.

而对于 tomcat.server.xml 中 <Content … />

我们看这两配置都是对的:

<!--<Context path="/HP" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject\WebContent" workDir=”D:\worDir” /> -->
      <Context path="/HelloProject" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" workDir=”C:\workDir” />

   <Context path="/HPT" reloadable="true" docBase="C:\Documents and Settings\Administrator\workspace\HelloProject" workDir=”C:\workDir” />

网站访问路径分别是

http://localhost:8080/HP

http://localhost:8080/HelloProject

对于上边的 HPT 我们可以这样访问:

http://localhost:8080/HPT/WebContent

这样可以看到 如果是 docBase 指到了 WebContent 下则可用自己定义的 path,

如果 docBase 指到的是项目目录则必须使用项目原来的 path, 或者路径访问做下修改

最后的 workDir 是部署后 jsp 发布的目录,可以自己随便指定,或不指定.

posted @ 2012-11-22 21:43 youngturk 阅读(2433) | 评论 (0)编辑 收藏

关于struts2中action传到参数问题

第一种方式:
<action name="adminEnterpriceculturesave" class="adminEnterpriceculturesaveAction" method="save">
          <result name="success" type="redirectAction">/admin/adminEnterpriceculturelist.action?enterpriceculture.enterpricetype=A</result>
尽管不好看格式,但是却很容易懂.
第一种方式的/admin不是命名空间,暂时我还没时间去实践他,现在有点忙..因为我的命名空间是这样的

<struts>

    <package name="enterpriceculture" namespace="/" extends="struts-default">  
        <action name="adminEnterpriceculturesave" class="adminEnterpriceculturesaveAction" method="save">
          <result name="success" type="redirectAction">/admin/adminEnterpriceculturelist.action?enterpriceculture.enterpricetype=A</result>
          <!-- <param name="enterpriceculture.enterpricetype">A</param>
          <result name="success" type="chain">
             <param name="actionName">adminEnterpriceculturelist</param>
             <param name="namespace">/</param>
          </result>-->
      <!-- <result name="success">/admin/Enterpriceculture_List.jsp</result>-->
      </action>

</package>
</struts>
第二种方式:
<param name="enterpriceculture.enterpricetype">A</param>
          <result name="success" type="chain">
             <param name="actionName">adminEnterpriceculturelist</param>
             <param name="namespace">/</param>
          </result>
去掉命名空间因为是在本文件的这个adminEnterpriceculturelist进行跳转,所以理解起来容易很多..


综合找到网上有关资料:如下:
chain类型 如下:

   <action name="getTemplate" class="tabAction" method="getTemplateByParas">
         <param name="objectId">${objectId}</param>
        <param name="param1">${param1}</param>
        <param name="items">${items}</param>
       
        <result name="success" type="chain">
         <param name="actionName">${actionName}</param>
         <param name="namespace">${namespace}</param>
        </result>
        
  </action>

       这样就可以实现传参了,这里的参数所有对象都可以传,包括map,List,set 等集合也可以。同时这里还需要注意一个小问题,chain这种类型是XWork中的result类型,它对应的类是:
       com.opensymphony.xwork2.ActionChainResult .   这里需要注意一个小问题, actionName,namespace都是他的属性,所以对于传过的URL参数要做一下处理。
       actionName必须是Action的名称,namespace是他命名空间,必须以"/"开头,如:
       /tab/getTemplate.action       则 namespace="/tab"   ;  actionName=”getTemplate“; 

posted @ 2012-11-22 21:26 youngturk 阅读(483) | 评论 (0)编辑 收藏

spring中的 继承HibernateDaosupport方法

上述的getHibernateTemplate方法中的update方法跟数据库设置主键有关,能根据主键更新..个人理解

posted @ 2012-11-22 08:59 youngturk 阅读(266) | 评论 (0)编辑 收藏

将html语言输出到页面转换为网页行式输出方法 escape属性

在struts2中 用escape属性 可以直接将html语言,输出成为网页形式去掉了其中的标记..

posted @ 2012-11-15 15:06 youngturk 阅读(743) | 评论 (3)编辑 收藏

ORACLE编程,存储过程,自学笔记(备份)转

--创建过程名称
--create procedure 存储过程名字 is begin
--create or replace procedure  如果有就替换掉
----------------------------------------------
案例1:
--创建一个表
create table mytest(name varchar2(30),passwd varchar2(30));
--创建过程
create procedure sq_pro1 is
begin
--执行部分
insert into mytest values('zgx','888666');
end;

-- / 斜线回车


----------------------------------------------
如何查看错误信息:
show error  回车

--调用存储过程
1.exec 过程名(参数1,2....);
2.call 过程名(参数1,2....);
---------------------------------------------------
set serveroutput on;打开输出选项
set serveroutput off;关闭输出选项
dbms_  是包名的意思!
案例2:
dbms_output.put_line('helloWorld'); 
-----------------
declare
 v_ename varchar2(5);--定义字符串变量
begin
 --into v_ename意思:把查询出来数据 赋值给 v_ename;&no是执行的时候会弹出输入框
 select ename into v_ename from emp where empno=&no;
 --||代表 连接符号;
 dbms_output.put_line('用户名是:'||v_ename);
end;
-----------
案例3:
declare
 v_ename varchar2(5);--定义字符串变量
 v_sal number(7,2);--定义字符串变量
begin
 --如果是多个字段,用逗号隔开,顺序必须一样!!
 select ename,sal into v_ename,v_sal from emp where empno=&no;
 --||代表 连接符号;
 dbms_output.put_line('用户名是:'||v_ename||'工资:'||v_sal);
end;
---------------------
--异常的捕获
exception
when no_data_found then --如果出现no_data_found异常就执行下一句
dbms_output.put_line('输入有误!');
end;
------------
过程:
案例4:
创建带输入参数的过程;
create procedure sp_pro3(spNma varchar2,newSal number) is
begin
 update emp set sal=newSal where ename=spName;
end;
------------
函数:
函数用于返回特定的数据,当建立函数时,在函数头部要求有return语句;
案例5:
--输入雇员姓名,返回该雇员的年薪
--返回一个number类型;返回值名字是yearSal,类型是number(7,2);
create function sp_fun1(spName varchar2) return number is yearSal number(7,2);
begin
--执行部分
select sal*12+nvl(comm,0)*12 into yearSal from emp where enamee=spName;
return yearSal;
end;
调用函数中
--随便定义一个值
var abc number;
--掉用函数把结果赋值给 abc
call sp_fun1()'SCOTT' into:abc;
-------------

创建包:
--创建了一个包 sp_package
--声明该包里有一个过程update_sal
--生命该包里有一个函数annual_income
create package sp_package is
 procedure update_sal(name,varchar2,newsal number);
 function annual_income(name varchar2, return number;
end;
给包sp_package 实现包体--把定义包中的 过程和函数实现;
create package body sp_package is
procedure update_sal(name,varchar2,newsal number) is
begin
 update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number isannual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;
return annual_salary;
end;
end;
--------------
调用包中的过程或函数
exec sp_package.update_sal('SCOTT','120');
---------------------
触发器
触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的时间和触发的操作,常用触发包括insert,pudate,delete语句,而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。
触发器是非常有用的,可维护数据库的安全和一致性。
---------
定义并使用变量
包括:
1.标量类型(scalar)
2.符合类型()

---------
标量(scalar)-常用类型
语法:
identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constant:指定常量。需要指定它的初始值,且其值是不能改变的
datatype:数据类型
not null: 指定变量值不能为null
:= 给变量或是常量指定初始值
default 用于指定初始值
expr:指定初始值的pl/sql表达式,文本值、其他变量、函数等
------------
标量定义的案例
1.定义一个变长字符串
v_ename varchar2(10)
2.定义一个小数 范围 -9999.99~9999.99
v_sal number(6,2)
3.定义一个小数并给一个初始值为5.4 :=pl/sql的赋值号
v_sal2 number(6,2):=5.4
4.定义一个日期类型的数据
v_hiredate date;
5.定义一个布尔变量,不能为空,初始值为false
v_valid boolean not null default false;
---------------
如何使用标量
   定义好变量后,就可以使用这些变量。这里需要说明的是pl/sql块为变量赋值不同于其他的编程语言,需要在等号前面加冒号(:=)

下面以输入员工号,显示雇员名称、工资、个人所得税(税率为0.03为例)。说明变量的使用,看看如何编写:

declare
c_tax_rate number(3.2):=0.03; --定义赋值
--用户名
v_ename varchar2(5);
v_sal number(7,2);
v_tax_sal number()7,2;
begin
--执行
select ename,sal into v_ename,v_sal from emp where empno=$no;
--计算所得税
v_tax_sal:=v_sal*c_tax_rate;
--输出
dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||'所得税:'||v_tax_sal);
end;
-----
标量(scalar)--使用%type类型
 对于上面的pl/sql块有一个问题:
 就是如果员工的姓名超过了5字符的话,就会有错误,为了降低pl/sql程序的维护工作量,可以使用%type属性定义变量,这样他会按照数据库列来确定你定义的变量的类型和长度。
看看怎么使用。
语法: 标识符名 表名.列名%type;

 declare
  v_ename emp.ename%type; --定义变量v_ename 和emp表中列名ename大小类型保持一致;
---
复合变量(composite)
用于存放多个值的变量。
包括:
1.pl/sql记录
2.pl/sql表
---------------
复合类型-pl/sql记录
  类似与高级语言的结构体,需要注意的是,当引用pl/sql记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)
如下:
declare
--定义一个pl/sql记录类型是:emp_record_type,类型包括三个数据name,salary,title;该类型中可以存放三个类型的数据;
type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title  emp.job%type);

--定义了一个sp_record变量,类型是emp_record_type
sp_record emp_record_type;

begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_record.name); --显示定义emp_record_type类型中 name的值;
end;
end;
----------------
复合类型--pl/sql表
 相当于高级语言中的数组。但是需要注意的是在高级语言中数组的下标不能为负数,而pl/sql是可以为负数的,并且表元素的下标没有限制。实例如下:
declare
--定义了一个pl/sql表类型sp_table_type,该类型是用于存放emp.ename%type类型的数组
--index by binary_integer标识下标是整数
type sp_table_type is table of emp.ename%type index by binary_integer;
--定义了一个sp_table变量,变量类型是sp_table_type
sp_table sp_table_type;
begin
--把查询出来的ename放到 table(0)下标为0的数据
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_lin('员工名:'||sp_table(0)); --要和存放下标一样
end;
说明:
sp_table_type  是pl/sql表类型
emp.ename%type 指定了表的元素的类型和长度
sp_table       为pl/sql表变量
sp_table(0)    表示下标为0的
---------------
参照变量
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使用得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量和对象类型变量两种参照变量类型
游标变量用的最多
-----------
参照变量---游标变量
使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时需要指定select语句,这样一个游标就与一个select语句结合了。
如下
1.请使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资。
declare
 --定义游标类型
 type sp_emp_cursor is ref cursor;
 --定义一个游标变量
 test_cursor sp_emp_cursor;
 --定义变量
 v_ename emp。ename%type;
 v_sal emp。sal%type;
begin
--执行
--打开一个游标test_cursor和一个select结合
open test_cursor for select ename,sal from emp where deptno=&no;
--循环取出
loop
 --fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去;
 fetch test_cursor into v_ename,v_sal;
 --判断是否test_cursor为空
 exit when test_cursor%notfound;
 dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal);
end loop;
end;


2.在1。基础上,如果某个员工的工资低于200元,就增加100元。
declare
 --定义游标类型
 type sp_emp_cursor is ref cursor;
 --定义一个游标变量
 test_cursor sp_emp_cursor;
 --定义变量
 v_ename emp。ename%type;
 v_sal emp。sal%type;
begin
--执行
--打开一个游标test_cursor和一个select结合
open test_cursor for select ename,sal from emp where deptno=&no;

--循环取出
loop
 --fetch就是取出。取出test_cursor中的数据放到 v_ename,v_sal里面去;
 fetch test_cursor into v_ename,v_sal;
 if v_sal<200 then
 update emp set sal=sal+100 where ename=v_ename;
 end if;
 --判断是否test_cursor为空
 exit when test_cursor%notfound;
 dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal);
end loop;
end;

 

 

----------
条件分支语句
if--then,
if--then--else,
if--then--elsif--else

----
循环语句
loop --end loop;至少会执行一次。
create or replace procedure sp_pro6() is
--定义赋值
v_num number:=1;
begin
loop
 insert into users1 values(v_num,spName);
 --判断是否要退出循环
 exit when v_num=10;
 --自增
 v_num:=v_num+1;
end loop;
end;


-------------
循环语句-while先判断后执行
create or replace procedure sp_pro6() is
--定义赋值
v_num number:=11;
begin
while v_num<=20 loop
 insert into users1 values(v_num,spName);
 v_num:=v_num+1;
end loop;
end;
------------------
循环语句--for循环(不建议)
begin
 for i in reverse 1。。10 loop
 insert into users1 values(i,'aaa');
 end loop;
end;
-------
循环语句--goto,null循环(不建议)
declare
 i int:=1;
begin
 loop
 dbms_output.put_line('输出i='||i);
 if i=10 then
 goto end_loop;
 end if;
 i:=i+1;
 end loop;
 <<end_loop>>  --到i到10后直接跳到该标记
dbms_output.put_line('循环结束');
end;
---------------------------
无返回值的存储过程(有输入参数)
 
create table book(
 bookId number;
 bookName varchar2(100);
 publishHouse varchar2(50);
);
--编写过程
--in表示这是一个输入参数,不写默认是in
--out 表示一个输出参数
create or replace procedure sp_pro7(spBookId in number,spbookName in varchar2,sppublishHouse in varchar2) is
begin
 insert into book values(spBookId,spbookName,sppublishHouse);
end;

---------------
有返回值的存储过程(有输入和输出参数)

create or replace procedure sp_pro8(ename in number,spName out varchar2) is
begin
 --spName自动返回 因为他是out
 select ename into spName from emp where empno=spno;
end;
----------------
有返回值是集合数组的存储过程(有输入和输出参数)
1.建立一个包
--创建包 里面定义一个游标类型;
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
2.建立存储过程。
create or replace procedure sp_pro8(spNo in number,p_cursor out testpackage.test_cursor) is
begin
 --spName自动返回 因为他是out
 open p_cursor for select * from emp where deptno=spNo;
end;

------------
oracle的分页  rn是别名
select t1.*,rownum rn from(select * from emp) t1;//多加一个列记录个数
select t1.*,rownum rn from(select * from emp) t1 where rownum<10;
select * from (select t1.*,rownum rn from(select * from emp) t1 where rownum<10) where rn>=6;

编写oracle的分页
--建立一个包
create or replace package testpackage as
type test_cursor is ref cursor;
end testpackage;
--建立存储过程
create or replace procedure fenye
(tableName in varchar2,
pageSize in number, --一页显示几条记录
pageNow in number,  --显示哪一页
myrows out number, --总记录数
myPageCount out number,--总页数
p_cursor out testpackage.test_cursor --返回的记录集
) is
--定义部分
--定义sql语句 字符串
v_sql varchar2(1000);
--定义两个整数
v_begin number:=(pageNow-1)*pageSize+1;
v_end number:=pageNow*pageSize;
begin
--执行部分
v_sql:='select * from (select t1.*,rownum rn from(select * from '||tableName||') t1 where rownum<10'||?||') where rn>='||?||';';
--把游标和sql语句关联起来
open p_cursor for v_sql;

--计算myrows
v_sql:='select count(*) from '||tableName||'';
--执行sql,并把返回值,赋值给myrows;
execute immediate v_sql int myrows;
--计算myPagecount
if mod(myrows,pageSize)=0 then --mod()取余数
myPageCount:=myrows/pageSize;
else
myPageCount:=myrows/pagesize+1;
end if;

--关闭游标
--close p_cursor;
end;


------------------------
例外的分类
1.预定义例外用于处理常见的oracle错误
2.非预定义例外用于处理预定义例外不能处理的例外  6.53
3.自定义例外用于处理与oracle错误无关的其他情况

 

 


------------------------------------------------
-----------------------------------------------
-------JAVA中-调用无返回值的存储过程-----------------
try{
 Class.forName();
 Connection ct=DriverManager.getConnerction();
 //调用无返回值存储过程
 CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?,?)}") // ?代表存储过程参数
 cs.setIn(1,10);
 cs.setString(2,'java调用存储过程');
 cs.setString(3,'人民出版社');
 //执行
 cs.execute();
 
}catch(Exception e)
{
 e.printStackTrace();
}finally{
 cs.close();
 ct.close();
}

------------------------------------------------
-----------------------------------------------
------JAVA中--调用有回值的存储过程-----------------
try{
 Class.forName();
 Connection ct=DriverManager.getConnerction();
 //调用有返回值存储过程
 CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入,第二是输出
 //第一个?输入参数
 cs.setIn(1,10);
 //给第二个?输出值赋值
 cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //
 //执行
 cs.execute();
 //取出返回值,
 String name=cs。getString(2);
 System.out。println("名称是:"+name);
}catch(Exception e)
{
 e.printStackTrace();
}finally{
 cs.close();
 ct.close();
}

------------------------------------------------
-----------------------------------------------
-------JAVA中-调用有回值是多个 数组2011-12-5的存储过程-----------------
try{
 Class.forName();
 Connection ct=DriverManager.getConnerction();
 //调用有返回值存储过程
 CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入,第二是输出
 //第一个?输入参数
 cs.setIn(1,10);
 //给第二个?输出值赋值
 cs.registerOutParameter(2,oracle.jdbc.OracleTypes.cursor); //类型是cursor游标
 //执行
 cs.execute();
 //取出返回值(结果集)
 ReaultSet rs=(ResultSet)cs.getObject(2); //2是第二?
 while(rs.next())
 {
  int =rs。getInt(1);
  String name=rs。getString(2);
  System.out。println("名称是:"+name);
 
 }

}catch(Exception e)
{
 e.printStackTrace();
}finally{
 cs.close();
 ct.close();
}
------------------------------------------------
-----------------------------------------------
------JAVA中--调用有回值的存储过程-----------------
try{
 Class.forName();
 Connection ct=DriverManager.getConnerction();
 //调用有返回值存储过程
 CallableStatement cs=ct.prepareCall("{call 存储过程名称(?,?)}") // ?代表存储过程参数 第一是输入,第二是输出
 //第一个?输入参数
 cs.setIn(1,10);
 //给第二个?输出值赋值
 cs.registerOutParameter(2,oracle.jdbc.OracleTypes.VARCHAR); //
 //执行
 cs.execute();
 //取出返回值,
 String name=cs。getString(2);
 System.out。println("名称是:"+name);
}catch(Exception e)
{
 e.printStackTrace();
}finally{
 cs.close();
 ct.close();
}

------------------------------------------------
-----------------------------------------------
-------JAVA中-测试分页调用存储过程-----------------
try{
 Class.forName();
 Connection ct=DriverManager.getConnerction();
 //调用有返回值存储过程
 CallableStatement cs=ct.prepareCall("{call 分页存储过程名称(?,?,?,?,?,?)}") // ?代表存储过程参数 第一是输入,第二是输出
 //?输入参数
 cs.setString(1,'表名'); //表名
 cs.setInt(2,5); //一页显示几条记录
 cs.setInt(3,1); //显示第几页
 //?输出参数
 //注册总记录数
 cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
 //注册总页数
 cs.registerOutParameter(4,oracle.jdbc.OracleTypes.INTEGER);
 //注册返回的结果集
 cs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR); //类型是cursor游标

 
 //执行
 cs.execute();
 //取出总记录数
 int rowNum=cs.getInt(4);//4表示参数中第四个?
 //总页数
 int pageCount=cs.getInt(5);
 //返回的记录结果
 ReaultSet rs=(ResultSet)cs.getObject(6);
 while(rs.next())
 {
  int =rs。getInt(1);
  String name=rs。getString(2);
  System.out。println("名称是:"+name);
 
 }

}catch(Exception e)
{
 e.printStackTrace();
}finally{
 cs.close();
 ct.close();
}

A . 嵌套表

1. 声明数组类型
       create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型

2. 创建存储过程
         -- 该例子存储过程是在包中创建的,包名 arraydemo
         procedure testArray(resNumber in tab_array,procResult out tab_array) is
         begin
             procResult := new tab_array();
             for i in 1..resNumber.Count loop
                procResult.EXTEND;
                procResult(i) := resNumber(i) || 'lucifer' || i;
             end loop;
         end;

3. Java调用代码
    //必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接
    OracleConnection conn = null;
    OracleCallableStatement stmt = null;
    String[] param = { "1001", "1002", "1006" };
    stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}");
    // 类型名必须大写
    ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn);
    stmt.setARRAY(1, new ARRAY(descriptor,conn,param));
    stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY");
    stmt.execute();
  
    ARRAY array = stmt.getARRAY(2);
    Datum[] data = array.getOracleArray();
    for (int i = 0; i < data.length; i++) {
        System.out.println(i + " : " + new String(data.shareBytes()));
    }
4 . 注意的问题及尚未解决的问题
    抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下
    待解决问题:
    a) 如何调用在包声明的自定义类型
    b) 比较不同声明类型的优缺点,及使用场合
    嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253

B . 索引表
C . 内置数组
D . 游标方式

posted @ 2012-11-15 11:28 youngturk 阅读(836) | 评论 (0)编辑 收藏

FCKEditor2.6.3配合Java的使用步骤 (后台文本编辑器)

FCKEditor是一个很好的用于Web页面中的格式化文本编译控件。现在越来越多的论坛的发帖页面中更多的使用了这个控件,我们这里将如何在基于Java的web开发中使用FCKEditor控件的步骤提供给大家,为的是让更多的java开发者花费更少的时间去做重复劳动。

首先去下载FCKEditor2.6.3(当然本文编写的时候,这个是最新版本,也许你现在看到的已经是更新的版本了,那么可能某些配置办法已经变化了,本文也将跟进以保持最新动态,相反如果你使用的旧版本的控件,其配置和使用方法也有所区别),下载地址:http://www.fckeditor.net/download,我们需要下载两个文件
 
第一是FCKeditor_2.6.3.zip,就是FCKEditor的控件;

第二是FCKeditor.Java(fckeditor-java-2.4.1-bin.zip),就是在Java代码中使用FCKEditor的相关工具类;

有了这两个文件,使用FCKEditor的基础就具备了,接下来我们要做两件事情,一件事情就是要把FCKEditor控件放到web项目中,这个控件是用于网页的,所以其代码是使用JavaScript脚本编写的,需要和web网页一起被下载的浏览器上才能执行,第二件事情就是这个网页上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?FCKEditor自身提供了相关的java工具,就是我们下载的第二个文件。因此我们要做的第二件事情就是在服务端配置java工具,使得FCKEditor控件在处理上传图片时能够正确工作。

接下来我们就开始对配置FCKEditor控件进行两项工作:

第一:解压缩FCKeditor_2.6.3.zip,在其中我们能找到一个文件夹叫fckeditor,那么将这个文件夹整个复制到你的web应用的根目录下,就是存放jsp页面的地方。

第二:解压缩fckeditor-java-2.4.1-bin.zip,将这样几个jar文件复制到web应用的WEB-INF\lib目录中(commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,java-core-2.4.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2.jar),其中最后一个文件在这个zip包中可能不存在,那么你可以去这个链接地址下载一个文件叫fckeditor-java-2.4.1-bin.zip (下载地址:http://sourceforge.net/project/showfiles.php?group_id=75348&package_id=129511),在这个war文件中的lib中存在上述的5个jar文件,其实在war中也包含了FCKEditor控件的内容,也就是说如果你只是下载了war也可以了。然后在classpath目录中创建一个名叫为fckeditor.properties的文件,文件中放置一行内容为:connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl,

在web.xml中添加一个Servlet的配置,配置内容如下:

<servlet>
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
</servlet-mapping>

好了,现在你已经完成了配置的过程,接下来我们需要在jsp中使用FCKEditor控件了,在需要使用这个控件的jsp文件的开头添加标签库的引入语句:<%@ taglib uri="http://java.fckeditor.net" prefix="FCK" %>,在使用控件进行文本格式化输入的地方(原来你可能使用的textarea标签)使用如下的内容来替换原来的输入控件:

<FCK:editor instanceName="EditorDefault">

控件中要显示的初始内容

</FCK:editor>

其中instanceName属性的值就相当于form表单中的input的name值。就是表单提交时候的键值对中的键的名字。

posted @ 2012-11-13 16:36 youngturk 阅读(1003) | 评论 (2)编辑 收藏

EL表达式不起作用原因

web.xml中2.4版本的默认导入的standerd.jar,和jstl.jar是使用el表达式的包是启动的
而2.5版本的web.xml中默认是关闭的
所以在2.5的所有jsp中需要启动一下
用<% page isELIgnored="false"%>

el表达式不起作用


        今天用el表达式,老是得不到后台传过来的值。该导入的jar包和标签库也都导入了。还是不起作用。后来在网上找到一篇文章。解决了。原来是版本的问题。现在贴一下。


tomcat5.0的版本, 使用了低版本,只求稳定。


web.xml


<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/j2ee"


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"


    version="2.4">


2.4版本默认启用el表达式,如果使用2.5版本,默认el表达式是关闭的


<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns="http://java.sun.com/xml/ns/javaee" 


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" 


    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   


    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


那么对应2.5的web.xml -->  jsp页面里应该增加<%@ page isELIgnored="false"%>


一句话,凡是部署描述文件遵循Servlet2.4规范的WEB应用,EL表达式的计算默认是启用的,而未遵循的,则EL表达式的计算默认是禁用的。


所以解决方案还可以是:将web.xml中的DTD(文档类型定义)改问2.4的版本


我用的是在公共页中加入<%@ page isELIgnored="false"%>,然后每个页面引入公共页。问题解决了。

posted @ 2012-11-13 11:04 youngturk 阅读(4402) | 评论 (1)编辑 收藏

关于EL表达式中requestScope和param区别

今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久。

首先在看遇到的问题:

在浏览器地址输入,表示传入一个参数test,值为123

http://localhost:8888/Test/index.jsp?test=123


在index.jsp中尝试使用EL表达式取出,代码如下:

 <body>
${test}
</body>

发现毫无结果,再使用requestScope尝试取出:

  <body>
${requestScope.test}
</body>

发现还是毫无结果,感到非常诧异,遂干脆使用java脚本尝试取出。

  <body>
<%request.getAttribute("test"); %>
</body>


依然无解。

之后发现,若使用已下代码向request作用域赋值,则用上面代码可以取出

<%
request.setAttribute(
"test", "123");
%>

 


查询资料后发现,使用以下代码可以取出之前的请求参数:
EL:

  <body>
${param.test}
</body>

JAVA脚本:

  <body>
<%=request.getParameter("test") %>
</body>

结论就是:${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获取的内容。

     ${requestScope.name} 等价于 request.getAttribute("name"),一般是从服务器传递结果到页面,在页面中取出服务器保存的值。

 

参考资料:

el表达式中的${param}

http://topic.csdn.net/u/20090103/15/779af9b8-c3a7-4f3e-82fe-b08bf2630996.html

posted @ 2012-11-12 15:30 youngturk 阅读(331) | 评论 (0)编辑 收藏

仅列出标题
共33页: First 上一页 5 6 7 8 9 10 11 12 13 下一页 Last 
<2024年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜