12 2011 档案

摘要:闲来无事,把一些常用的排序算法整理了一遍,以供自己日后温习之用//**********************************选择排序***************************************//直接选择排序,不稳定,时间复杂度n^2class SelectSort{ public static void selsectSort(int[] array){ for(int i=0;i<array.length-1;i++){ int k=i,temp; for(int j=i+1;j<array... 阅读全文
posted @ 2011-12-31 14:46 一直在等 阅读(769) 评论(2) 推荐(2) 编辑
摘要:搭建环境:导入JAR包使用其中相关的类建立一个配置文件:struts-config.xml作用:方便用户使用位置:一般放在WEB-INF目录下web.xml注册struts中心控制器-------ActionServlet注意事项:struts配置文件的位置预先加载控制器struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts 阅读全文
posted @ 2011-12-30 21:33 一直在等 阅读(482) 评论(0) 推荐(0) 编辑
摘要:<s:token />标签防止重复提交,用法如下:第一步:在表单中加入<s:token /><s:form action="helloworld_other" method="post" namespace="/test"> <s:textfield name="person.name"/><s:token/><s:submit/> </s:form>第二步:<action name="helloworld_*&qu 阅读全文
posted @ 2011-12-29 20:27 一直在等 阅读(578) 评论(0) 推荐(0) 编辑
摘要:property标签property标签用于输出指定值:<s:set name="name" value="'kk'" /><s:property value="#name"/>default:可选属性,如果需要输出的属性值为null,则显示该属性指定的值escape:可选属性,指定是否格式化HTML代码。value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。id:可选属性,指定该元素的标识iterator标签iterator标签用于对集合进行迭 阅读全文
posted @ 2011-12-28 22:03 一直在等 阅读(693) 评论(0) 推荐(0) 编辑
摘要:OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。 Struts 2框架使用OGNL作为默认的表达式语言。相对EL表达式,它提供了平时我们需要的一些功能,如:支持对象方法调用,如xxx.sayHello();支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@com.jim.Constant@APP_NAME;操作集合对象。Ognl 有一个上下文(Context 阅读全文
posted @ 2011-12-27 23:06 一直在等 阅读(825) 评论(0) 推荐(0) 编辑
摘要:包范围资源文件在一个大型应用中,整个应用有大量的内容需要实现国际化,如果我们把国际化的内容都放置在全局资源属性文件中,显然会导致资源文件变的过于庞大、臃肿,不便于维护,这个时候我们可以针对不同模块,使用包范围来组织国际化文件。方法如下: 在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都可以访问该资源。当查找指定key的消息时,系统会先从package资源文件查找,当找不到对应的key时,才会从常量struts.custom.i18n.resources指定的资源文件中寻找。Action 阅读全文
posted @ 2011-12-26 20:04 一直在等 阅读(520) 评论(0) 推荐(0) 编辑
摘要:准备资源文件,资源文件的命名格式如下:baseName_language_country.propertiesbaseName_language.propertiesbaseName.properties其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:中国大陆: baseName_zh_CN.properties美国: baseName_en_US.properties现在为应用添加两个资源文件:第一个存放中文:jim_zh_CN.properties内容为:welcome=欢迎学习Struts第二个存放英语(美国) 阅读全文
posted @ 2011-12-25 18:47 一直在等 阅读(682) 评论(0) 推荐(0) 编辑
摘要:当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中action的名称。例如:在实际应用中,常有以下配置:<action name="user_*" class="com.jim.action.UserAction" method="{1}“ &g 阅读全文
posted @ 2011-12-24 16:05 一直在等 阅读(451) 评论(0) 推荐(0) 编辑
摘要:使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法。如果Action类为com.jim.UserAction,那么该文件的取名应为:UserAction-validation.xml。下面是校验文件的模版:<?xml version="1.0" encoding="UTF-8"?> 阅读全文
posted @ 2011-12-23 22:21 一直在等 阅读(461) 评论(0) 推荐(0) 编辑
摘要:通过validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。validateXxx()方法使用例子: public St 阅读全文
posted @ 2011-12-22 19:33 一直在等 阅读(534) 评论(0) 推荐(0) 编辑
摘要:手工编写代码实现对action中所有方法输入校验通过重写validate() 方法实现, validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。validate()使用例子 阅读全文
posted @ 2011-12-21 22:32 一直在等 阅读(449) 评论(0) 推荐(0) 编辑
摘要:为什么使用struts建立在MVC这种公认的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,有MVC的一系列优点,如:结果层次分明,高可重用性,增加了程序的健壮性和可伸缩性,便于开发与设计分工,提供集中统一的权限控制、校验、国际化、日志等等。其他技术和框架具有很好的融合性。如与Spring、Hibernate等框架的整合大大提高开发速度……Framework概念人们用于解决相同或相似类型问题的方案特点:可重用性,可扩展性,可收缩性基于请求响应(Request-Response)模式的应用Framework的逻辑结 阅读全文
posted @ 2011-12-20 21:11 一直在等 阅读(246) 评论(0) 推荐(0) 编辑
摘要:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。说白了就是把一个 处理行为 作为参数传入方法例子: 1 interface Command{ 2 public void process(int[] target); 3 } 4 5 //打印数组元素 6 class PrintArray implements Command{ 7 @O... 阅读全文
posted @ 2011-12-19 20:41 一直在等 阅读(312) 评论(0) 推荐(0) 编辑
摘要:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。例子: 1 interface Demo{ 2 public void action(); 3 } 4 5 class RealDemo implements Demo{ ... 阅读全文
posted @ 2011-12-18 12:24 一直在等 阅读(268) 评论(0) 推荐(0) 编辑
摘要:要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:public class PermissionInterceptor implements Interceptor { private static final long serialVersionUID = -5178310397732210602L; public void destroy() { } public void init() { } public String intercept(ActionInvocation invocatio... 阅读全文
posted @ 2011-12-17 23:56 一直在等 阅读(447) 评论(0) 推荐(0) 编辑
摘要:第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。这两个文件可以从http://commons.apache.org/下载。 第二步:把form表的enctype设置为:“multipart/form-data“,如下: <form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post"> < 阅读全文
posted @ 2011-12-16 22:03 一直在等 阅读(381) 评论(0) 推荐(0) 编辑
摘要:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。例子: 1 abstract class Person{ 2 public void work(){ 3 System.out.println("I am working"); 4 } 5 public abstract void say(); 6 } 7 8 class Worker extends ... 阅读全文
posted @ 2011-12-16 21:11 一直在等 阅读(256) 评论(0) 推荐(0) 编辑
摘要:action:public String scope() throws Exception{ ActionContext ctx = ActionContext.getContext(); ctx.getApplication().put("app", "应用范围");//往ServletContext里放入app ctx.getSession().put("ses", "session范围");//往session里放入ses ctx.put("req", "request范围&qu 阅读全文
posted @ 2011-12-15 20:51 一直在等 阅读(507) 评论(0) 推荐(0) 编辑
摘要:采用基本类型接收请求参数(get/post)在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性。请求路径: http://localhost:8080/test/view.action?id=78public class ProductAction { private Integer id; public void setId(Integer id) {//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值 this.id = id; } public ... 阅读全文
posted @ 2011-12-14 21:57 一直在等 阅读(762) 评论(0) 推荐(0) 编辑
摘要:动态方法调用如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法。如下:public class HelloWorldAction{ private String message; .... public String execute() throws Exception{ this.message = "我的第一个struts2应用"; return "success"; } public String other() throws Exception{ this.message = "第二个方法... 阅读全文
posted @ 2011-12-14 21:14 一直在等 阅读(552) 评论(0) 推荐(0) 编辑
摘要:StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Ac 阅读全文
posted @ 2011-12-13 21:07 一直在等 阅读(578) 评论(0) 推荐(0) 编辑
摘要:Spring是什么~春天!哈哈~Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.那好,那到底什么是控制反转呢?先来看一段代码:public class PersonServiceBean { private PersonDao personDao = new PersonDaoBean(); public void save(Person person){ personDao.save(person); }}lPersonDaoBean 是在... 阅读全文
posted @ 2011-12-12 22:22 一直在等 阅读(5775) 评论(0) 推荐(0) 编辑
摘要:Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。 1 public class HelloWorldAction{ 2 private String savePath; 3 4 public String getSavePath() { 5 return savePath; 6 } 7 public void setSavePath(String savePath) { 8 this.savePath = sa... 阅读全文
posted @ 2011-12-12 21:54 一直在等 阅读(3128) 评论(0) 推荐(1) 编辑
摘要:如果想要接收任意长度的数据,而且避免乱码产生,就可以使用BufferedReader类public class BufferedReader extends Reader因为输入的数据有可能出现中文,所以,此处使用字符流完成。BufferedReader是从缓冲区之中读取内容,所有的输入的字节数据都将放在缓冲区之中。System.in本身表示的是InputStream(字节流),现在要求接收的是一个字符流,需要将字节流变成字符流才可以,所以要用InputStreamReader 1 import java.io.BufferedReader; 2 import java.io.IOExcept 阅读全文
posted @ 2011-12-11 21:44 一直在等 阅读(4528) 评论(1) 推荐(0) 编辑
摘要:System类的常量System表示系统类,此类也对IO给予了一定的支持。public static final PrintStream out 对应系统标准输出,一般是显示器public static final PrintStream err 错误信息输出public static final InputStream in 对应着标准输入,一般是键盘又是由于历史遗留问题 全局变量没有大写~System.out使用System.out输出的时候就是将输出的位置定义在了显示器之中。FileOutputStream是定位在文件里,而System.out是定位在屏幕上。使用OutputStre.. 阅读全文
posted @ 2011-12-11 20:46 一直在等 阅读(1161) 评论(0) 推荐(0) 编辑
摘要:在整个IO包中,打印流是输出信息最方便的类,主要包含字节打印流(PrintStream)和字符打印流(PrintWrite)。打印流提供了非常方便的打印功能,可以打印任何的数据类型,例如:小数、整数、字符串等等。看一下PrintStream的构造方法:public PrintStream(OutputStream out)在PrintStream中定义的构造方法中可以清楚的发现有一个构造方法可以直接接收OutputStream类的实例,这是因为与OutputStream相比起来,PrintStream可以更加方便的输出数据,这就好比将OutputStream类重新包装了一下,使之输出更加方便。 阅读全文
posted @ 2011-12-11 18:46 一直在等 阅读(1052) 评论(1) 推荐(0) 编辑
摘要:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。 1 interface Person{ 2 public void eat(); 3 } 4 5 class Man implements Person{ 6 public void eat() { 7 System.out.println("吃饭"); 8 } 9 }10 11 class Decorator implements Person{12 ... 阅读全文
posted @ 2011-12-11 15:20 一直在等 阅读(537) 评论(0) 推荐(0) 编辑
摘要:管道流(线程通信流)管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream)、管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上,在PipedOutputStream类上有如下的一个方法用于连接管道:public void connect(PipedInputStream snk)throws IOException例子:线程之间用管道流进行通讯 1 import java.io.IOException; 2 import java.io.PipedInputStream; 3 import java.i 阅读全文
posted @ 2011-12-11 14:29 一直在等 阅读(1657) 评论(0) 推荐(0) 编辑
摘要:ByteArrayInputStream和ByteArrayOutputStream之前所讲解的程序中,输出和输入都是从文件中来得,当然,也可以将输出的位置设置在内存之上,此时就要使用ByteArrayInputStream、ByteArrayOutputStream来完成输入输出功能了ByteArrayInputStream的主要功能将内容输入到内存之中ByteArrayOutputStream的主要功能是将内存中的数据输出此时应该把内存作为操作点ByteArrayInputStream类的定义:public classByteArrayInputStream extends InputSt 阅读全文
posted @ 2011-12-11 13:15 一直在等 阅读(1903) 评论(0) 推荐(1) 编辑
摘要:OutputStreamWriter和InputStreamReader在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变成字节流的输出对象。InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变成字符流的输入对象。一般在操作输入输出内容就需要使用字节或字符流,但是有些时候需要将字符流变成字节流的形式,或者将字节流变为字符流的形式,所以,就需要另外一组转换流的操作类。看一 阅读全文
posted @ 2011-12-11 12:01 一直在等 阅读(2223) 评论(0) 推荐(0) 编辑
摘要:先来看一下流的概念:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。字节流与字符流在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)操作流程在Java中IO操作也是有相应步骤的,以文件操作为例,主要的 阅读全文
posted @ 2011-12-11 01:36 一直在等 阅读(32589) 评论(3) 推荐(10) 编辑
摘要:之前的File类只是针对文件本身进行操作的,而如果相对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随即读取类,可以随机的读取一个文件中指定位置的数据。因为在文件中,所有得内容都是按照字节存放的,都有固定的保存位置。构造函数:public RandomAccessFile(File file,String mode)throws FileNotFoundException实例化此类的时候需要传递File类。告诉程序应该操作的是哪个文件,之后有个模式,文件的打开模式,常用的两种模式:r:读w:写rw:读写,如果使用此模式,如果文件不存在,则会自动创建先写信息: 1 im 阅读全文
posted @ 2011-12-10 21:58 一直在等 阅读(2755) 评论(0) 推荐(2) 编辑
摘要:在整个IO包了,唯一表示与文件本身有关的类就是File类。使用File类可以进行1创建或删除文件等常用操作。要想使用File类。则首先要观察File类的构造方法,此类的常用构造方法如下所示:public File(String pathname) 实例化File类的时候,必须设置好路径No.方法或常量类型描述1public static final String pathSeparator常量表示路径的分隔符(windows是“;”)2public static final String separator常量表示路径的分隔符(windows是“\”)3public File(String p 阅读全文
posted @ 2011-12-10 17:55 一直在等 阅读(19388) 评论(2) 推荐(3) 编辑
摘要:<action name="helloworld" class="com.jim.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action>result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)、 redirect 、 red 阅读全文
posted @ 2011-12-09 23:49 一直在等 阅读(548) 评论(0) 推荐(0) 编辑
摘要:假设我们的访问地址为:http://localhost:8080/struts2/test/helloworld,那么改成http://localhost:8080/structs2/test/sdf/sfs/aaa/helloworld 还能访问到吗?答案是YES很奇怪,为什么呢?让我们来看一下Action名称的搜索顺序1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action2.首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤3;如果存 阅读全文
posted @ 2011-12-08 22:34 一直在等 阅读(1051) 评论(1) 推荐(0) 编辑
摘要:在默认的配置文件struts.xml 中加入如下配置:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="jim" 阅读全文
posted @ 2011-12-08 21:58 一直在等 阅读(531) 评论(1) 推荐(0) 编辑
摘要:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。例子:比如你要做山寨产品,更新一定要快,什么流行生产什么,但工厂还是那个工厂。 1 abstract class Product{ 2 public abstract void beforeProducted(); 3 public abstract void beforeSelled(); 4 } 5 6 class House extends Product{ 7 @Overrid... 阅读全文
posted @ 2011-12-08 16:19 一直在等 阅读(249) 评论(0) 推荐(0) 编辑
摘要:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返回一个合适的实例给客户端。 1 interface ICar{ 2 public void startCar(); 3 public void stopCar(); 4 public void fixCar(); 5 } 6 7 class CarAdapter implements ICar{ 8 public void fixCar() {} 9 public void startCar() {}10 public... 阅读全文
posted @ 2011-12-08 13:42 一直在等 阅读(315) 评论(0) 推荐(0) 编辑
摘要:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 1 class Singleton { 2 private static Singleton sing; 3 4 private Singleton() { 5 } 6 7 public static Singleton getInstance() { 8 if (sing == null) { 9 sing = new Singleton();10 }11 ... 阅读全文
posted @ 2011-12-07 21:42 一直在等 阅读(410) 评论(0) 推荐(0) 编辑
摘要:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。例子:跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。 1 class Prototype implements Cloneable{ 2 private String name; 3 public String getName() ... 阅读全文
posted @ 2011-12-07 21:14 一直在等 阅读(215) 评论(0) 推荐(0) 编辑
摘要:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行得建造过程。例子: 1 class House{ 2 private String base; 3 private String wall; 4 private String roof; 5 public String getBase() { 6 return base; 7 } 8 public void setBase(Strin... 阅读全文
posted @ 2011-12-07 18:02 一直在等 阅读(321) 评论(0) 推荐(0) 编辑
摘要:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。例子:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。 1 interface Sample{ 2 public void say(); 3 } 4 5 class SampleA implements Sample{ 6 public void sa... 阅读全文
posted @ 2011-12-06 21:00 一直在等 阅读(268) 评论(0) 推荐(0) 编辑
摘要:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。例子:追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 1 interface Sample{ 2 public void say(); 3 } 4 5 class SampleA implements Sample{ 6 public void say(){ 7 Syst... 阅读全文
posted @ 2011-12-06 20:55 一直在等 阅读(265) 评论(0) 推荐(0) 编辑
摘要:Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和Struts1在名字上的差别不是很大,但Struts2和Struts1在代码编写风格上几乎是不一样的。那么既然有了Struts1,为何还要推出Struts2。主要是因为Struts2有以下优点:1. 在软件设计上Struts2没有像struts1那样跟Servlet API和struts API有着紧密的耦合,Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计,而Strut 阅读全文
posted @ 2011-12-05 21:54 一直在等 阅读(831) 评论(0) 推荐(1) 编辑
摘要:在上学的时候,数据库之中就讲过数据库范式,现在突然想复习下,就上网查了下发现还是自己亲自理一遍比较清晰先引用百度百科中的一段话: 关系数据库中的关系必须满足一定的要求,即满足不同的范式。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。好家伙,竟然一共有6种范式- -汗,以前只知道第一第二第三范式,好吧,貌似一二三也足够解决问.. 阅读全文
posted @ 2011-12-04 22:02 一直在等 阅读(570) 评论(1) 推荐(0) 编辑
摘要:在Student.xml中添加: <select id="selectStudentByName" parameterClass="String" resultClass="Student"> select * from student where name like '%$name$%' </select>此处标红特别注意,跟以往写法不同,可以理解为##自动帮你添加引号,而$$不添加引号进行单元测试: 1 @Test 2 public void queryStudentByName() thr 阅读全文
posted @ 2011-12-04 17:09 一直在等 阅读(372) 评论(0) 推荐(0) 编辑
摘要:在Student.xml中添加: <update id="updateStudent" parameterClass="Student"> update student set name=#name#, score=#score# where id=#id# </update>进行单元测试: 1 @Test 2 public void updateStudent() throws Exception{//更新学生 3 Reader reader=Resources.getResource... 阅读全文
posted @ 2011-12-04 16:41 一直在等 阅读(351) 评论(0) 推荐(0) 编辑
摘要:在Student.xml中添加如下代码: <delete id="deleteStudentById" parameterClass="int"> delete from student where id=#id# </delete>在junit中进行测试:1 @Test2 public void deleteStudent() throws Exception{//根据Id删除学生3 Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml... 阅读全文
posted @ 2011-12-04 16:26 一直在等 阅读(422) 评论(0) 推荐(0) 编辑
摘要:在Student.xml中加入: <insert id="insertStudent" parameterClass="Student"> insert into student ( id , name , score ) values (#id#,#name#,#score#) </insert>并在junit中测试: 1 @Test 2 public void addStudent() throws Exception{//新增学生 3 Reader reader=Resources.getR... 阅读全文
posted @ 2011-12-04 16:04 一直在等 阅读(1037) 评论(0) 推荐(0) 编辑
摘要:在Student.xml中插入如下代码: <!-- parameterClass代表要传入的参数类型 --> <select id="SelectStudentById" parameterClass="int" resultClass="Student"> select * from student where id=#id# </select>然后在junit中进行测试:1 @Test2 public void queryStudentById() throws Exception{//根据Id 阅读全文
posted @ 2011-12-04 15:27 一直在等 阅读(642) 评论(0) 推荐(0) 编辑
摘要:假设数据库的student表中有如下的字段和数据:对应的Student.java如下: 1 public class Student { 2 private Integer id; 3 private String name; 4 private float score; 5 public Integer getId() { 6 return id; 7 } 8 public void setId(Integer id) { 9 this.id = id;10 }11 public String g... 阅读全文
posted @ 2011-12-04 15:11 一直在等 阅读(837) 评论(0) 推荐(0) 编辑
摘要:iBatis是apache得一个开源项目,一个O/R Mapping解决方案,iBatis的最大特点是小巧,上手很快。如果不需要太多复杂的功能,iBatis是能满足你的要求并且灵活简单的方案,官网:http://ibatis.apache.org搭建环境:导入相关的jar包1.导入数据库jar包2.导入ibatis的jar包配置文件:1.JDBC连接的属性文件 SqlMap.properties:driver=org.gjt.mm.mysql.Driverurl=jdbc:mysql://localhost:3306/hibernateusername=rootpassword=java2.总 阅读全文
posted @ 2011-12-04 12:08 一直在等 阅读(893) 评论(1) 推荐(0) 编辑
摘要:JNI(Java Native Interface)Java是跨平台的语言,但是在有些时候仍然是需要调用本地代码(这些代码通常是由C/C++编写的)Sun公司提供的JNI是Java平台的一个功能强大的接口。这个JNI接口提供了Java与操作系统本地代码互相调用的功能。最简单的Java调用C/C++代码的步骤1.首先在Java类中声明一个native的方法:public class TestNative { public native void sayHello(); ……}2.使用Javah命令生成包含native方法定义的C/C++头文件(在JDK的bin目录下找javah.ex... 阅读全文
posted @ 2011-12-03 23:08 一直在等 阅读(927) 评论(0) 推荐(0) 编辑
摘要:Annotation的出现真的是非常惊艳,能把许多繁琐的工作化整为零。那么Annotation到底是怎么工作的呢,那么就亲自编写一个Annotation程序尝试一下就比较清楚了。下面就演示一个简单的Annotation到底是怎么起作用的:先定义一个叫Hello的Annotation注解1 @Retention(RetentionPolicy.RUNTIME)//表示运行时能获取参数2 @Target({ElementType.METHOD})//表示只能作用在方法上面3 public @interface Hello {4 String name() default "hello w 阅读全文
posted @ 2011-12-03 20:38 一直在等 阅读(657) 评论(0) 推荐(1) 编辑
摘要:Employee.java:(基类) 1 @Entity 2 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)//选择继承策略 3 @DiscriminatorColumn(name="type")//配置鉴别器 4 @DiscriminatorValue("0")//设置鉴别器值 5 public class Employee { 6 @Id 7 @GeneratedValue 8 private Integer id; 9 private String name;10 public Integer 阅读全文
posted @ 2011-12-03 19:02 一直在等 阅读(4669) 评论(1) 推荐(1) 编辑
摘要:两个或多个字段组成的主键,我们叫联合主键。在面向对象中,我们用JPA怎么定义这种情况呢?怎么定义联合主键?用面向对象的思想来思考的话,联合主键里的复合主键(字段),可以把它看成一个整体,然后采用一个主键类来描述这个复合主键的字段。关于联合主键类,大家一定要遵守以下几点JPA规范:必须提供一个public的无参数构造函数。必须实现序列化接口。必须重写hashCode()和equals()这两个方法。这两个方法应该采用复合主键的字段作为判断这个对象是否相等的。联合主键类的类名结尾一般要加上PK两个字母代表一个主键类,不是要求而是一种命名风格。AirLinePK.java: 1 @Embeddabl 阅读全文
posted @ 2011-12-03 14:15 一直在等 阅读(12827) 评论(0) 推荐(4) 编辑
摘要:Student.java: 1 @Entity 2 public class Student { 3 @Id 4 @GeneratedValue 5 private Integer id; 6 @Column(length=10,nullable=false) 7 private String name; 8 @ManyToMany 9 @JoinTable(name="student_teacher",joinColumns=@JoinColumn(name="studentId", referencedColumnName="id" 阅读全文
posted @ 2011-12-03 13:12 一直在等 阅读(2065) 评论(0) 推荐(1) 编辑
摘要:Person.java: 1 @Entity 2 public class Person { 3 @Id 4 @GeneratedValue 5 private Integer id; 6 @Column(length=10,nullable=false) 7 private String name; 8 @OneToOne(cascade=CascadeType.ALL,optional=false) 9 @JoinColumn(name="idcard_id")10 private IDCard idcard;11 p... 阅读全文
posted @ 2011-12-02 20:57 一直在等 阅读(2106) 评论(0) 推荐(1) 编辑
摘要:Order.java: 1 import java.util.HashSet; 2 import java.util.Set; 3 4 import javax.persistence.CascadeType; 5 import javax.persistence.Column; 6 import javax.persistence.Entity; 7 import javax.persistence.FetchType; 8 import javax.persistence.Id; 9 import javax.persistence.OneToMany;10 import javax.p. 阅读全文
posted @ 2011-12-01 23:36 一直在等 阅读(5708) 评论(0) 推荐(1) 编辑
摘要:查询语言(JPQL)这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。(跟HQL真的很像- -) 1 @Test 2 public void query(){ 3 EntityManagerFactory factory=Persistence.createEntityManagerFactory("sample"); 4 EntityManager em=factory.createEntityManager(); 5 Query query=em.createQuer... 阅读全文
posted @ 2011-12-01 20:51 一直在等 阅读(4504) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示