??xml version="1.0" encoding="utf-8" standalone="yes"?>可以直接在线观看的av,欧美精品在线一区二区三区,男人天堂视频在线观看http://www.aygfsteel.com/wzl002/category/36275.htmlzh-cnTue, 23 Dec 2008 14:22:52 GMTTue, 23 Dec 2008 14:22:52 GMT60目ȝ报告http://www.aygfsteel.com/wzl002/articles/247973.htmlwesley1987wesley1987Tue, 23 Dec 2008 13:38:00 GMThttp://www.aygfsteel.com/wzl002/articles/247973.htmlhttp://www.aygfsteel.com/wzl002/comments/247973.htmlhttp://www.aygfsteel.com/wzl002/articles/247973.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/247973.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/247973.html                  目实训心得

             在这一个多月的目实训q程Q我感到是我专业学习(fn)中收获非常大的一个月。在q个月里Q我体验C团队合作的经验,~程q程中的乐趣Q以?qing)将学?fn)应用到实际、从实践中学?fn)的丰收感?/span>

              q一个月里,得到了二个最宝贵体验Q一是参与了一个团队合作的、有很强多同模块怺性、和一套完整生命周期流E的工程目。这一套项目按照Y件工E的程一步步C来,l历了需求分析,详细设计Q实际编码和试q一pd阶段。一步一步慢慢的C来。虽然对于真实的目来说Q这个项目的复杂度和规模q不是很大,逻辑要求也不是太严格。但是对于只参加一?/span>3-4人的目~程的我来说Q已l第一ơ让我体真正的体验到编E作Z工E来执行的难得经验?/span>

              W二个体验是详细设计中,Y件架构和分层的思想以及(qing)单的工程模式{应用到了项目中。用框架等方式Q非常有效的提高了代码的复用和工E的可维护性,虽然多层l构看似ȝQ但实际上它很大的降低了设计的复杂度Q在实际的体验中感到Q用了框架后的模块Q维护v来清C很多Q容易了很多Q降低了耦合Q同时增Z模块间的交互和重用?/span>

              随着整个工程的流E一步步q行Q我们看C一个工E的一ơ次成长。项目伊始,我们得到了项目需求文档(我想q一步在实际中也应该是由目人员_ֿ设计才完成的Q,对于工程的不同用例,工E分Z六个模块Qƈ对应的将l员分ؓ(f)了六l。我们的W一步是完成寚w求文档的理解Q而成果就是对应了各个模块的实际功能的静态页面,因ؓ(f)软g客户最后体验所有需求的功能实现是通过操作面来实玎ͼ所以页面要在客户需求的角度去考虑Q同时要需求的功能都赋予体现?/span>在这个过E中Q大安了按功能分化出页面分cdQ大部分旉q用来精心设计页面的风格。页面布局和菜单中大量用到?/span>JavaScript?/span>CSS。和以我往设计面时不同的是,Z让大家可以公用这些设计,在页面的布局中不能太复杂Q甚臛_乎是不能在需要统一的地面对整体的布|有M复杂的干预。所有希望统一的部?/span>都要在公qCSS?/span>JavaScript中做出方便统一使用的类或方法,在页面本w的代码中几乎看不到布局设计Q只有功能组件?/span>

              在页面设计通过审核之后是详细设计阶段了,在这阶段的前几天我们犯了一个顺序错误,直接从数据库着手。结果由于项目的功能的复杂性和模块之间太多需要交互的地方Q得数据库的设计进行的很缓慢。经q老师的提Ҏ(gu)们改ZE序~码的框架开始着手。联pd功能的具体实现来设计~码的层ơ结构(框架详细设计在下一节)Q划分出公共q_。这样再从各模块的功能及(qing)其交互划分来联系设计数据库就变的清晰了很多。在设计q程中我们还使用?/span>E-R图来设计出关pL据库Q即从参与的对象和对象之间的关系最l设计出数据库的Ҏ(gu)。在q次设计中发现自己在利用一些系l的理论q行整体的数据库模型设计斚wq存在很多不뀂数据库完成后,Ҏ(gu)架的设计也基本完成,公共的分设计,数据库连接与关闭Q工E的文gl构和工E的环境也在几次讨论后完成统一设计?/span>

              ׃之前?/span>struts有了一定的了解Q所以我在需求分析阶D就开始尝试着着手对几个单模块的实现~码Q之后在详细设计阶段中,每次讨论后新加的内容都需要对已经完成的代码进行一ơ大的修攏V随着代码的增长,试了很多种文gl构。之后引入项目的框架也经历了很大的修改和许多ơ的试。此外的修改q包?/span>BaseAction的引入,DispatchAction的引入,使用struts异常处理{,q做好工E备份及(qing)修改记录在日报中。在q一ơ次的修改中让我受益匪浅Q对q些设计和修Ҏ(gu)了更深刻的体?x)。这样在详细设计阶段的过E中Q框架设计都已经在编码中事先q行了实现和试Q一些功能在写好后被分离出来作ؓ(f)公共q_。终于在组开始编码时定Zl一q详l完整的的工E的全部环境Q项目的框架l构和整体编码方式。我的编码实现和单元试也基本完成?/span>

              在两周的~码q程中,我主要是和吉利一起协助各模块~码Q增加各模块间交,在这期间也解决问题的q程中学到知识。经q全体组员两周的努力工作Q终于进入了试阶段。我和吉利负责整体测试,试联结了所有模块之后,可以利的完成全套的程。让整个设计可以?/span>6个流E中一步步的走下去Q同时保证数据库中所有数据和状态的正确性。随着试一ơ次的进行,问题渐渐被全部排除,l过3ơ测试之后,基本可以完全利的走完全套流E?/span>

               

              我们q次工程中用的是四层结构的框架Q即?/span>MVC三层l构的同Ӟ?/span>model模型层分成了model模型层和DAO持久层。其中又Ҏ(gu)工厂模式分出DAO接口Q?/span>beanQ?/span>factoryQ?/span>serviceQ?/span>managerQ提?/span>DAO实现?/span>

              l构实现Q首先我们根据框Ӟ设计出相应的文gl构。视囑ֱx?/span>JSP文gQ和配置文g一L(fng)eclipse的自动生成单独分?/span>WebRoot下,六模块的面分别分于六个子目录下。所有的公共面?/span>jsQ?/span>css目录也放?/span>WebRoot下。由于这ơ项目中模块间的功能面基本是完全相互独立的Q这为在实现视图层和控制层之间的面跌{控制带来很大的方ѝ代码目录(srcQ下为六个模块的六个目录Q公׃码目录(platformQ,以及(qing)后加入的验证模块的目录(validateQ。除公共目录外,各模块下代码分ؓ(f)5个目录:(x)ActionQ?/span>modelQ?/span>FormQ?/span>manager?/span>dao。(q里有两个命名的pQ根据实际的使用Q?/span>model的名字应该叫bean更合适,而这?/span>manager一般在框架中称?/span>service。但我们已经有了UCؓ(f)service的模块名U。)q里?/span>Action?/span>Form对应?/span>struts中的lgQ?/span>DAO层和model-bean一起完成了操作的具体实玎ͼ

              视图?/span>viewQM框架上,我们使用的是frameset来实玎ͼ不过听老师说现在流行的使用jap?/span>includel合div{来实现面框架。在之后~码中,因ؓ(f)frameset出现了一个问题,是用来验证拦截的过滤器无法h整个框架Q得拦截后的页面只能显C在被操作的frame中。但?/span>frameset的好处是框架分离的很好,在实?/span>jsp~码中几乎完全不用去考虑框架。我不知道用include是否能做到。以前虽焉使用?/span>includeQ但是是在每个页面中都要加入include。有时还?x)媄响布局。在~码q程中,我们?/span>JavaScript实现了很多很好用的效果,比如选择旉的窗口,表单的正则表辑ּ验证Q表格的变色效果{,装到公qjs文g中,调用h很方ѝ在q次jap~程中,我终于由最初的在页面中堆满java代码Q{变ؓ(f)只用一?/span>JSTLQ?/span>EL语句?/span>struts标签处理逻辑Q美观了面~码Q同时让面更专注于昄层。但q里我对EL语句和纯标签语句又有些难以取舍?/span>EL语句在页面代码中虽然不如单用标签昑־Ua(b)观Q但?/span>EL表达式简U的表现风格让实现和l护变得Ҏ(gu)了很多?/span>

              控制?/span>Action的设计一是用了DispatchActionQ将多个ActioncdqӞ方便了管理。二在公共部分中定义?/span>BaseActionQ由q个cdl承struts?/span>DispatchAction。之后我们的所?/span>Action都去l承q个BaseAction。这样在需要对Actionq行l一处理Q以?qing)定义一些供Action公共使用的方法时可以在q个BaseAction中修攏V虽然在q次目中,BaseAction只定义了个用于处理字Wؕ码的Ҏ(gu)公共使用Q但由此卛_瞥见对于更复杂的Actionl一处理q种设计也能从容应对。由于是分模块进行,于是我们?/span>struts?/span>xml配置文g也分为对应各个模块,使用?/span>xml的配|方式,而这也需要对命名规则{很多方面有更好的协调和l一。在q次控制层的实现中,我v初还是像以前一样对很多不同的验证,模型层返回的异常都在Action中处理ƈ跌{。在之后的修改中Q逐渐这些处理都改至模型?/span>Manager中,?/span>Manager取用持久层的操作Ҏ(gu)Q实现所有业务逻辑处理?/span>

              具体实现功能的模型层中,我们为每?/span>DAO定义了接口和实现c,q也是我W一ơ将接口真正应用到程序中。同时我们在每个模块?/span>DAO中应用了工厂模式Q由一?/span>factorycd现所?/span>DAO的单例生成。之后在Manager中调用这个实例实现操作。而这?/span>Manager同时本n也是单例实现的,?/span>Actionq行静态调用。可见其中实?/span>Action控制层和DAO持久层交互的是Manager模型层,q将两者严格的分离开来。同时在Manager中还集合处理了所有来至业务功能逻辑和底部数据库的所有异常。因为数据库的连接也是在Manager中创建的Q但q不影响持久层的独立性,因ؓ(f)q是考虑?/span>有时一ơ业务操作会(x)q行多个数据库操作、调用多个数据库Ҏ(gu)Q将q接在模型层中创建更便于数据库的高效使用。模型层中对异常的集中处理,更简化了上下控制层和模型层的实现Q其更专注于各自的业务实现。在异常处理上,使用?/span>struts的一U异常处理机Ӟ?/span>xml配置文g中进行异帔R|。这样在Manager中将异常抛出Q由struts实现异常跌{和提C。同时我们还自定义的异常处理类也作为公q公用Q这样就可以在需要的时候对异常q行l一的处理?/span>

              在持久层的实CQ我们用了tomcat数据库连接池Q在~码中将数据库连接等Ҏ(gu)装到公q中,q且连接数据源作静态单例实玎ͼ以提高数据库调用的效率。在DAO的设计方面,我们主要针对实际的操作对象和对应的数据库q行DAO层方法的装。每个方法尽量实C些简单的操作。这样在不同模块直接有数据和操作交互的时候,只在模型层只要去各个模块?/span>DAO中取得需要的Ҏ(gu)加以l合Q实现自q业务处理。很好的提高了代码的复用性和可维护性,降低了各个模块间数据交互处理的设计复杂度?/span>

    //文采太烂Q?nbsp;l尾的感慨段׃发了



wesley1987 2008-12-23 21:38 发表评论
]]>
一个引入JavaScript问题http://www.aygfsteel.com/wzl002/articles/246473.htmlwesley1987wesley1987Mon, 15 Dec 2008 11:21:00 GMThttp://www.aygfsteel.com/wzl002/articles/246473.htmlhttp://www.aygfsteel.com/wzl002/comments/246473.htmlhttp://www.aygfsteel.com/wzl002/articles/246473.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/246473.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/246473.html
在HTML的head?引入外部scriptQ?br />         <script src="<%=path%>/js/service.js" type="text/javascript" ></script>
之后又写内部script (内容无关)
<script type="text/javascript">
  function SecondType(){
  if (document.check.classTwo.value==1){
   stext.style.display="inline";
  }

  else{
   stext.style.display="none";
  }

 }

 function FirstType(select,forwards){
  if (document.check.classOne.value==1){
    ftext.style.display = "inline";
    document.check.classTwo.value=1;
    SecondType();
  }
else{
   ftext.style.display = "none";
   window.location="<%=path%>/service/good.do?operation=getClass&classone="+select.value+"&forward="+forwards; 
  }

 }

</script>
一切正常,
但是 如果head中的改ؓ(f)
<script src="<%=path%>/js/service.js" type="text/javascript"  />变了下结?br /> 引入的外部scriptȝ好用Q但是下面的内部script完全不执行。ƈ伴随很多奇怪的昄效果?

wesley1987 2008-12-15 19:21 发表评论
]]>
q问题详解http://www.aygfsteel.com/wzl002/articles/246458.htmlwesley1987wesley1987Mon, 15 Dec 2008 09:09:00 GMThttp://www.aygfsteel.com/wzl002/articles/246458.htmlhttp://www.aygfsteel.com/wzl002/comments/246458.htmlhttp://www.aygfsteel.com/wzl002/articles/246458.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/246458.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/246458.html http://www.diybl.com/course/3_program/java/javajs/200829/99730.html

Q?Q前aQ?br /> 解决webE序的国际化问题Q必dM地方使用UTF-8对字W进行编码。(包括Q数据库讄为:(x)UTF-8Qweb面也要讄为:(x)UTF-8Q?br /> q样做的好处在于可以解决在web上不止中文字W编码问题,所有的字符~码都统一使用UTF-8,实现了语a的国际化。同时在保存数据?br /> 数据库时候也省去了编码{换的问题?br /> 在JSP或JSF应用中用到ServletQ我们通过使用Servletqo(h)器进行编码{换,也就是制定编码{换ؓ(f)UFT-8?/p>

Q?QServlet和JSPqo(h)器Filter介:(x)
servlet API?.3版本中最重要的一个新功能是能够为servlet和JSP面定义qo(h)器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一U功能强大且标准的替代品?br /> qo(h)器是一个程序,它先于与之相关的servlet或JSP面q行在服务器上。过滤器可附加到一个或多个servlet或JSP面上,q且可以查进入这些资源的h信息。在q之后,qo(h)器可以作如下的选择Q?br /> - 以常规的方式调用资源Q即Q调用servlet或JSP面Q?br /> - 利用修改q的h信息调用资源?br /> - 调用资源Q但在发送响应到客户机前对其q行修改
- L该资源调用,代之以{到其他的资源Q返回一个特定的状态代码或生成替换输出?br /> qo(h)器提供了几个重要好处?br />      首先Q它以一U模块化的或可重用的方式装公共的行为。你?0个不同的serlvet或JSP面Q需要压~它们的内容以减下载时间吗Q没问题Q构造一个压~过滤器Q参阅第11节)Q然后将它应用到30个资源上卛_?br />     其次Q利用它能够高U访问决{与表现代码相分R这对于JSP特别有h(hun)|其中一般希望将几乎整个面集中在表CQ而不是集中在业务逻辑上。例如,希望d来自某些站点的访问而不用修改各面Q这些页面受到访问限Ӟ吗?没问题:(x)建立一个访问限制过滤器Q参阅第8节)q把它应用到惌限制讉K的页面上卛_?br />     最后,qo(h)器你能够对许多不同的资源进行批量性的更改。你有许多现存资源,q些资源除了公司名要更改外其他的保持不变Q能办到么?没问题:(x)构造一个串替换qo(h)器(参阅W?0节)Q只要合适就使用它?br />     但要注意Q过滤器只在与servlet规范2.3版兼容的服务器上有作用。如果你的Web应用需要支持旧版服务器Q就不能使用qo(h)器?br /> 建立一个过滤器涉及(qing)下列五个步骤Q?br /> 1、徏立一个实现Filter接口的类。这个类需要三个方法,分别是:(x)doFilter、init和destroy。doFilterҎ(gu)包含主要的过滤代码,initҎ(gu)建立讄操作Q而destroyҎ(gu)q行清楚?br /> 2、在doFilterҎ(gu)中放入过滤行为。doFilterҎ(gu)的第一个参Cؓ(f)ServletRequest对象。此对象l过滤器提供了对q入的信息(包括表单数据、cookie和HTTPh_(d)的完全访问。第二个参数为ServletResponseQ通常在简单的qo(h)器中忽略此参数。最后一个参Cؓ(f)FilterChainQ如下一步所qͼ此参数用来调用servlet或JSPc?br /> 3、调用FilterChain对象的doFilterҎ(gu)。Filter接口的doFilterҎ(gu)取一个FilterChain对象作ؓ(f)它的一个参数。在调用此对象的doFilterҎ(gu)ӞȀzM一个相关的qo(h)器。如果没有另一个过滤器与servlet或JSP面兌Q则servlet或JSP面被激zR?br /> 4、对相应的servlet和JSP面注册qo(h)器。在部v描述W文Ӟweb.xmlQ中使用filter和filter-mapping元素?br /> 5、禁用激zdservlet。防止用户利用缺省servlet URLl过qo(h)器设|?br />
doFilterҎ(gu)Q?/p>

1 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
2  throws ServletException, IOException
3 {
4  HttpServletRequest req = (HttpServletRequest)request;
5  System.out.println(req.getRemoteHost() + " tried to access " +req.getRequestURL() +" on " + new Date() + ".");
6  chain.doFilter(request,response);
7 }


在web.xml中进行部|?br /> 分别是:(x)filter和filter-mapping。filter元素向系l注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL?/p>

<filter>
<filter-name>ChangeCodeFilter</filter-name>
<display-name>ChangeCodeFilter</display-name>
<description></description>
<filter-class>com.cnc.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/SetCharacterEncodingFilter</url-pattern>
</filter-mapping>

1.filter元素
filter元素位于部v描述W文Ӟweb.xmlQ的前部Q所有filter-mapping、servlet或servlet-mapping元素之前。filter元素h如下六个可能的子元素Q?br />  :icon  q是一个可选的元素Q它声明IDE能够使用的一个图象文件?br />  : filter-name  q是一个必需的元素,它给qo(h)器分配一个选定的名字?br />  : display-name  q是一个可选的元素Q它l出IDE使用的短名称?br />  : description  q也是一个可选的元素Q它l出IDE的信息,提供文本文档?br />  : filter-class  q是一个必需的元素,它指定过滤器实现cȝ完全限定名?br />  : init-param  q是一个可选的元素Q它定义可利用FilterConfig的getInitParameterҎ(gu)d的初始化参数。单个过滤器元素可包含多个init-param元素?br /> 2.filter-mapping元素
  filter-mapping元素位于web.xml文g中filter元素之后serlvet元素之前。它包含如下三个可能的子元素Q:(x)
  filter-name q个必需的元素必M用filter元素声明时给予过滤器的名U相匚w?br />   url-pattern  此元素声明一个以斜杠Q?Q开始的模式Q它指定qo(h)器应用的URL。所有filter-mapping元素中必L供url-pattern或servlet-name。但不能对单个filter-mapping元素提供多个url-pattern元素V如果希望过滤器适用于多个模式,可重复整个filter-mapping元素?br /> :servlet-name  此元素给Z个名Uͼ此名U必M利用servlet元素l予servlet或JSP面的名U相匚w。不能给单个filter-mapping元素提供多个servlet-name元素V如果希望过滤器适合于多个servlet名,可重复这个filter-mapping元素?/p>

Q?Q在Rational Application Developer 中的建立字符转换qo(h)器:(x)
1.新徏-web-qo(h)器:(x)SetCharacterEncodingFilter
?x)在web.xml中生如上代码:(x)

2.在过滤器的doFilterҎ(gu)中添加如下代码:(x)

public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
  arg0.setCharacterEncoding(
"UTF-8"); //讑֮字体~码为UTF-8
  arg2.doFilter(arg0, arg1);// 传递控制到下一个过滤器
 }

3.在web.xml中进行部|?br /> 在web.xml的过滤器-~辑器中选择Qservlet 映射 - d - Faces Servlet
?x)在web.xml中生如下代码:(x)
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

Q?Q其他参考信?br /> tomcat下中文的d解决
(一)    JSP面上是中文Q但是看的是后是qQ?br /> 解决的办法就是在JSP面的编码的地方<%@ page language="java" contentType="text/html;charset=GBK" %>Q因为Jsp转成Java文g时的~码问题Q默认的话有的服务器是ISO-8859-1Q如果一个JSP中直接输入了中文QJsp把它当作ISO8859-1来处理是肯定有问题的Q这一点,我们可以通过查看Jasper所生成的Java中间文g来确?br /> (?    当用Request对象获取客户提交的汉字代码的时候,?x)出Cؕ码:(x)
解决的办法是Q要配置一个filter,也就是一个Servelet的过滤器Q代码如下:(x)

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
/**
 * Example filter that sets the character encoding to be used in parsing the
 * incoming request
 
*/
public class SetCharacterEncodingFilter implements Filter {
    
/**
     * Take this filter out of service.
     
*/
    
public void destroy() {
    }
    
/**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     
*/
    
public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain)
throws IOException,ServletException {
    request.setCharacterEncoding(
"GBK");
    
// 传递控制到下一个过滤器
    chain.doFilter(request, response);
    }
    
public void init(FilterConfig filterConfig) throws ServletException {
    }
}

 

 

配置web.xml

<
filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

如果你的q是出现q种情况的话你就往下看看是不是你出CW四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的Q如果是的话Q你q看第四中解决的办法?br /> q有是对含有汉字字W的信息q行处理Q处理的代码是:(x)
package dbJavaBean;
public class CodingConvert
{  
 public CodingConvert()
 {
  //
 }
 public String toGb(String uniStr){
     String gbStr = "";
     if(uniStr == null){
   uniStr = "";
     }
     try{
   byte[] tempByte = uniStr.getBytes("ISO8859_1");
   gbStr = new String(tempByte,"GB2312");
     }
  catch(Exception ex){
    }
     return gbStr;
 }
  
 public String toUni(String gbStr){
     String uniStr = "";
     if(gbStr == null){
   gbStr = "";
     }
     try{
   byte[] tempByte = gbStr.getBytes("GB2312");
   uniStr = new String(tempByte,"ISO8859_1");
     }catch(Exception ex){
    }
    return uniStr;
 }
}
你也可以在直接的转换Q首先你获取的字符串用ISO-8859-1q行~码Q然后将q个~码存放C个字节数l中Q然后将q个数组转化成字W串对象可以了Q例如:(x)
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话Q提交的M信息都能正确的显C?br /> (?    在Formgeth在服务端用request. getParameter(“name”)时返回的是ؕ码;按tomcat的做法设|Filter也没有用或者用request.setCharacterEncoding("GBK");也不用问题是出在处理参C递的Ҏ(gu)上:(x)如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)Ҏ(gu)q行处理的话前面即是写了:(x)
request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");
也是不v作用的,q回的中文还是ؕ码!Q!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就O(jin)K了?br /> 同样Q在用两个JSP面处理表单输入之所以能昄中文是因为用的是postҎ(gu)传递的Q改成getҎ(gu)依旧不行?br /> 由此可见在servlet中用doGet()Ҏ(gu)或是在JSP中用getҎ(gu)q行处理要注意。这毕竟涉及(qing)到要通过览器传递参C息,很有可能引v常用字符集的冲突或是不匹配?br /> 解决的办法是Q?br /> 1) 打开tomcat的server.xml文gQ找到区块,加入如下一行:(x)
URIEncoding=”GBK”
完整的应如下Q?
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
2)重启tomcat,一切OK?br /> 需要加入的原因大家可以ȝI?$TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的q个文g可以知道原因了。需要注意的是:(x)q个地方如果你要是用UTF-8的时候在传递的q程中在Tomcat中也是要出现q的情况,如果不行的话换别的字符集?br /> (?    JSP面上有中文Q按钮上面也有中文,但是通过服务器查看页面的时候出Cؕ码:(x)
     解决的办法是Q首先在JSP文g中不应该直接包含本地化的消息文本Q而是应该通过<bean:message>标签从Resource Bundle中获得文本。应该把你的中文文本攑ֈApplication.properties文g中,q个文g攑֜WEB-INF/classes/*下,例如我在面里有姓名Q年龄两个label,我首先就是要Z个Application.propertiesQ里面的内容应该是name=”姓名” age=”q龄”,然后我把q个文g攑ֈWEB-INF/classes/properties/下,接下来根据Application.properties文gQ对他进行编码{化,创徏一个中文资源文Ӟ假定名字是Application_cn.properties。在JDK中提供了native2ascii命o(h)Q他能够实现字符~码的{换。在DOS环境中找C攄Application.properties的这个文件的目录Q在DOS环境中执行一下命令,生成按GBK~码的中文资源文件Application_cn.propertiesQnative2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命o(h)以后生成如下内容的Application_cn.properties文gQname=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配|:(x)<message-resources parameter="properties.Application_cn"/>。到q一步,基本上完成了一大半Q接着你就要在JSP面上写<%@ page language="java" contentType="text/html;charset=GBK" %>,到名字的那个label是要?lt;bean:message key=”name”>,q样的化在页面上出现的时候就?x)出C文的姓名Q年龄这个也是一P按钮上汉字的处理也是同样的?br /> (?    写入到数据库是ؕ码:(x)
解决的方法:(x)要配|一个filter,也就是一个Servelet的过滤器Q代码如同第二种时候一栗?br /> 如果你是通过JDBC直接链接数据库的时候,配置的代码如下:(x)jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBKQ这样保证到数据库中的代码是不是q?br /> 如果你是通过数据源链接的化你不能按照q样的写法了Q首先你p写在配置文g中,在tomcat 5.0.19中配|数据源的地Ҏ(gu)在C:\Tomcat 5.0\conf\Catalina\localhostq个下面Q我建立的工E是workshopQ放|的目录是webapp下面,workshop.xml的配|文件如下:(x)
<!-- insert this Context element into server.xml -->
<Context path="/workshop" docBase="workshop" debug="0"
reloadable="true" >
  <Resource name="jdbc/WorkshopDB"
               auth="Container"
               type="javax.sql.DataSource" />
  <ResourceParams name="jdbc/WorkshopDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>

maxActive</name>
      <value>100</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>
   
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>
      <parameter>
     <name>username</name>
     <value>root</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value></value>
    </parameter>
    <!-- Class name for mm.mysql JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
</parameter>
   <parameter>
      <name>url</name>
 <value><![CDATA[jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK]]></value>
    </parameter>
  </ResourceParams>
</Context>
_体的地方要特别的注意,和JDBC直接链接的时候是有区别的Q如果你是配|正的化,当你输入中文的时候到数据库中是中文了,有一点要注意的是你在昄数据的页面也是要?lt;%@ page language="java" contentType="text/html;charset=GBK" %>q行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的Q写了一个Form的时候把他改成了一个jspQ这h一个地方要注意了,那就是在Dreamver中Action的提交方式是request的,你需要把他该q来Q因为在jsp的提交的q程中紧紧就是POST和GET两种方式Q但是这两种方式提交的代码在~码斚wq是有很大不同的Q这个在后面的地方进行说?


文章出处Qhttp://www.diybl.com/course/3_program/java/javajs/200829/99730_3.html



wesley1987 2008-12-15 17:09 发表评论
]]>
2U中文ؕ码处?-Ҏ(gu)和过滤器http://www.aygfsteel.com/wzl002/articles/246416.htmlwesley1987wesley1987Mon, 15 Dec 2008 06:46:00 GMThttp://www.aygfsteel.com/wzl002/articles/246416.htmlhttp://www.aygfsteel.com/wzl002/comments/246416.htmlhttp://www.aygfsteel.com/wzl002/articles/246416.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/246416.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/246416.html
    public static String changeStr(String str){    
        
if(str==null)return null;
        String temp
=null;
        
try {
            temp 
= new String(str.getBytes("ISO-8859-1"));
        } 
catch (UnsupportedEncodingException e) {
            
            e.printStackTrace();
        }
        
return temp;
    }

  我们这个方法作为静态写入了BaseAction中,使所有的Ҏ(gu)都能调用?br />     String offername = changeStr(request.getParameter("offername"));
q种Ҏ(gu)的好处是Q?无论是POST/GET的页面表单,q是重写的URL他都一q处理了。写h也简?br /> 可问题是Q对于所有页面参数几乎都要调用一下这个方法,对于大的工程很不合适了?br />                 特别是参数很多的Form中,所有的参数都要用它处理一ơ。虽然我把这个处理写入了验证中自动调用?br />             但是q是感觉比较ȝ?/p>

 

? 使用 qo(h)?Filter
1 新徏一个java文gQSetCharacterEncodingFilter


 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
public class CharacterEncodingFilter implements Filter {
 
    
private FilterConfig config;
    
private String encoding;
 
    
public void destroy() {
        
// 销毁配|?/span>
        this.config = null;
 
    }
 
    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) 
throws IOException, ServletException {
        
// 如果~码已经配置, 则用该~码.
        if(this.encoding != null) {
            request.setCharacterEncoding(
this.encoding);
        }
        
// 资源链C一Filter, 如果q是最后一个Filter, 则将资源铑ֈ目的位置.
        chain.doFilter(request, response);
 
    }
 
    
public void init(FilterConfig config) throws ServletException {
        
// 方便销毁配|?/span>
        this.config = config;
        
// dweb.xml中CharacterEncodingFilter内的初始~码参数
        this.encoding = this.config.getInitParameter("encoding");
 
    }

2 在web.xml?根节点下加入
<!-- 讄request~码方式  -->
   
<filter>
        
<filter-name>Set Character Encoding</filter-name>
        
<filter-class>com.neusoft.struts.platform.SetCharacterEncodingFilter</filter-class>
        
<init-param>
            
<param-name>encoding</param-name>
            
<param-value>GB2312</param-value>
        
</init-param>
        
<init-param>
            
<param-name>ignore</param-name>
            
<param-value>true</param-value>
        
</init-param>
    
</filter>
    
<filter-mapping>
        
<filter-name>Set Character Encoding</filter-name>
        
<url-pattern>*</url-pattern>
   
</filter-mapping>

使用qo(h)?可谓是一x逸,所有页面表单是POST的请求,x有struts中的Form基本都OK了?br /> 但注意:(x)它也仅对POSTh有效。对于GETh和重写URL的请求,它也?x)去处理Q但׃他们和POST的编码区别,
qo(h)器会(x)把他们过滤成Q?

  解决Ҏ(gu)Q?br /> 扑ֈTomcat安装目录内conf文g夹下的server.xml文g,
l其中的q接器元素Connectord属? URIEncoding, 属性gؓ(f): UTF-8.

1  <Connector port="8080" protocol="HTTP/1.1" 
2                connectionTimeout="20000" 
3                redirectPort="8443"
4                URIEncoding="UTF-8" />

 

关于q详细问题卌冻I?q问题详解

wesley1987 2008-12-15 14:46 发表评论
]]>
DispatchAction的?/title><link>http://www.aygfsteel.com/wzl002/articles/244408.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Thu, 04 Dec 2008 09:12:00 GMT</pubDate><guid>http://www.aygfsteel.com/wzl002/articles/244408.html</guid><wfw:comment>http://www.aygfsteel.com/wzl002/comments/244408.html</wfw:comment><comments>http://www.aygfsteel.com/wzl002/articles/244408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wzl002/comments/commentRss/244408.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wzl002/services/trackbacks/244408.html</trackback:ping><description><![CDATA[<p>模块的实现写的差不多了,可是 每个面的活动都要一个ActionQ?个对象的增删Ҏ(gu) 有14个Action。终于今天组长发飙了Q要Ҏ(gu)DispatchAction。现上网查查怎么用。。找C本博客中的文章放入收藏了?/p> <p>http://www.aygfsteel.com/jxhkwhy/archive/2007/01/21/95177.html<br /> <br /> 把增删改查都攑ֈ一个Action中,然后在XML中ؓ(f)每个Ҏ(gu)配一?br /> <span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'"><</span> <span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'">action</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'"><span>      </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">attribute</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"addUserForm"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">input</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"/addUser.jsp"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">name</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"addUserForm"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">parameter="method"<O:P></O:P></span> </strong></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">path</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"/addUser"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><span lang="EN-US" style="font-size: 9pt; color: #7f007f; font-family: 'courier new'">scope</span> <span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'">=</span> <span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'">"request"</span> <span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><O:P></O:P></span></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: #2a00ff; font-family: 'courier new'"><span>      </span></span><strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">type="com.why.struts.action.UserAction" ><O:P></O:P></span> </strong></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 'courier new'"><span>    </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'"></</span> <span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 'courier new'">action</span> <span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 'courier new'">></span> <br /> 其实如果使用的FormQname=“xxxForm”Q是一L(fng)话,几个Ҏ(gu)配一?lt;action>也行?span style="color: red">用多个的时候,注意path不要写成一L(fng)了?/span><br /> 注意<strong><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 'courier new'">parameter</span></strong>的|作ؓ(f)JSP跌{的do的参数就可以了。基本上配置斚w 和一?lt;action>区别是含有同一?span style="color: red">type</span>地址?strong><span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'"><span style="color: #ff0000"><strong><span lang="EN-US" style="font-size: 9pt; font-family: 'courier new'">parameter</span></strong><br /> </span></span></strong></p> <p class="MsoNormal" style="font-size: 14pt; margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span lang="EN-US" style="font-size: 9pt; font-family: 宋体"><html:link href="addUser.do?<strong><span style="color: red">method</span></strong>=<span style="color: blue">addUser</span>">Add User</html:link><O:P></O:P></span> <br /> <br /> 参数gؓ(f)Action里的Ҏ(gu)名,如这?对应?Action中的<br /> addUser (ActionMapping mapping,ActionForm form,<O:P></O:P> HttpServletRequest request,HttpServletResponse responseQ?/p> <br />  execute׃用在写了。虽然不知道写了?x)怎么栗?nbsp; <br /> 下面是我自己的struts-config.xml配置Q?nbsp;<br />             实现offer的增Q删Q改Q查。其中查和删的配|写在了一赗所以是 3个ActionQ注意其 pathQtype Q和parameter属性。调用时用parameter的值区分。这里还可以看到定向到offerSearch的URL的用?br /> <span style="font-size: 10pt; color: red">q里的name虽然相同Q但是分开的原因是 我需要inputq个属性作为异常的转回面。查询和删除都不用name 而且异常提示面相同Q所以合q?/span> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">    </span><span style="color: #0000ff"><</span><span style="color: #800000">action<br />       </span><span style="color: #ff0000">input</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000"><br />       parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />       path</span><span style="color: #0000ff">="/offer"</span><span style="color: #ff0000"><br />       scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />       type</span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #0000ff">></span><span style="color: #000000"><br />       </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;offername="</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />       </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="show"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/service/offerSearch.jsp"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">/></span><span style="color: #000000"><br />     </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span><span style="color: #000000"><br />     </span><span style="color: #0000ff"><</span><span style="color: #800000">action<br />       </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />       input</span><span style="color: #0000ff">="/service/offerNew.jsp"</span><span style="color: #ff0000"><br />       parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />       name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />       path</span><span style="color: #0000ff">="/offerAdd"</span><span style="color: #ff0000"><br />       scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />       type</span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #0000ff">></span><span style="color: #000000"><br />       </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;offername="</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />     </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span><span style="color: #000000"><br />     </span><span style="color: #0000ff"><</span><span style="color: #800000">action <br />      </span><span style="color: #ff0000">attribute</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />     name</span><span style="color: #0000ff">="OfferForm"</span><span style="color: #ff0000"><br />     parameter</span><span style="color: #0000ff">="operation"</span><span style="color: #ff0000"><br />     path</span><span style="color: #0000ff">="/offerUpdate"</span><span style="color: #ff0000"> <br />     input</span><span style="color: #0000ff">="/service/offerUpdate.jsp"</span><span style="color: #ff0000"><br />     scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />     type </span><span style="color: #0000ff">="com.neusoft.struts.service.action.OfferAction"</span><span style="color: #ff0000"> </span><span style="color: #0000ff">></span><span style="color: #000000"><br />      </span><span style="color: #0000ff"><</span><span style="color: #800000">forward </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000"> path</span><span style="color: #0000ff">="/offer.do?operation=offerSearch&amp;offername="</span><span style="color: #0000ff">/></span><span style="color: #000000"><br />     </span><span style="color: #0000ff"></</span><span style="color: #800000">action</span><span style="color: #0000ff">></span></div> <br /> 对应的DispatchAction    Q? <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000"><br /> </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> OfferAction </span><span style="color: #0000ff">extends</span><span style="color: #000000"> DispatchAction {<br />     <br />     <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward offerSearch(ActionMapping mapping, ActionForm form,<br />             HttpServletRequest request, HttpServletResponse response) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception {<br />         <br />         String offername </span><span style="color: #000000">=</span><span style="color: #000000"> changeStr(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">offername</span><span style="color: #000000">"</span><span style="color: #000000">));<br />         request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">offername</span><span style="color: #000000">"</span><span style="color: #000000">, offername);<br />         <br />         HttpSession session </span><span style="color: #000000">=</span><span style="color: #000000"> request.getSession();<br />         IPageList pageList;<br /> <br />         </span><span style="color: #0000ff">if</span><span style="color: #000000">(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">page</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">){            </span><span style="color: #008000">//</span><span style="color: #008000">来自查询表单的请?/span><span style="color: #008000"><br /> </span><span style="color: #000000">            pageList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> PageList(</span><span style="color: #000000">1</span><span style="color: #000000">,OfferManager.getInstance().getOfferList(offername));<br />             session.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">, pageList.getResultList());<br />             request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">pageList</span><span style="color: #000000">"</span><span style="color: #000000">, pageList);<br />         }<br />         </span><span style="color: #0000ff">else</span><span style="color: #000000">{                                            </span><span style="color: #008000">//</span><span style="color: #008000">来自分页链接的请?/span><span style="color: #008000"><br /> </span><span style="color: #000000">            </span><span style="color: #0000ff">int</span><span style="color: #000000"> page </span><span style="color: #000000">=</span><span style="color: #000000"> Integer.parseInt(request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">page</span><span style="color: #000000">"</span><span style="color: #000000">));<br />             pageList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> PageList(page,OfferManager.getInstance().getOfferList(offername));<br />             session.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">list</span><span style="color: #000000">"</span><span style="color: #000000">, pageList.getResultList());<br />             request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">pageList</span><span style="color: #000000">"</span><span style="color: #000000">, pageList);<br />         }        <br />         </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">show</span><span style="color: #000000">"</span><span style="color: #000000">);<br />     }<br /> <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward offerAdd(ActionMapping mapping, ActionForm form,<br />             HttpServletRequest request, HttpServletResponse response) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception {<br /> <br />         OfferForm offer </span><span style="color: #000000">=</span><span style="color: #000000"> (OfferForm) form;<br />         <br />         OfferManager.getInstance().addOffer(offer);<br />         <br />         </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</span><span style="color: #000000">"</span><span style="color: #000000">);<br />     }<br /> <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward offerUpdate(ActionMapping mapping, ActionForm form,<br />             HttpServletRequest request, HttpServletResponse response) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception {<br />         <br />         OfferForm offer </span><span style="color: #000000">=</span><span style="color: #000000"> (OfferForm) form;<br /> <br />         OfferManager.getInstance().offerUpdate(offer);<br />         </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         <br />     }<br /> <br />     </span><span style="color: #0000ff">public</span><span style="color: #000000"> ActionForward offerDelete(ActionMapping mapping,ActionForm Form,<br />                     HttpServletRequest request,HttpServletResponse response)</span><span style="color: #0000ff">throws</span><span style="color: #000000"> Exception{<br />         <br />         String id </span><span style="color: #000000">=</span><span style="color: #000000"> request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">offerId</span><span style="color: #000000">"</span><span style="color: #000000">);<br />         </span><span style="color: #0000ff">if</span><span style="color: #000000">(id</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">){<br />             OfferManager.getInstance().offerDelete(Integer.parseInt(id));<br />         }<br />         </span><span style="color: #0000ff">return</span><span style="color: #000000"> mapping.findForward(</span><span style="color: #000000">"</span><span style="color: #000000">success</span><span style="color: #000000">"</span><span style="color: #000000">);<br />     }<br /> }</span></div> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/wzl002/aggbug/244408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wzl002/" target="_blank">wesley1987</a> 2008-12-04 17:12 <a href="http://www.aygfsteel.com/wzl002/articles/244408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于struts-config.xml.http://www.aygfsteel.com/wzl002/articles/243032.htmlwesley1987wesley1987Thu, 27 Nov 2008 08:53:00 GMThttp://www.aygfsteel.com/wzl002/articles/243032.htmlhttp://www.aygfsteel.com/wzl002/comments/243032.htmlhttp://www.aygfsteel.com/wzl002/articles/243032.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/243032.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/243032.html
在struts-config.xml   <action>里的name属性D和你的formbean里的name属性D一?validate属性D为true,要是没写默认为true

看来有必要详看下struts-config.xml的配|。以下是复制于网上的“struts-config.xml详解”Q?br />  http://www.9php.com/college/net/java/qt/2006/07/522422119091.html
Struts的核心是struts-config.xml配置文gQ在q个文g里描qC所有的Strutslg。在q里包括配置主要的组件及(qing)ơ要的组Ӟ下面是struts-config.xml包含主要元素的内容:(x)

一?       struts-config.xml的主要元素:(x)
<?xml  version=”1.0”  encoding=”ISO-8859-1”?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
     
     <data-sources>
             <data-source>
             </data-source>
     </data-sources>

     <form-beans>
             <form-bean  name =“ ”  type=“ ”   / >
     </form-beans>

    <global-exceptions />

     <global-forwards>
             <forward  /  >
     </global-forwards>

     <action-mappings>
             <action  /  >
     </action-mappings>

     <controller  /  >

     <message-resources  /  >

     <plug-in  />

</struts-config>
注意Q?span style="color: #ff0000">以上各元素的序是非帔R要的Q你的struts-config.xml配置文g必须按照q个序q行配置Q否则在你的容器启动的时候就?x)出错?br />

二?       struts-config.xml的子元素Q?/strong>
1Q?lt;icon / >子元?br />      它包?lt;small-icon  /  >?lt;large-icon  /  >Q它的作用是囑Ş化其父元素,<small-icon/>的内Ҏ(gu)一?6x16的图像文Ӟ?lt;large-icon/>的内Ҏ(gu)一?2x32的图像文件。如下例子:(x)
     <icon>
<small-icon>
                           /images/smalllogo.gif
</small-icon>
<large-icon>
       /images/largelogo.gif
</large-icon>
</icon>
2Q?lt;display-name  /  >子元?br />      它提供对父元素的短文字(short  textualQ描qC息,如下Q?br />      <display-name>
                     short  textual  discription  of  its  parent  element
     </display-name>
3Q?lt;description  /  >子元?br />      它提供对父元素的完全Qfull-length  textualQ的描述信息Q如下:(x)
<description>
full-length  textual  discription  of  its  parent  element
</description>
4Q?lt;set-property  /  >子元?br />              它用来设|它的父元素中设定的JavaBean的属性|它一般用在指定的GenericDataSource  属性,扩展的ActionMappings以及(qing)扩展? global  forwards。如下:(x)
             <set-property  
                     property="name  of  bean  property"              
value="value  of  bean  property"  />
                 例如Q?br />                  <set-property  property="driverClass"  value="org.gjt.mm.mysql.Driver"  />
               <set-property  property="user"  value="admin"/>
               <set-property  property="maxCount"  value="4"/>
<set-property  property="minCount"  value="2"/>  
<set-property  property="password"  value=""/>  
<set-property  property="url"  value="jdbc:mysql://localhost:3306/struts"/>


三?       配置JDBC数据?/strong>
光|Ş式如下:(x)
<data-sources>
<data-source>
<set-property  property="driverClass"  value="fully  qualified  path  of  JDBC  driver"/>
<set-property  property="url"  value="data  source  URL"/>
<set-property  property=”mincount”  value="the  minimum  number  of  connections  to  open"/>
<set-property  property="password"  value="the  password  used  to  create  connections"/>
<set-property  property="user"  value="the  username  used  to  create  connections"/>
</data-source>
</data-sources>
<data-source>的属性及(qing)其描qC息如下:(x)
Key        l定在ServletContext上的DataSource实例的烦引键Q若不设定则~省为Action.DATA_SOURCE_KEYQ如果在应用E序中有多于一个的DataSourceQ则必须讄Key的倹{?br /> DriverClass        所用的JDBC驱动c?必须?如:(x)com.microsoft.jdbc.sqlserver.SQLServerDriver
url        所用的JDBC的URL(必须?如:(x)jdbc:microsoft:sqlserver://xg088:1433
MaxCount        同时打开的最大连l数Q缺省gؓ(f)2(可选的)
MinCount        同时打开的最连l数Q缺省gؓ(f)1(可选的)
User        q结到数据库的用户名(必须?
Password        q结到数据库的密?必须?
Description        关于DataSource的描qC?可选的)
ReadOnly        如果设ؓ(f)trueQ则表示该连l是只读的,~省为false?可选的)
LoginTimeout        创徏q结的最大允许时_(d)以秒为单位?可选的)
AutoCommit        如果为trueQ则每次execute之后?x)强制回滚。缺省ؓ(f)true?可选的)
举例说明Q?br /> <data-sources>
       <data-source>
               <set-property  property=”key”  value=”  value="WILEY_DATA_SOURCE"  />
                <set-property  property="driverClass"  value="org.gjt.mm.mysql.Driver"  />
                <set-property  property="url"  value="jdbc:mysql://localhost/wileyusers"  />
                <set-property  property="maxCount"  value="5"/>
                <set-property  property="minCount"  value="1"/>
                <set-property  property="user"  value="sa"/>
                <set-property  property="password"  value="yourpassword"/>
        </data-source>
</data-sources>


四?       配置FormBean
<form-bean  /  >用来定义要l定到Action的FormBean的实例。语法如下:(x)
<form-beans>
<form-bean  name="name  used  to  uniquely  identify  a  FormBean"   type=”fully  qualified  class  name  of  FormBean"/>
                 </form-beans>
例:(x)
        <form-beans>
            <form-bean  name="lookupForm"  type="wiley.LookupForm"  />
        </form-beans>



五?       配置全局转发
全局转发可以定义几个<forward/>子元素,struts首先?x)?lt;action-mappings>元素中找对应?lt;forward>Q若找不刎ͼ则到全局转发配置中找。语法如下:(x)
<global-forwards>
<forward  name="unique  target  identifier"  
path="context-relative  path  to  targetted  resource  "/>
</global-forwards>
除了name?qing)path属性之外,q有一个redirect属性,如果redirect设ؓ(f)true的时候,则用HttpServletResponse.sendRedirect()Ҏ(gu)Q否则用RequestDispatcher.forward()Ҏ(gu)Q缺省ؓ(f)false?br /> 注:(x)如果为trueQ则用HttpServletResponse.sendRedirect()Ҏ(gu)Q此时存储在原来的HttpServletRequest中的值将?x)丢失?br /> 例子Q?br /> <global-forwards>
<forward  name="success"  path="/welcome.jsp"/>
<forward  name="failure"  path="/index.jsp"/>
</global-forwards>


六?       配置<action-mappings>
它可以定义几?lt;action  /  >子元素,它主要是定义Action实例到ActionServletcMQ语法如下:(x)
<action-mappings>
<action  path="context-relative  path  mapping  action  to  a  request"
type="fully  qualified  class  name  of  the  Action  class"
name="the  name  of  the  form  bean  bound  to  this  Action">
<forward  name="forwardname1"  path="context-relative  path"/>
<forward name="forwardname2" path="context-relative path"/>
</action>
</action-mappings>
<action/>属性及(qing)其描qC息如下:(x)
?nbsp; ?nbsp;   ?q???br /> Path    在浏览器的URL中输入的字符(必须?
Type    q结到本映射的Action的全U?可选的)
Name    与本操作兌的Action Bean?lt;form-bean/>中定义name?可选的)
Scope    指定ActionForm Bean的作用域(session和request)Q缺省ؓ(f)session?可选的)
Input    当Bean发生错误时返回的控制?可选的)
ClassName    指定一个调用这个ActioncȝActionMappingcȝ全名。缺省用org.apache.struts.action.ActionMappingQ?可选的)
Forward    指定处理相应h所对应的JSP面?可选的)
Include    如果没有forward的时候,它vforward的作用?可选的)
Validate    若ؓ(f)trueQ则?x)调用ActionForm的validate()Ҏ(gu)Q否则不调用Q缺省ؓ(f)true。(可选的Q?br />
例子Q?br /> <action-mappings>
    <action path="/lookupAction" 
            type="wiley.LookupAction"
            name="LookupForm"
            scope="request"
            validate="true"
            input="/index.jsp">
        <forward name="success" path="/quote.jsp"/>
        <forward name="faliue" path="/index.jsp"/>
    </action>
</action-mappings>



七?nbsp;   配置RequestProcessor
在struts-config.xml文g中用<controller/>子元素来定义RequestProcessorQ其语法格式如下Q?br /> <controller processorClass="fully qualified class name" />
<controller />元素属性及(qing)其描qC息如下:(x)
?nbsp; ?nbsp;   ?nbsp; q?br /> processorClass    指定自定义的RequestProcessorcȝ全名
BufferSize    指定用来下蝲所用的~存大小。缺省是4096字节?br /> contentType    定义response文本cdQ缺省是text/html
Debug    定义当前pȝ的除错别,~省?
Locale    如果是trueQ则在用L(fng)session中存放Locale对象Q缺省ؓ(f)true
maxFileSize    指定下蝲文g最大的大小。缺省是250M
multipartClass    指定M替org.apache.struts.upload.DiskMultipartRequestHandlercȝcȝ全名?br /> Nocache    如果是trueQ则?x)关闭每个response的缓存功能。缺省是false
TempDir    指定上蝲文g所用的临时目录。缺省值由容器军_
例子Q?br /> ?/span> <controller processorClass="wiley.WileyRequestProcessor" />
?<controller    contentType="text/html;charset=UTF-8"
                        debug="3"
                        locale="true"
                        nocache="true"
                        processorClass="org.apache.struts.action.RequestProcessor"/>



八?nbsp;   配置Message Resources
在struts-config.xml文g中用<message-resources />元素来定义消息资源。其语法如下Q?br />        <message-resources  parameter="wiley.ApplicationResources"/>
<message-resources />元素属性及(qing)其描qC息如下:(x)
?nbsp; ?nbsp;   ?nbsp; q?br /> Parameter    l定资源文g全名
ClassName    定义处理消息资源的类名的全名Q缺省是org.apache.struts.config.MessageResourcesConfig
Factory    定义MessageResourcesFactorycȝ全名Q缺省是org.apache.struts.util.property.MessageResourcesFacotry
Key    定义l定在这个资源包中的ServletContext的属性主键,~省值是Action.MESSAGES_KEY.
Null    如果为trueQ则找不到消息keyӞ则返回nullQ缺省是true.
例子Q?br /> ?<message-resources parameter="wiley.ApplicationResources"/>
?<message-resources
    parameter="StorefrontMessageResources"
    null="false"/>
<message-resources
    key="IMAGE_RESOURCE_KEY"
    parameter="StorefrontImageResources"
    null="false"/>

注意Q设定key的目的如下:(x)
<html:img altKey="navbar.home.image.alt" bundle="IMAGE_RESOURCE_KEY" pageKey="navbar.home.image" width="125" height="15" border="0"/>
q里说明要到StorefrontImageResources.properties资源文g中找主键值是”navbar.home.image”所对应的倹{?br /> q里StorefrontImageResources.properties的内容如下:(x)
……
navbar.home.image=/images/home.gif
navbar.home.image.alt=Home
……
此处navbar.home.image.alt说明的和<img alt=”Home”……/>一栗?br />

?ji)?nbsp;   配置Plug-in
配置Plug-in如下Q?br /> <plug-in className="wiley.WileyPlugin"/>
也可如下Q?br /> <plug-in className="com.oreilly.struts.storefront.service.memory.StorefrontMemoryDatabasePlugIn">
  <set-property property="pathname" value="/WEB-INF/database.xml"/>
</plug-in>

下面是我现在的struts-config.xml文gQ?br />
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
  
<form-beans >
    
<form-bean name="OfferForm" type="com.neusoft.struts.form.OfferForm" />

  
</form-beans>

  
<global-exceptions />
  
<global-forwards />
  
<action-mappings >
    
<action
          
attribute="OfferForm"
          input
="/service/offerNew.jsp"
          name
="OfferForm"
          path
="/addOffer"
          scope
="request"
          type
="com.neusoft.struts.action.AddOfferAction">
          
<forward name="message" path="/service/message.jsp" />
          
<forward name="fail" path="/service/offerNew.jsp" />
    
</action>
    
<action path="/offerSearch"
            input
="/service/offerSearch.jsp"
            scope
="request" 
            type
="com.neusoft.struts.action.OfferSearchAction">
              
<forward name="show" path="/service/offerSearch.jsp" />
    
</action>
    
<action  attribute="OfferForm"
            name
="OfferForm"
            path
="/offerUpdate"
            input
="/service/offerUpdate.jsp"
            scope
="request"
            type 
="com.neusoft.struts.action.OfferUpdateAction" >
            
<forward name="message" path="/service/message.jsp"/>
             
<forward name="fail" path="/service/offerUpdate.jsp" />
    
</action>
  
</action-mappings>

  
<message-resources parameter="com.neusoft.struts.ApplicationResources" />
</struts-config>



wesley1987 2008-11-27 16:53 发表评论
]]>
在MVC中实现的分页?/title><link>http://www.aygfsteel.com/wzl002/articles/242988.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Thu, 27 Nov 2008 05:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/wzl002/articles/242988.html</guid><wfw:comment>http://www.aygfsteel.com/wzl002/comments/242988.html</wfw:comment><comments>http://www.aygfsteel.com/wzl002/articles/242988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wzl002/comments/commentRss/242988.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wzl002/services/trackbacks/242988.html</trackback:ping><description><![CDATA[     摘要: 1.。JSP面中:(x) ////////////数据昄/////////////////////// 昄 从数据库查出的,攑֜ list<offer> 中的数据?<c:forEach items="${requestScope.list}" var="offer">     <tr> &n...  <a href='http://www.aygfsteel.com/wzl002/articles/242988.html'>阅读全文</a><img src ="http://www.aygfsteel.com/wzl002/aggbug/242988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wzl002/" target="_blank">wesley1987</a> 2008-11-27 13:34 <a href="http://www.aygfsteel.com/wzl002/articles/242988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javaScript 实现 点击日期输入出现日期菜单http://www.aygfsteel.com/wzl002/articles/242622.htmlwesley1987wesley1987Tue, 25 Nov 2008 11:17:00 GMThttp://www.aygfsteel.com/wzl002/articles/242622.htmlhttp://www.aygfsteel.com/wzl002/comments/242622.htmlhttp://www.aygfsteel.com/wzl002/articles/242622.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/242622.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/242622.html<!--
/* 调用Ҏ(gu)Q?br />   <input onfocus="calendar()" name="s2" type="text" id="s2" style="width:100%;" />
*/
var cal_Width = 180;//定义日历昄的宽度,臛_140

document.write("<div id='meizzCalendarLayer' style='position: absolute; z-index: 9999; width: " + (cal_Width+4).toString() + "px; height: 193px; display: none'>");
document.write("<iframe name='meizzCalendarIframe' scrolling='no' frameborder='0' width='100%' height='100%'></iframe></div>");
var WebCalendar = new WebCalendar();

function document.onclick()
{
    if(WebCalendar.eventSrc != window.event.srcElement) hiddenCalendar();
}

function WebCalendar() //初始化日历的讄
{
    this.regInfo    = "WEB Calendar ver 3.0 关闭的快捷键Q[Esc]";
   
    this.dayShow    = 38;                       //定义面上要昄的天?不能于35,或大?9
    this.daysMonth  = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    this.day        = new Array(this.dayShow);            //定义日历展示用的数组
    this.dayObj     = new Array(this.dayShow);            //定义日期展示控g数组
    this.dateStyle  = null;                     //保存格式化后日期数组
    this.objExport  = null;                     //日历回传的显C控?br />     this.eventSrc   = null;                     //日历昄的触发控?br />     this.inputDate  = null;                     //转化外的输入的日?d/m/yyyy)
    this.thisYear   = new Date().getFullYear(); //定义q的变量的初始?br />     this.thisMonth  = new Date().getMonth()+ 1; //定义月的变量的初始?br />     this.thisDay    = new Date().getDate();     //定义日的变量的初始?br />     this.today      = this.thisDay +"/"+ this.thisMonth +"/"+ this.thisYear;   //今天(d/m/yyyy)
    this.iframe     = window.frames("meizzCalendarIframe"); //日历?iframe 载体
    this.calendar   = getObjectById("meizzCalendarLayer");  //日历的层
    this.dateReg    = "";           //日历格式验证的正则式

    this.yearFall   = 50;           //定义昄的年份下拉框的年差|如果今年?000q_(d)q里讄?0Q就昄1950Q?050
    this.format     = "yyyy-mm-dd"; //回传日期的格?br />     this.timeShow   = false;        //是否q回旉
    this.drag       = true;         //是否允许拖动
    this.darkColor  = "#95B7F3";    //控g的暗?br />     this.lightColor = "#FFFFFF";    //控g的亮?br />     this.btnBgColor = "#E6E6FA";    //控g的按钮背景色
    this.wordColor  = "#000080";    //控g的文字颜?br />     this.wordDark   = "#DCDCDC";    //控g的暗文字颜色
    this.dayBgColor = "#F5F5FA";    //日期数字背景?br />     this.todayColor = "#FF0000";    //今天在日历上的标C景色
    this.DarkBorder = "#D4D0C8";    //日期昄的立体表达色
   
    this.yearOption = "";
    var yearNow = new Date().getFullYear();
    yearNow = (yearNow <= 1000)? 1000 : ((yearNow >= 9999)? 9999 : yearNow);
    var yearMin = (yearNow - this.yearFall >= 1000) ? yearNow - this.yearFall : 1000;
    var yearMax = (yearNow + this.yearFall <= 9999) ? yearNow + this.yearFall : 9999;
        yearMin = (yearMax == 9999) ? yearMax-this.yearFall*2 : yearMin;
        yearMax = (yearMin == 1000) ? yearMin+this.yearFall*2 : yearMax;
    for (var i=yearMin; i<=yearMax; i++) this.yearOption += "<option value='"+i+"'>"+i+"q?lt;/option>";
}  

function writeIframe()
{
    var strIframe = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><style>"+
    "*{font-size: 12px; font-family: 宋体}"+
    ".bg{  color: "+ WebCalendar.lightColor +"; cursor: default; background-color: "+ WebCalendar.darkColor +";}"+
    "table#tableMain{ width: "+ (cal_Width+2).toString() +"px; height: 180px;}"+
    "table#tableWeek td{ width:14%;color: "+ WebCalendar.lightColor +";}"+
    "table#tableDay  td{ width:14%;font-weight: bold;}"+
    "td#meizzYearHead, td#meizzYearMonth{color: "+ WebCalendar.wordColor +"}"+
    ".out { text-align: center; border-top: 1px solid "+ WebCalendar.DarkBorder +"; border-left: 1px solid "+ WebCalendar.DarkBorder +";"+
    "border-right: 1px solid "+ WebCalendar.lightColor +"; border-bottom: 1px solid "+ WebCalendar.lightColor +";}"+
    ".over{ text-align: center; border-top: 1px solid #FFFFFF; border-left: 1px solid #FFFFFF;"+
    "border-bottom: 1px solid "+ WebCalendar.DarkBorder +"; border-right: 1px solid "+ WebCalendar.DarkBorder +"}"+
    "input{ border: 1px solid "+ WebCalendar.darkColor +"; padding-top: 1px; height: 18px; cursor: hand;"+
    "       color:"+ WebCalendar.wordColor +"; background-color: "+ WebCalendar.btnBgColor +"}"+
    "</style></head><body onselectstart='return false' style='margin: 0px' oncontextmenu='return false'><form name=meizz>";

    if (WebCalendar.drag){ strIframe += "<scr"+"ipt language=javascript>"+
    "var drag=false, cx=0, cy=0, o = parent.WebCalendar.calendar; function document.onmousemove(){"+
    "if(parent.WebCalendar.drag && drag){if(o.style.left=='')o.style.left=0; if(o.style.top=='')o.style.top=0;"+
    "o.style.left = parseInt(o.style.left) + window.event.clientX-cx;"+
    "o.style.top  = parseInt(o.style.top)  + window.event.clientY-cy;}}"+
    "function document.onkeydown(){ switch(window.event.keyCode){  case 27 : parent.hiddenCalendar(); break;"+
    "case 37 : parent.prevM(); break; case 38 : parent.prevY(); break; case 39 : parent.nextM(); break; case 40 : parent.nextY(); break;"+
    "case 84 : document.forms[0].today.click(); break;} " +
    "try{window.event.keyCode = 0; window.event.returnValue= false;}catch(ee){}}"+
    "function dragStart(){cx=window.event.clientX; cy=window.event.clientY; drag=true;}</scr"+"ipt>"}

    strIframe += "<table id=tableMain class=bg border=0 cellspacing=2 cellpadding=0>"+
    "<tr><td width='"+ cal_Width +"px' height='19px' bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table width='"+ cal_Width +"px' id='tableHead' border='0' cellspacing='1' cellpadding='0'><tr align='center'>"+
    "    <td width='10%' height='19px' class='bg' title='向前?1 ?#13;快捷键:(x)←' style='cursor: hand' onclick='parent.prevM()'><b>&lt;</b></td>"+
    "    <td width='45%' id=meizzYearHead "+
    "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+
    "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'>" +
    "<select name=tmpYearSelect  onblur='parent.hiddenSelect(this)' style='width:100%;'"+
    "        onchange='parent.WebCalendar.thisYear =this.value; parent.hiddenSelect(this); parent.writeCalendar();'>";
   
//    var yearNow = new Date().getFullYear();
//    yearNow = (yearNow <= 1000)? 1000 : ((yearNow >= 9999)? 9999 : yearNow);
//    var yearMin = (yearNow - WebCalendar.yearFall >= 1000) ? yearNow - WebCalendar.yearFall : 1000;
//    var yearMax = (yearNow + WebCalendar.yearFall <= 9999) ? yearNow + WebCalendar.yearFall : 9999;
//        yearMin = (yearMax == 9999) ? yearMax-WebCalendar.yearFall*2 : yearMin;
//        yearMax = (yearMin == 1000) ? yearMin+WebCalendar.yearFall*2 : yearMax;
//    for (var i=yearMin; i<=yearMax; i++) strIframe += "<option value='"+i+"'>"+i+"q?lt;/option>";

    strIframe += WebCalendar.yearOption + "</select>"+
    "</td>"+
    "    <td width='35%' id=meizzYearMonth "+
    "        onmouseover='this.bgColor=parent.WebCalendar.darkColor; this.style.color=parent.WebCalendar.lightColor'"+
    "        onmouseout='this.bgColor=parent.WebCalendar.lightColor; this.style.color=parent.WebCalendar.wordColor'>" +
    "<select name=tmpMonthSelect onblur='parent.hiddenSelect(this)' style='width:100%;'" +   
    "        onchange='parent.WebCalendar.thisMonth=this.value; parent.hiddenSelect(this); parent.writeCalendar();'>";
    for (var i=1; i<13; i++) strIframe += "<option value='"+i+"'>"+i+"?lt;/option>";
    strIframe += "</select>"+
    "</td>"+
    "    <td width='10%' class=bg title='向后?1 ?#13;快捷键:(x)→' onclick='parent.nextM()' style='cursor: hand'><b>&gt;</b></td></tr></table>"+
    "</td></tr><tr><td height='20px'>"+
    "<table id=tableWeek border=1 width='"+ cal_Width +"px' cellpadding=0 cellspacing=0 ";
    if(WebCalendar.drag){strIframe += "onmousedown='dragStart()' onmouseup='drag=false' ";}
    strIframe += " borderColorLight='"+ WebCalendar.darkColor +"' borderColorDark='"+ WebCalendar.lightColor +"'>"+
    "    <tr align=center><td height='20px'>?lt;/td><td>一</td><td>?lt;/td><td>?lt;/td><td>?lt;/td><td>?lt;/td><td>?lt;/td></tr></table>"+
    "</td></tr><tr><td valign=top width='"+ cal_Width +"px' bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table id=tableDay height='120px' width='"+ cal_Width +"px' border=0 cellspacing=1 cellpadding=0>";
         for(var x=0; x<5; x++){
           strIframe += "<tr>";
           for(var y=0; y<7; y++)
             strIframe += "<td class=out id='meizzDay"+ (x*7+y) +"'></td>";
           strIframe += "</tr>";
         }
         strIframe += "<tr>";
         for(var x=35; x<WebCalendar.dayShow; x++)
           strIframe += "<td class=out id='meizzDay"+ x +"'></td>";
         strIframe +="<td colspan="+(42-WebCalendar.dayShow).toString()+" class=out style='text-align:center;' title='"+ WebCalendar.regInfo +"'>" +
         "<input style=' background-color: " + WebCalendar.btnBgColor +";cursor: hand; padding-top: 2px; width: 44%; height: 100%;' onfocus='this.blur()'"+
         " type=button value='清空' onclick='parent.WebCalendar.objExport.value=\"\";parent.hiddenCalendar()'>" +
         "&nbsp;" +
         "<input style=' background-color: " + WebCalendar.btnBgColor +";cursor: hand; padding-top: 2px; width: 43%; height: 100%;' onfocus='this.blur()'"+
         " type=button value='关闭' onclick='parent.hiddenCalendar()'>" +
         "</td></tr></table>"+
    "</td></tr><tr><td height='20px' width='"+ cal_Width +"px' bgcolor='"+ WebCalendar.lightColor +"'>"+
    "    <table border=0 cellpadding=1 cellspacing=0 width='"+ cal_Width +"px'>"+
    "    <tr><td><input name=prevYear title='向前?1 q?#13;快捷键:(x)↑' onclick='parent.prevY()' type=button value='&lt;&lt;'"+
    "    onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==1000)'><input"+
    "    onfocus='this.blur()' name=prevMonth title='向前?1 ?#13;快捷键:(x)←' onclick='parent.prevM()' type=button value='&lt;&nbsp;'>"+
    "    </td><td align=center><input name=today type=button value='Today' onfocus='this.blur()' style='width: 50px;' title='当前日期 快捷键:(x)T'"+
    "    onclick=\"parent.returnDate(new Date().getDate() +'/'+ (new Date().getMonth() +1) +'/'+ new Date().getFullYear())\">"+
    "    </td><td align=right><input title='向后?1 ?#13;快捷键:(x)→' name=nextMonth onclick='parent.nextM()' type=button value='&nbsp;&gt;'"+
    "    onfocus='this.blur()'><input name=nextYear title='向后?1 q?#13;快捷键:(x)↓' onclick='parent.nextY()' type=button value='&gt;&gt;'"+
    "    onfocus='this.blur()' style='meizz:expression(this.disabled=parent.WebCalendar.thisYear==9999)'></td></tr></table>"+
    "</td></tr><table></form></body></html>";
    with(WebCalendar.iframe)
    {
        document.writeln(strIframe); document.close();
        for(var i=0; i<WebCalendar.dayShow; i++)
        {
            WebCalendar.dayObj[i] = eval("meizzDay"+ i);
            WebCalendar.dayObj[i].onmouseover = dayMouseOver;
            WebCalendar.dayObj[i].onmouseout  = dayMouseOut;
            WebCalendar.dayObj[i].onclick     = returnDate;
        }
    }
}

function calendar() //主调函数
{
    var e = window.event.srcElement;   writeIframe();
    var o = WebCalendar.calendar.style; WebCalendar.eventSrc = e;
 if (arguments.length == 0) WebCalendar.objExport = e;
    else WebCalendar.objExport = eval(arguments[0]);

    WebCalendar.iframe.tableWeek.style.cursor = WebCalendar.drag ? "move" : "default";
 var t = e.offsetTop,  h = e.clientHeight, l = e.offsetLeft, p = e.type;
 while (e = e.offsetParent){t += e.offsetTop; l += e.offsetLeft;}
    o.display = ""; WebCalendar.iframe.document.body.focus();
    var cw = WebCalendar.calendar.clientWidth, ch = WebCalendar.calendar.clientHeight;
    var dw = document.body.clientWidth, dl = document.body.scrollLeft, dt = document.body.scrollTop;
   
    if (document.body.clientHeight + dt - t - h >= ch) o.top = (p=="image")? t + h : t + h + 6;
    else o.top  = (t - dt < ch) ? ((p=="image")? t + h : t + h + 6) : t - ch;
    if (dw + dl - l >= cw) o.left = l; else o.left = (dw >= cw) ? dw - cw + dl : dl;

    if  (!WebCalendar.timeShow) WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
    else WebCalendar.dateReg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;

    try{
        if (WebCalendar.objExport.value.trim() != ""){
            WebCalendar.dateStyle = WebCalendar.objExport.value.trim().match(WebCalendar.dateReg);
            if (WebCalendar.dateStyle == null)
            {
                WebCalendar.thisYear   = new Date().getFullYear();
                WebCalendar.thisMonth  = new Date().getMonth()+ 1;
                WebCalendar.thisDay    = new Date().getDate();
                alert("原文本框里的日期有错误!\n可能与你定义的显C时分秒有冲H!");
                writeCalendar(); return false;
            }
            else
            {
                WebCalendar.thisYear   = parseInt(WebCalendar.dateStyle[1], 10);
                WebCalendar.thisMonth  = parseInt(WebCalendar.dateStyle[3], 10);
                WebCalendar.thisDay    = parseInt(WebCalendar.dateStyle[4], 10);
                WebCalendar.inputDate  = parseInt(WebCalendar.thisDay, 10) +"/"+ parseInt(WebCalendar.thisMonth, 10) +"/"+
                parseInt(WebCalendar.thisYear, 10); writeCalendar();
            }
        } else {
          WebCalendar.thisYear   = new Date().getFullYear();
          WebCalendar.thisMonth  = new Date().getMonth()+ 1;
          WebCalendar.thisDay    = new Date().getDate();
          writeCalendar();
        }
    } catch(e) {
      WebCalendar.thisYear   = new Date().getFullYear();
      WebCalendar.thisMonth  = new Date().getMonth()+ 1;
      WebCalendar.thisDay    = new Date().getDate();
      writeCalendar();
    }
}

function funMonthSelect() //月䆾的下拉框
{
    var m = isNaN(parseInt(WebCalendar.thisMonth, 10)) ? new Date().getMonth() + 1 : parseInt(WebCalendar.thisMonth);
    var e = WebCalendar.iframe.document.forms[0].tmpMonthSelect;
    e.value = m; //e.focus();
    //window.status = e.style.left;
}

function funYearSelect() //q䆾的下拉框
{
    var e = WebCalendar.iframe.document.forms[0].tmpYearSelect;
    var y = isNaN(parseInt(WebCalendar.thisYear, 10)) ? new Date().getFullYear() : parseInt(WebCalendar.thisYear);
    e.value = y; //e.focus();
//    if(e.value == "")
//    {
//      e.value = new Date().getFullYear();
//      WebCalendar.thisYear = e.value;
//    }
}

function prevM()  //往前翻月䆾
{
    WebCalendar.thisDay = 1;
    if (WebCalendar.thisMonth==1)
    {
        WebCalendar.thisYear--;
        WebCalendar.thisMonth=13;
    }
    WebCalendar.thisMonth--; writeCalendar();
}

function nextM()  //往后翻月䆾
{
    WebCalendar.thisDay = 1;
    if (WebCalendar.thisMonth==12)
    {
        WebCalendar.thisYear++;
        WebCalendar.thisMonth=0;
    }
    WebCalendar.thisMonth++; writeCalendar();
}
function prevY(){WebCalendar.thisDay = 1; WebCalendar.thisYear--; writeCalendar();}//往前翻 Year
function nextY(){WebCalendar.thisDay = 1; WebCalendar.thisYear++; writeCalendar();}//往后翻 Year
function hiddenSelect(e){
  //for(var i=e.options.length; i>-1; i--)e.options.remove(i); e.style.display="none";
}
function getObjectById(id){ if(document.all) return(eval("document.all."+ id)); return(eval(id)); }
function hiddenCalendar(){getObjectById("meizzCalendarLayer").style.display = "none";};
function appendZero(n){return(("00"+ n).substr(("00"+ n).length-2));}//日期自动补零E序
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g,"");}
function dayMouseOver()
{
    this.className = "over";
    this.style.backgroundColor = WebCalendar.darkColor;
    if(WebCalendar.day[this.id.substr(8)].split("/")[1] == WebCalendar.thisMonth)
    this.style.color = WebCalendar.lightColor;
}
function dayMouseOut()
{
    this.className = "out"; var d = WebCalendar.day[this.id.substr(8)], a = d.split("/");
    this.style.removeAttribute('backgroundColor');
    if(a[1] == WebCalendar.thisMonth && d != WebCalendar.today)
    {
        if(WebCalendar.dateStyle && a[0] == parseInt(WebCalendar.dateStyle[4], 10))
        this.style.color = WebCalendar.lightColor;
        this.style.color = WebCalendar.wordColor;
    }
}
function writeCalendar() //Ҏ(gu)历显C的数据的处理程?br /> {
    var y = WebCalendar.thisYear;
    var m = WebCalendar.thisMonth;
    var d = WebCalendar.thisDay;
    WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28;
    if (!(y<=9999 && y >= 1000 && parseInt(m, 10)>0 && parseInt(m, 10)<13 && parseInt(d, 10)>0)){
        alert("对不P你输入了错误的日期!");
        WebCalendar.thisYear   = new Date().getFullYear();
        WebCalendar.thisMonth  = new Date().getMonth()+ 1;
        WebCalendar.thisDay    = new Date().getDate(); }
    y = WebCalendar.thisYear;
    m = WebCalendar.thisMonth;
    d = WebCalendar.thisDay;
   
    funYearSelect(parseInt(y, 10));
    funMonthSelect(parseInt(m,10));
    //WebCalendar.iframe.meizzYearHead.innerText  = y +" q?;
    //WebCalendar.iframe.meizzYearMonth.innerText = parseInt(m, 10) +" ?;
    WebCalendar.daysMonth[1] = (0==y%4 && (y%100!=0 || y%400==0)) ? 29 : 28; //闰年二月?9?br />     var w = new Date(y, m-1, 1).getDay();
    var prevDays = m==1  ? WebCalendar.daysMonth[11] : WebCalendar.daysMonth[m-2];
    for(var i=(w-1); i>=0; i--) //q三?for 循环为日历赋数据源(数组 WebCalendar.dayQ格式是 d/m/yyyy
    {
        WebCalendar.day[i] = prevDays +"/"+ (parseInt(m, 10)-1) +"/"+ y;
        if(m==1) WebCalendar.day[i] = prevDays +"/"+ 12 +"/"+ (parseInt(y, 10)-1);
        prevDays--;
    }
    for(var i=1; i<=WebCalendar.daysMonth[m-1]; i++) WebCalendar.day[i+w-1] = i +"/"+ m +"/"+ y;
    for(var i=1; i<WebCalendar.dayShow-w-WebCalendar.daysMonth[m-1]+1; i++)
    {
        WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ (parseInt(m, 10)+1) +"/"+ y;
        if(m==12) WebCalendar.day[WebCalendar.daysMonth[m-1]+w-1+i] = i +"/"+ 1 +"/"+ (parseInt(y, 10)+1);
    }
    for(var i=0; i<WebCalendar.dayShow; i++)    //q个循环是根据源数组写到日历里显C?br />     {
        var a = WebCalendar.day[i].split("/");
        WebCalendar.dayObj[i].innerText    = a[0];
        WebCalendar.dayObj[i].title        = a[2] +"-"+ appendZero(a[1]) +"-"+ appendZero(a[0]);
        WebCalendar.dayObj[i].bgColor      = WebCalendar.dayBgColor;
        WebCalendar.dayObj[i].style.color  = WebCalendar.wordColor;
        if ((i<10 && parseInt(WebCalendar.day[i], 10)>20) || (i>27 && parseInt(WebCalendar.day[i], 10)<12))
            WebCalendar.dayObj[i].style.color = WebCalendar.wordDark;
        if (WebCalendar.inputDate==WebCalendar.day[i])    //讄输入框里的日期在日历上的颜色
        {WebCalendar.dayObj[i].bgColor = WebCalendar.darkColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}
        if (WebCalendar.day[i] == WebCalendar.today)      //讄今天在日历上反应出来的颜?br />         {WebCalendar.dayObj[i].bgColor = WebCalendar.todayColor; WebCalendar.dayObj[i].style.color = WebCalendar.lightColor;}
    }
}
function returnDate() //Ҏ(gu)日期格式{返回用户选定的日?br /> {
    if(WebCalendar.objExport)
    {
        var returnValue;
        var a = (arguments.length==0) ? WebCalendar.day[this.id.substr(8)].split("/") : arguments[0].split("/");
        var d = WebCalendar.format.match(/^(\w{4})(-|\/)(\w{1,2})\2(\w{1,2})$/);
        if(d==null){alert("你设定的日期输出格式不对Q\r\n\r\n请重新定?WebCalendar.format Q?); return false;}
        var flag = d[3].length==2 || d[4].length==2; //判断q回的日期格式是否要补零
        returnValue = flag ? a[2] +d[2]+ appendZero(a[1]) +d[2]+ appendZero(a[0]) : a[2] +d[2]+ a[1] +d[2]+ a[0];
        if(WebCalendar.timeShow)
        {
            var h = new Date().getHours(), m = new Date().getMinutes(), s = new Date().getSeconds();
            returnValue += flag ? " "+ appendZero(h) +":"+ appendZero(m) +":"+ appendZero(s) : " "+  h  +":"+ m +":"+ s;
        }
        WebCalendar.objExport.value = returnValue;
        hiddenCalendar();
    }
}
//-->



wesley1987 2008-11-25 19:17 发表评论
]]>
用javaScript实现表单验证http://www.aygfsteel.com/wzl002/articles/242621.htmlwesley1987wesley1987Tue, 25 Nov 2008 11:14:00 GMThttp://www.aygfsteel.com/wzl002/articles/242621.htmlhttp://www.aygfsteel.com/wzl002/comments/242621.htmlhttp://www.aygfsteel.com/wzl002/articles/242621.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/242621.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/242621.html**
* Check form
*/
function checkForm(vform){
    for(var i=0;i<vform.elements.length;i++){      
 
        if(vform.elements[i].type=="text"){
            var checkResult=checkTextBox(vform.elements[i]);
            var name=vform.elements[i].getAttribute("name");           
           
            if(checkResult){
                document.getElementById(name+"Msg").style.display="none";//alert(vform.elements.length+" - "+i+checkResult);
            }
            else{       
                document.getElementById(name+"Msg").style.display="inline";
                vform.elements[i].focus();
                return false;
            }               
        }
    }
 
    return true;
}

/**//**
* Check text field in the form
*/
function checkTextBox(vTextBox){
    var validChar=vTextBox.getAttribute("validChar");
    var isRequired=vTextBox.getAttribute("isRequired");
    var inputValue=vTextBox.value;
   
    if(isRequired!="true" && inputValue.length<1){
        return true;
    }
    else{
        var regexStr=validChar;
        var regex=new RegExp(regexStr);
        return regex.test(inputValue);
    }
}

/**//**
* Remove Extra Char in textbox
*/
function removeExtraChar(vTextBox,event){
    var maxlength=parseInt(vTextBox.getAttribute("maxlength"));
    var inputValue=vTextBox.value;
   
    if(inputValue.length>=maxlength){
        event.keyCode=9;
    }
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
对应的JSP表单 Q?br /> <script src="<%=path%>/xxx.js" type="text/javascript"></script>
<form action="<%=path%>/addOffer.do" method="post" onsubmit="return checkForm(this);">
<table align="center" width="434" border="1">
<tr>
  <td width="117">供应商名U?必填)Q?lt;/td>
  <td width="300"><div align="left">&nbsp;<input name="offername" 
                         type="text" 
                         maxlength="15"  
                         height="16"
                         isRequired="true"
                         validChar="^[\u4E00-\u9FA5]{2,10}$"                 //用于验证此text的正则表辑ּ
                         onfocus="this.style.backgroundColor='#e6e6e6'"
                                onblur="this.style.backgroundColor='#ffffff'" />
 
 <p id="offernameMsg" style="display:none">误?-10位汉?lt;/p>
  </div>
  </td>
</tr>
<tr>
  <td width="117">地址Q?lt;/td>
  <td><div align="left">&nbsp;<input name="offeradd"
           type="text"
           maxlength="20" 
           height="16"
            validChar="^[\u4E00-\u9FA5\w]+$"
          onfocus="this.style.backgroundColor='#e6e6e6'"
                             onblur="this.style.backgroundColor='#ffffff'"/>
 <p id="offeraddMsg" style="display:none">请勿含特D符?含空?</p>
  </div></td></tr>
<tr>
  <td>联系人:(x)</td>
  <td><div align="left">&nbsp;<input name="connecter" type="text" height="16"
              maxlength="10"
              validChar="^[\u4E00-\u9FA5\w]+$"
             onfocus="this.style.backgroundColor='#e6e6e6'"
                                onblur="this.style.backgroundColor='#ffffff'"/>
 <p id="connecterMsg" style="display:none">请勿含特D符?含空?</p>
  </div></td>
</tr>
</table></form>

 

wesley1987 2008-11-25 19:14 发表评论
]]>
数据库操作类http://www.aygfsteel.com/wzl002/articles/242550.htmlwesley1987wesley1987Tue, 25 Nov 2008 07:24:00 GMThttp://www.aygfsteel.com/wzl002/articles/242550.htmlhttp://www.aygfsteel.com/wzl002/comments/242550.htmlhttp://www.aygfsteel.com/wzl002/articles/242550.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/242550.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/242550.html引用?Qhttp://webservices.ctocio.com.cn/tips/13/7711513.shtml

 装数据库操作,目的是Z隐藏java.sql包内的类Q在~码中去掉核心的数据库操作代码。这U方?不能适应大数据量的查?不过如果真的到大数据量的查?那用什么封装都不好,q是得直接数据库操作.
装数据库操作,目的是Z隐藏java.sql包内的类Q在~码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释N题。同时也减少了数据库操作的编码量?/div>

  但是很多|友在封装时Q却喜欢q回l果?ResultSet对象)Q那么这个封装就没有意义了?/p>

  1. 又是直接操作核心数据库类Q跟装前几乎没什么变化?/p>

  2. l果集L依赖于它使用的连?Connection)对象。因此当q接对象在方法内被关闭后Q你q回的ResultSet没有用了?/p>

  如果真的要获得查询数据库的结果集Q就把结果集对象内的所有数据,转储CMap为元素的List对象内?/p>

  当然,q种方式,不能适应大数据量的查?不过如果真的到大数据量的查?那用什么封装都不好,q是得直接数据库操作. :)))

  下面是简单的数据库操?a class="bluekey" target="_blank">Javabean的代?/p>

  DbWrapper.java

  import java.sql.*;

  import java.util.*;

public class DbWrapper{

  // 定义q接池对象ؓ(f)静态变量,一直存在,直到工作目录关闭?/p>

  private static DataSource ds = null;

  // 1.用连接池的方式获得连?/p>

  // 如果不是做多数据库程序,推荐使用此方?/p>

  // 相关内容Q在tomcat理界面配置q接?/p>

  public static Connection openConnection() throws Exception{

  // 只需要初始化1?/p>

          if ( ds == null ){

              Context initContext = new InitialContext();

              Context envContext = (Context) initContext.lookup("java:/comp/env");

              DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");

          }

              return ds.getConnection();

      }

  // 2.用jdbc驱动获得q接

  // 相关内容QJSP数据库连接大?/p>

  public static Connection openConnection(String driver,String url,String username,String password) throws Exception{

          Class.forName(driver).newInstance();

          return DriverManager.getConnection(url, username, password);

  }

  public static void closeConnection(Connection conn) throws Exception{

          if ( conn != null )conn.close();

  }

  public static int executeUpdate(String sql) throws Exception{

          int count = 0;

          Connection conn = null;

          Statement stmt = null;

          try{

                  conn = openConnection();

                  stmt = conn.createStatement();

                  count = stmt.executeUpdate(sql);

          }catch ( Exception e ){

                     e.printStackTrace();          
                }finally{

                  closeConnection(conn);

          }

          return count;

  }

  public static List executeQuery(String sql) throws Exception{

          List list = new ArrayList();

          Connection conn = null;

          Statement stmt = null;

          ResultSet rs = null;

          try{

                  conn = openConnection();

                  stmt = conn.createStatement();

                  rs = stmt.executeQuery(sql);

                  ResultSetMetaData rsmd = rs.getMetaData();

          while ( rs.next() ){

                  Map map = new HashMap();

      for ( int i = 1; i < = rsmd.getColumnCount(); i++ ){

                  map.put(rsmd.getColumnName(i), rs.getObject(i));

          }

          list.add(map);

          } }catch ( Exception e ){

                  e.printStackTrace();

          }finally{

                  if ( rs != null ) rs.close();

                  closeConnection(conn);

          }

          return list; }

  }

  使用CZ:

  // 1.对于insert, update, delete语句int count = DbWrapper.executeUpdate(sql);

  // 2.对于selete语句

  java.util.List list = DbWrapper.executeQuery(sql);

  // Ҏ(gu)一:按名字取|注意大小写是严格区分?/p>

  for ( int i = 0; i < list.size(); i++ )

  {

  java.util.Map map = (java.util.Map)list.get(i);

  out.println(mag.get("column_name").toString());

  }

  // Ҏ(gu)二:(x)遍历取?/p>

  for ( int i = 0; i < list.size(); i++ )

  {

  java.util.Map map = (java.util.Map)list.get(i);

  for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();)

  {

  String column_name = it.next().toString()); // 取值时注意null判断

  out.println(column_name + " = " + map.get(column_name) == null ? "" : map.get(column_name).toString());

  }

  }



wesley1987 2008-11-25 15:24 发表评论
]]>oracle ORA-12545 L或对象不存在& Oracle Management Server配置步骤http://www.aygfsteel.com/wzl002/articles/242369.htmlwesley1987wesley1987Mon, 24 Nov 2008 13:34:00 GMThttp://www.aygfsteel.com/wzl002/articles/242369.htmlhttp://www.aygfsteel.com/wzl002/comments/242369.htmlhttp://www.aygfsteel.com/wzl002/articles/242369.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/242369.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/242369.html
ora-12545问题
解决办法修改Qtnsnames.oraQ小写)文gQ将要用的数据库?host 参数 从名字改?IP
?mydatabase 改ؓ(f) 127.0.0.1

Oracle Management Server配置步骤如下Q?br /> 1、用enterprise manager configuration assistant建立档案资料?br />    其中可选择新徏一个数据库实例或者在已有数据库实例中新徏资料库(新徏表空_(d)?br /> 2、启动management server
3、运行enterprise manage consoleQ选择d到management server
   d名sysmanQ初始密码oem_temp。登录后?x)要求修改密码?br /> 4、将要管理的数据库添加到目录?wi)中。通过D器中的节Ҏ(gu)索?br />    要管理的数据库必dhttp server和开agent server?br /> 5、在工具中即可配|备份管理?br />    1Q要在配|中的首选项Q首选n份证明中加入要备份的数据库服务器的首选n份证明?br />    2Q在要备份的数据库服务器上要授予步骤1Q首选n份证明所用用h处理权限Q管理工?br />       Q本地安全设|-本地{略Q用h利指z中讄?br />

另一U不需要配|资料库的访问:(x)
关于 net configuration assistant
服务?需要ؓ(f)数据库服务配|?#8220;监听?#8221;。在客户端上Q配|需一?“本地net服务配置”
 配置完成?nbsp; 客户端即可用PL/SQL develop{访问了。但是Oracle Management Server是不能用的?br />

wesley1987 2008-11-24 21:34 发表评论
]]>
用JSTL实现的分??lt;sqlQ?gt;http://www.aygfsteel.com/wzl002/articles/242325.htmlwesley1987wesley1987Mon, 24 Nov 2008 10:28:00 GMThttp://www.aygfsteel.com/wzl002/articles/242325.htmlhttp://www.aygfsteel.com/wzl002/comments/242325.htmlhttp://www.aygfsteel.com/wzl002/articles/242325.html#Feedback0http://www.aygfsteel.com/wzl002/comments/commentRss/242325.htmlhttp://www.aygfsteel.com/wzl002/services/trackbacks/242325.htmlUa(b)在JSP中实现的分页Q效果只有数据上一?下一늚q接?br /> q种在JSP中取数据库的做法已经不推荐了Q但是可以作为在面昄数据 和学?fn)JSTL的参?/p>

分页

:<br/>
  
<table border="1">
   
<tr>
   
<sql:query var="articleCount" sql="select count(*) from article" dataSource="${sqlDS}"></sql:query>
       
<c:forEach items="${articleCount.rowsByIndex}" var="articlecount">
               
<c:set var="Count">${articlecount[0]}</c:set>
       
</c:forEach>
   
<td>?nbsp;${Count}?/span></td>
   
   
<c:set var="pageSize">10</c:set>
   
<c:if test="${Count%pageSize==0}"><c:set var="page">${Count/pageSize}</c:set></c:if>
   
<c:if test="${Count%pageSize!=0}"><c:set var="page">${(Count-Count%pageSize)/pageSize+1}</c:set></c:if>
   
<fmt:formatNumber maxFractionDigits="0" var="pageCount">${page}</fmt:formatNumber>
   
<td>?{pageCount}?/span></td>
   
   
<c:if test="${empty param.pageNo}"><c:set var="currentPage" value="1"></c:set></c:if>
   
<c:if test="${not empty param.pageNo}"><c:set var="currentPage">${param.pageNo}</c:set></c:if>
   
<td>当前W?{currentPage} ?/span></td>
   
   
<td>
    
<c:if test="${currentPage>1}">
     
<href="front/index.jsp?pageNo=${currentPage-1}">上一?/span></a>
    
</c:if>  
    
<c:if test="${currentPage==1}">上一?nbsp; </c:if> 
    
<c:if test="${currentPage<pageCount}">
     
<href="front/index.jsp?pageNo=${currentPage+1}">下一?/span></a>
    
</c:if>
    
<c:if test="${currentPage==pageCount}">下一?nbsp;</c:if>
   
</td>
   
</tr>
 
</table>
 
<table border="3">
   
<sql:query var="RS" dataSource="${sqlDS}"
  sql
="select * from article where rownum<=${pageSize} and id not in(select id from article where rownum<=${pageSize*(currentPage-1)} )"
   
></sql:query><tr>
   
<c:forEach items="${RS.rowsByIndex}" var="article">  
            
<td>${article[1]}</td>
            
<td>${article[2]}</td>
            
<td>${article[4]}</td> 
            
<td>${article[5]}</td>  
            
<td>[<fmt:formatDate value="${article[6]}" pattern="yyyy'q?M'?d'?"/>]</td> 
   
</c:forEach></tr>
  
  
  
</table> 


wesley1987 2008-11-24 18:28 发表评论
]]>
关于javaq接?/title><link>http://www.aygfsteel.com/wzl002/articles/242304.html</link><dc:creator>wesley1987</dc:creator><author>wesley1987</author><pubDate>Mon, 24 Nov 2008 09:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/wzl002/articles/242304.html</guid><wfw:comment>http://www.aygfsteel.com/wzl002/comments/242304.html</wfw:comment><comments>http://www.aygfsteel.com/wzl002/articles/242304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/wzl002/comments/commentRss/242304.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/wzl002/services/trackbacks/242304.html</trackback:ping><description><![CDATA[1.为工E配|tomcatq接池:(x)<br /> 配置server.xml Qtomcat/conf/server.xmlQ在</Host>前面加上<br /> <Context docBase="myWebProject"" path="/myWebProject" reloadable="true"><br />      <Resource name="q接池名?例:(x)jdbc/oracle" <br />                     auth="Container" <br />                     type="javax.sql.DataSource"<br />                     factory="org.apache.common.dbcp.BasicDataSourceFactory"<br />                     driverClassName="oracle.jdbc.driver.OracleDriver"<br />                     url="jdbc:oracle:thin:@127.0.0.1:1521:NEUSOFT"<br />                     username="" <br />                     password="" <br />                     maxActive="5000"<br />                      maxIdle="10" <br />                     maxWait="-1"/><br /> </Context><br /> 参数说明Q?br /> i.JNDI Name::注册到JNDI?wi)上的名字(可以随便写?br /> ii. Data Source URLQ连接数据库的URL<br /> iii. JDBC Driver ClassQJbdc数据库的驱动名称<br /> iv. User NameQ访问数据库的用?br /> v. PasswordQ访问数据库的密?br /> vi. Max. Active ConnectionsQ最大活跃连接数Q指同时可以有多个q接Q设|ؓ(f)0没有限制<br /> vii. Max. Idle ConnectionsQ最大空闲连接数Q表C没有数据库q接Ӟq接池也必须保持最大空闲连接数Q设|ؓ(f)0没有限制<br /> viii. Max. Wait for ConnectionQ连接徏立等待时_(d)单位为毫U,讄?1无限?br /> ix. Validation Query:Q此参数用来查询池中的空闲连接(可以不配|)<br /> <br /> 需要把 jdbc的包导入 tomcat的lib?nbsp;Q?nbsp; tomcat6/lib   tomcat5.x/commen/libQ?br /> oracle的包在oracle92/jdbc/classes12.jar<br /> ms sqlserver要用到的三个驱动?br /> <br /> 2。连接语?br />      Context initCtx = new InitialContext();<br />    javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup("java:comp/env/q接池名?);<br />    conn = ds.getConnection();<br /> <br /> jsp中:(x)Q不推荐Q?br />  Q?lt;sql:setDataSource dataSource="q接池名? var="myOracleDB"/> <br /> <br />        <sql:query sql="select * from channel" dataSource="${myOracleDB}" var="channelRS"/><br />             <c:forEach items="${channelRS.rowsByIndex}" var="channel"><br />                     ${channel[1]}<br />             </c:forEach><br /> <br /> 使用q接池实现的q接Q只能在web服务器中q行。不能run?br /> /*非连接池的一般JDBC使用*/<br /> Class.forName(driver);<br /> Connection conn = DriverManager.getConnection(url,name,password);<br /> stmt = conn.createStatement();<br />    rs = stmt.executeQuery(sql);<br /> ORACLEQdriver Qoracle.jdbc.driver.OracleDriver<br />                         urlQ?nbsp;  jdbc:oracle:thin:@IP:1521:数据库名<br />                        包:(x) oracle92/jdbc/classes12.jar<br /> SqlserverQdriverQcom.microsoft.jdbc.sqlserver.SQLServerDriver<br />                 urlQjdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=数据库名<br /> <br /> 3. q接池还?#8216;Ҏ(gu)有工E配|tomcatq接?#8217;?#8216;在struts?配置struts-config.xml以配|连接池’?br />       <a >http://blog.csdn.net/angel_bear/archive/2006/06/09/784573.aspx</a> Qby angelbearQ里有以?U连接池的配|方法?br /> <br /> <br /> 后补 疑问Qfactory="org.apache.common.dbcp.BasicDataSourceFactory" q句话回引v一?class cannt find 的异常,未解决?br />     大致原因可能是缺commons-dbcp-1.2.1和commons-pool-1.3的包Q此包在tomcat6中未发现Qtomcat5/commen/lib下有commons-pool-1.2.jar?br />     而且很多人的q接池配|语句中 没有q句话。这句话的作用不太明白,但暂时好像不d也能正常q行?br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/wzl002/aggbug/242304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/wzl002/" target="_blank">wesley1987</a> 2008-11-24 17:25 <a href="http://www.aygfsteel.com/wzl002/articles/242304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">÷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֺ</a>| <a href="http://" target="_blank">Ƥɽ</a>| <a href="http://" target="_blank">³ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ī񹤿</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͻȪ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͭɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƹ</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӣ</a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank">ʷ</a>| <a href="http://" target="_blank">Т</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>