问题:
Access restriction: The type Handler is not accessible due to restriction on required library xxxx.jar
原因:
MyEclipse运行使用的JDK/JRE,与工程的JDK/JRE不同所致
解决方法:
在项目属性中,JDK/JRE设成默认就好啦
Learn and share.
问题:
Access restriction: The type Handler is not accessible due to restriction on required library xxxx.jar
原因:
MyEclipse运行使用的JDK/JRE,与工程的JDK/JRE不同所致
解决方法:
在项目属性中,JDK/JRE设成默认就好啦
1、扩展虚拟磁盘
1.1A我的xp虚拟机一共只有10G,我需要扩展到20G(要关虚拟机)
"D:\Program files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -x 20GB "D:\VirtualMashines\VMware\WinXP\WinXP.vmdk"
1.1BVMWare10以后,可以直接在管理工具中
虚拟机-》设置-》硬盘-》实用工具-》扩展
1.2扩展后,开启虚拟机,自己到磁盘管理器中分配空间即可。
2、压缩WinXP虚拟磁盘(vmware-tools)
2.1管理工具(关闭虚拟机)
虚拟机-》设置-》硬盘-》实用工具-》碎片整理
2.2开启虚拟机
系统托盘图标-》vmware-tools-》压缩
3、压缩WinXP虚拟磁盘(vmware-vdiskmanager)
3.1需要到微软官网下载sdelete工具,然后在虚拟机中运行:
sdelete -z
3.2关闭虚拟机,运行:
"D:\Program files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -k "D:\VirtualMashines\VMware\WinXP\WinXP.vmdk"
4、压缩Debian虚拟磁盘:
4.1A在虚拟机中运行zerofree命令,需要将分区挂载为只读模式
apt-get install zerofree umount /etc/home zerofree /dev/sda6
4.1B在虚拟机中运行dd命令,需要将分区挂载为读写模式
dd if=/dev/zero of=/bigemptyfile rm bigemptyfile
4.2关闭虚拟机,运行:
"D:\Program files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -k "D:\VirtualMashines\VMware\Debian8\Debian8.vmdk"
5、压缩FreeBSD虚拟磁盘:
5.1A在虚拟机中运行dd命令,需要将分区挂载为读写模式
dd if=/dev/zero of=bigemptyfile bs=1m rm bigemptyfile
5.1B在虚拟机中运行dd命令,需要将分区挂载为读写模式(适用于影片空闲空间较小)
cat /dev/zero > bigemptyfile;sync;sleep 1;sync; rm -f bigemptyfile
5.2关闭虚拟机,运行:
"D:\Program files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -k "D:\VirtualMashines\VMware\FreeBSD10\Debian8.vmdk"
1、Axis2调用WebService一般有两种方法:
a、使用org.apache.axis2.rpc.client.RPCServiceClient自动生成PayLoad
b、使用org.apache.axis2.client.ServiceClient手动生成PayLoad
package com.ats.ws.client;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.apache.log4j.Logger;
import com.ats.db.Person;
import com.ats.db.PersonAddResponse;
public class WSInvoker
{
private static Logger logger = Logger.getLogger(WSInvoker.class);
private static void invokeWebServiceRPC()
{
try
{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
options.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager"));
// 调用Action
QName operation = new QName("http://ws.ats.com", "PersonAdd");
// 调用参数类型和参数值
Person p = new Person();
Object req[] = new Object[] { p };
p.setName("HI");
Class[] reqClasses = new Class[] { PersonAddResponse.class };
// 返回结果
Object[] rsp = serviceClient.invokeBlocking(operation, req, reqClasses);
PersonAddResponse r = (PersonAddResponse) rsp[0];
logger.debug(r.getOperationReult());
} catch (AxisFault e)
{
e.printStackTrace();
}
}
public static void invokeWebServiceDocument()
{
try
{
ServiceClient serviceClient = new ServiceClient();
Options opts = new Options();
opts.setTo(new EndpointReference("http://localhost:8080/WebService1/services/PersonManager"));
opts.setAction("urn:PersonAdd");
serviceClient.setOptions(opts);
// 发送请求并并得到返回结果
OMElement res = serviceClient.sendReceive(createPayLoad());
logger.debug(res.getFirstElement().getText());
} catch (AxisFault e)
{
e.printStackTrace();
}
}
public static OMElement createPayLoad()
{
OMFactory fac = OMAbstractFactory.getOMFactory();
// 命名空间
OMNamespace omNsXSD = fac.createOMNamespace("http://ws.ats.com", "xsd");
OMNamespace omNsXS = fac.createOMNamespace("http://www.w3.org/2001/XMLSchema", "xs");
// 指定方法
OMElement method = fac.createOMElement("PersonAdd", omNsXSD);
// 指定方法的参数
OMElement p1 = fac.createOMElement("person", omNsXS);
OMElement personName = fac.createOMElement("personName", omNsXS);
personName.setText("personName");
p1.addChild(personName);
OMElement personid=fac.createOMElement("personid", omNsXS);
personid.setText("");
p1.addChild(personid);
method.addChild(p1);
return method;
}
public static void main(String[] args)
{
WSInvoker.invokeWebServiceRPC();
WSInvoker.invokeWebServiceDocument();
}
}
2、要想看到网络通讯的话,在log4j的配置文件中增加:
<category name="org.apache.commons.httpclient"> <priority value="WARN" /> </category> <category name="httpclient.wire"> <priority value="DEBUG" /> </category>
1、发布的几种方式
POJO+axis2-war:
这种方式比较适合简单功能,直接写一个POJO,放到axis2-war下的pojo目录即可
AAR+axis2-war:
这种方式比较适合发布,将服务打成aar包,放到axis2-war下的service目录即可
web+axis2:
这种方式比较适合调试,将axis2集成到web工程,个人比较喜欢这个方式
2、Service组成
a、服务类
PersonManager.java
package com.ats.ws;
import com.ats.db.Person;
import com.ats.db.PersonAddResponse;
import com.ats.db.PersonDAO;
public class PersonManager {
public PersonAddResponse PersonAdd(Person person)
{
PersonAddResponse rsp = new PersonAddResponse();
//PersonDAO dao = new PersonDAO();
//rsp.setOperationReult(dao.InsertPerson(person));
return rsp;
}
}
b、服务描述文件
services/Person/META-INF/services.xml
<?xml version="1.0" encoding="UTF-8"?> <service name="PersonManager"> <description>PersonManagere</description> <parameter name="ServiceClass">com.ats.ws.PersonManager</parameter> <operation name="PersonAdd"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>
c、wsdl
可以自动生成,一般不需要指定
3、Axis2集成到WebApp的方式
a、axis2-web拷贝到project/WebContent下
b、conf、modules、services拷贝到project/WebContent/WEB-INF下
c、所需lib,拷贝到project/WebContent/WEB-INF/lib下
c、web.xml增加下面内容:
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>AxisAdminServlet</servlet-name> <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisAdminServlet</servlet-name> <url-pattern>/axis2-admin/*</url-pattern> </servlet-mapping>
1、Car.java
package com.ast.cglib.test;
public class Car {
}
2、Truck.java
package com.ast.cglib.test;
public class Truck extends Car{
}
3、MyInterceptor.java
package com.ast.cglib.test;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class MyInterceptor implements MethodInterceptor{
@Override
public Object intercept(Object invoker, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("NewCarInterceptor intercept before invoke");
Object result = proxy.invokeSuper(invoker, args);
System.out.println("NewCarInterceptor intercept after invoke");
return result;
}
}
4、MyCallbackFilter.java
package com.ast.cglib.test;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.CallbackFilter;
public class MyCallbackFilter implements CallbackFilter {
public int accept(Method method) {
if (method.getName().equals("NewTruck")) {
return 0;
} else {
return 1;
}
}
}
5、CarFactory.java
package com.ast.cglib.test;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.NoOp;
public class CarFactory{
public Car NewCar()
{
System.out.println("CarFactory NewCar");
return new Car();
}
public Truck NewTruck()
{
System.out.println("CarFactory NewTruck");
return new Truck();
}
public static void EnhancerTest()
{
Callback[] callbacks = new Callback[] {new MyInterceptor(), NoOp.INSTANCE};
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(CarFactory.class);
enhancer.setCallbacks(callbacks);
enhancer.setCallbackFilter(new MyCallbackFilter());
CarFactory fac = (CarFactory)enhancer.create();
//NoOp
fac.NewCar();
//MyInterceptor
fac.NewTruck();
}
public static void main(String[] args)
{
CarFactory.EnhancerTest();
}
}
1、IA1.java
package com.ast.cglib.test;
public interface IA1 {
void methodA1();
}
2、IA2.java
package com.ast.cglib.test;
public interface IA2 {
void methodA2();
}
3、A1Impl.java
package com.ast.cglib.test;
public class A1Impl implements IA1{
@Override
public void methodA1() {
System.out.println("A1Impl methodA1");
}
}
4、A2Impl.java
package com.ast.cglib.test;
public class A2Impl implements IA2{
@Override
public void methodA2() {
System.out.println("A2Impl methodA2");
}
}
5、MixinTest.java
package com.ast.cglib.test;
import net.sf.cglib.proxy.Mixin;
public class MixinTest {
public static void main(String[] args) {
Class[] interfaces = new Class[] { IA1.class, IA2.class };
Object[] delegates = new Object[] { new A1Impl(), new A2Impl() };
Object obj = Mixin.create(interfaces, delegates);
IA1 a1 = (IA1) obj;
a1.methodA1();
IA2 a2 = (IA2) obj;
a2.methodA2();
}
}
1、ProxyFactory.java
package com.ats.proxy;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class ProxyFactory implements MethodInterceptor{
//private Object invoker;
private List<Object> interceptors;
private ProxyFactory(Object invoker,List<Object> interceptors)
{
//this.invoker = invoker;
if(interceptors==null)
{
this.interceptors = new ArrayList<Object>();
}
else
{
this.interceptors = interceptors;
}
}
public static final Object newInstance(Object invoker,List<Object> interceptors)
{
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(invoker.getClass());
enhancer.setCallback(new ProxyFactory(invoker,interceptors));
return enhancer.create();
}
@Override
public Object intercept(Object invoker, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
Object result = null;
for(Object o : interceptors)
{
if(o instanceof IProxyBefore)
{
((IProxyBefore)o).BeforeInvoke();
}
}
try
{
result = proxy.invokeSuper(invoker, args);
}
catch(Exception ex)
{
for(Object o : interceptors)
{
if(o instanceof IProxyThrow)
{
((IProxyThrow)o).ThrowInvoke();
}
}
}
for(Object o : interceptors)
{
if(o instanceof IProxyAfter)
{
((IProxyAfter)o).AfterInvoke();
}
}
return result;
}
}
2、IProxyBefore.java
package com.ats.proxy;
public interface IProxyBefore {
public void BeforeInvoke();
}
3、IProxyAfter.java
package com.ats.proxy;
public interface IProxyAfter {
public void AfterInvoke();
}
4、IProxyAround.java
package com.ats.proxy;
public interface IProxyAround extends IProxyBefore,IProxyAfter{
}
5、IProxyThrow.java
[code lang="java"]
package com.ats.proxy;
public interface IProxyThrow {
public void ThrowInvoke();
}
6、Car.java
package com.ats.test;
public class Car {
public Car()
{
System.out.println("This is a new Car");
}
}
7、CarFactoryBefore.java
package com.ats.test;
import com.ats.proxy.IProxyBefore;
public class CarFactoryBefore implements IProxyBefore{
@Override
public void BeforeInvoke() {
System.out.println("CarFactoryBefore BeforeInvoke");
}
}
8、CarFactoryAfter.java
package com.ats.test;
import com.ats.proxy.IProxyAfter;
public class CarFactoryAfter implements IProxyAfter {
@Override
public void AfterInvoke() {
System.out.println("CarFactoryAfter AfterInvoke");
}
}
9、CarFactoryAround.java
package com.ats.test;
import com.ats.proxy.IProxyAround;
public class CarFactoryAround implements IProxyAround{
@Override
public void AfterInvoke() {
System.out.println("CarFactoryAround AfterInvoke");
}
@Override
public void BeforeInvoke() {
System.out.println("CarFactoryAround BeforeInvoke");
}
}
10、CarFactoryThrow.java
package com.ats.test;
import com.ats.proxy.IProxyThrow;
public class CarFactoryThrow implements IProxyThrow {
@Override
public void ThrowInvoke() {
System.out.println("CarFactory ThrowInvoke");
}
}
11、ProxyFactory.java
package com.ats.test;
import java.util.ArrayList;
import java.util.List;
import com.ats.proxy.ProxyFactory;
public class CarFactory{
public Car NewCar()
{
return new Car();
}
public static void main(String[] args)
{
CarFactory fac = new CarFactory();
CarFactoryAfter after = new CarFactoryAfter();
CarFactoryBefore before = new CarFactoryBefore();
CarFactoryAround around = new CarFactoryAround();
CarFactoryThrow _throw = new CarFactoryThrow();
List<Object> l = new ArrayList<Object>();
l.add(after);
l.add(before);
l.add(around);
l.add(_throw);
CarFactory fac1=(CarFactory)ProxyFactory.newInstance(fac, l);
fac1.NewCar();
}
}
1、ProxyFactory.java
package com.ats.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class ProxyFactory implements InvocationHandler{
private Object invoker;
private List<Object> interceptors;
private ProxyFactory(Object invoker,List<Object> interceptors)
{
this.invoker = invoker;
if(interceptors==null)
{
this.interceptors = new ArrayList<Object>();
}
else
{
this.interceptors = interceptors;
}
}
public static final Object newInstance(Object invoker,List<Object> interceptors)
{
return java.lang.reflect.Proxy.newProxyInstance(invoker.getClass().getClassLoader(),
invoker.getClass().getInterfaces(), new ProxyFactory(invoker,interceptors));
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
for(Object o : interceptors)
{
if(o instanceof IProxyBefore)
{
((IProxyBefore)o).BeforeInvoke();
}
}
try
{
result = method.invoke(invoker, args);
}
catch(Exception ex)
{
for(Object o : interceptors)
{
if(o instanceof IProxyThrow)
{
((IProxyThrow)o).ThrowInvoke();
}
}
}
for(Object o : interceptors)
{
if(o instanceof IProxyAfter)
{
((IProxyAfter)o).AfterInvoke();
}
}
return result;
}
}
2、IProxyBefore.java
package com.ats.proxy;
public interface IProxyBefore {
public void BeforeInvoke();
}
3、IProxyAfter.java
package com.ats.proxy;
public interface IProxyAfter {
public void AfterInvoke();
}
4、IProxyAround.java
package com.ats.proxy;
public interface IProxyAround extends IProxyBefore,IProxyAfter{
}
5、IProxyThrow.java
package com.ats.proxy;
public interface IProxyThrow {
public void ThrowInvoke();
}
6、ICarFactory.java
package com.ats.test;
public interface ICarFactory {
public Car NewCar();
}
7、Car.java
package com.ats.test;
public class Car {
public Car()
{
System.out.println("This is a new Car");
}
}
8、IProxyBefore.java
package com.ats.test;
import com.ats.proxy.IProxyBefore;
public class CarFactoryBefore implements IProxyBefore{
@Override
public void BeforeInvoke() {
System.out.println("CarFactoryBefore BeforeInvoke");
}
}
9、CarFactoryAfter.java
package com.ats.test;
import com.ats.proxy.IProxyAfter;
public class CarFactoryAfter implements IProxyAfter {
@Override
public void AfterInvoke() {
System.out.println("CarFactoryAfter AfterInvoke");
}
}
10、CarFactoryAround .java
package com.ats.test;
import com.ats.proxy.IProxyAround;
public class CarFactoryAround implements IProxyAround{
@Override
public void AfterInvoke() {
System.out.println("CarFactoryAround AfterInvoke");
}
@Override
public void BeforeInvoke() {
System.out.println("CarFactoryAround BeforeInvoke");
}
}
11、CarFactoryThrow.java
package com.ats.test;
import com.ats.proxy.IProxyThrow;
public class CarFactoryThrow implements IProxyThrow {
@Override
public void ThrowInvoke() {
System.out.println("CarFactory ThrowInvoke");
}
}
12、CarFactory.java
package com.ats.test;
import java.util.ArrayList;
import java.util.List;
import com.ats.proxy.IProxyAround;
import com.ats.proxy.IProxyThrow;
import com.ats.proxy.ProxyFactory;
public class CarFactory implements ICarFactory {
public Car NewCar()
{
return new Car();
}
public static void main(String[] args)
{
CarFactory fac = new CarFactory();
CarFactoryAfter after = new CarFactoryAfter();
CarFactoryBefore before = new CarFactoryBefore();
CarFactoryAround around = new CarFactoryAround();
CarFactoryThrow _throw = new CarFactoryThrow();
List<Object> l = new ArrayList<Object>();
l.add(after);
l.add(before);
l.add(around);
l.add(_throw);
ICarFactory factory = (ICarFactory)ProxyFactory.newInstance(fac,l);
factory.NewCar();
}
}
1、CopyRight.java
package com.ats.annotation;
public @interface CopyRight {
String value();
}
2、UnitTest.java
package com.ats.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface UnitTest { }
3、Foo.java
package com.ats.test;
import com.ats.annotation.UnitTest;
public class Foo {
@UnitTest
public static void m1() {
}
@UnitTest
public static void m2() {
throw new RuntimeException("Crash");
}
@UnitTest
public static void m3() {
}
public static void m4() {
}
public static void m5() {
throw new RuntimeException("Crash");
}
}
4、RunTests.java
package com.ats.test;
import java.lang.reflect.Method;
import com.ats.annotation.CopyRight;
import com.ats.annotation.UnitTest;
@CopyRight("2012 NEOHOPE")
public class RunTests {
public static void main(String[] args) throws Exception {
int passed = 0, failed = 0;
for (Method m : Class.forName("com.ats.test.Foo").getMethods()) {
if (m.isAnnotationPresent(UnitTest.class)) {
try {
m.invoke(null);
passed++;
} catch (Throwable ex) {
System.out.printf("Test %s failed: %s %n", m, ex.getCause());
failed++;
}
}
}
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
}
}
1、AuthorTag.java
package com.ats.taglib;
import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class AuthorTag extends TagSupport{
private static final long serialVersionUID = 1L;
private String version="v1.0";
@Override
public int doStartTag(){
JspWriter out=pageContext.getOut();
try {
out.print("<div>AuthorTag "+version+" by NEOHOPE</div>");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
@Override
public int doEndTag(){
return EVAL_PAGE;
}
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version=version;
}
}
2、IterateTag.java
package com.ats.taglib;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IterateTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private Iterator it;
private String type;
private String name;
public void setCollection(Collection collection) {
if (collection.size() > 0)
it = collection.iterator();
}
public void setType(String type)
{
this.type=type;
}
public void setName(String name)
{
this.name=name;
}
@Override
public int doStartTag() {
JspWriter out=pageContext.getOut();
try {
out.print("<table>");
} catch (IOException e) {
e.printStackTrace();
}
if (it == null)
return SKIP_BODY;
else
return continueNext(it);
}
@Override
public int doAfterBody() {
return continueNext(it);
}
@Override
public int doEndTag() {
try {
if (bodyContent != null)
bodyContent.writeOut(bodyContent.getEnclosingWriter());
} catch (Exception e) {
System.out.println(e);
}
JspWriter out=pageContext.getOut();
try {
out.print("</table>");
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
protected int continueNext(Iterator it) {
if (it.hasNext()) {
pageContext.setAttribute(name, "<tr><td>"+it.next()+"</td></tr>", pageContext.PAGE_SCOPE);
return EVAL_BODY_TAG;
} else {
return SKIP_BODY;
}
}
}
3、IterateTagTEI.java
package com.ats.taglib;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;
public class IterateTagTEI extends TagExtraInfo {
public IterateTagTEI() {
super();
}
@Override
public VariableInfo[] getVariableInfo(TagData data) {
return new VariableInfo[] { new VariableInfo(
data.getAttributeString("name"),
data.getAttributeString("type"), true, VariableInfo.NESTED) };
}
}
4、LoopTag.java
package com.ats.taglib;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class LoopTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private int total = 0;
private int count = 0;
@Override
public int doStartTag() {
try {
if (total > 0)
return EVAL_BODY_TAG;
else
return SKIP_BODY;
} catch (Exception e) {
e.printStackTrace();
return SKIP_BODY;
}
}
@Override
public int doAfterBody() {
try {
if (total - count>1) {
count++;
return EVAL_BODY_TAG;
}
else
{
count=0;
return SKIP_BODY;
}
} catch (Exception e) {
e.printStackTrace();
return SKIP_BODY;
}
}
@Override
public int doEndTag() {
try {
bodyContent.writeOut(bodyContent.getEnclosingWriter());
} catch (Exception e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
public void setTotal(int total)
{
this.total = total;
}
public int getTotal()
{
return total;
}
}
5、Taglib.tld
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"] <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>at</shortname> <tag> <name>AuthorTag</name> <tagclass>com.ats.taglib.AuthorTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>version</name> <required>false</required> </attribute> </tag> <tag> <name>LoopTag</name> <tagclass>com.ats.taglib.LoopTag</tagclass> <bodycontent>jsp</bodycontent> <attribute> <name>total</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>IterateTag</name> <tagclass>com.ats.taglib.IterateTag</tagclass> <teiclass>com.ats.taglib.IterateTagTEI</teiclass> <bodycontent>jsp</bodycontent> <attribute> <name>collection</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>name</name> <required>true</required> </attribute> <attribute> <name>type</name> <required>true</required> </attribute> </tag> </taglib>
6、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"]
<display-name>TaglibTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<jsp-config>
<taglib>
<taglib-uri>
http://www.ats.com/Taglib
</taglib-uri>
<taglib-location>
/WEB-INF/tags/Taglib.tld
</taglib-location>
</taglib>
</jsp-config>
</web-app>
7、index.jsp
<%@ taglib prefix="ats" uri="http://www.ats.com/Taglib" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.util.ArrayList"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TaglibTest</title>
</head>
<body>
<ats:AuthorTag version="v1.01"/>
<ats:LoopTag total="3">
<div><%=new Date()%></div>
</ats:LoopTag>
<%
ArrayList<String> t=new ArrayList<String>();
t.add("A");
t.add("B");
t.add("C");
%>
<div>
<ats:IterateTag name="row" type="String" collection="<%=t%>">
<%=row%>
</ats:IterateTag>
</div>
</body>
</html>