tbwshc

#

总结一下今天使用fileupload组件通过Servelt上传文件出现的几个小问题

这段时间由于要要成一个项目中的一个小功能,使用到文件的上传和下载,以前学习过一点,不过没有深入学习,今天看了“风中叶”张龙老师讲解的通过Servletb上传文件,跟着他将的内容,回顾手敲了那些代码,不过出现了几个小问题;
1、把上传的文件写入到指定目录的时候,出现了磁盘拒绝访问的问题。
      解决:根据mark的回复,试了下,分析出现的原因:
                item.write(new File(path));                 //原来只写入到目录,没有指定写入的是哪个文件
                item.write(new File(path,fileName));     //修改后,指定写入的是fileName这个文件
 
2、上传文件出现中文乱码的问题:
      由于jsp文件默认的编码是UTF-8,所以上产出现中文名称的文件时,会出现中文乱码。
      这个问题在网上找到解决的途径:http://www.blogjava.net/duduli/archive/2008/11/11/239845.html
    解决思路:
          ServletFileUpload upload = new ServletFileUpload(factory);
          upload.setHeaderEncoding("UTF-8");
     只需要通过ServeltFileUpload指定编码即可
 
3、关于“Apache FileUpload文件上传组件API解析”可以在这里查看到:http://ajava.org/blog-273-584.html
      FileUpload 相关的 API详解。
 
以下是今天写的Servelt类,完成的功能:文件上传
package com.way.fileupload.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServelt extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
               
                this.doPost(request, response);
        }
       
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {
                       
                        DiskFileItemFactory factory = new DiskFileItemFactory();
                       
                        //String path = request.getRealPath("/UploadFiles");
                        String path = "D:" + File.separator+ "upload" + File.separator;
                       
                        factory.setSizeThreshold(1024*1024);
                       
                        ServletFileUpload upload = new ServletFileUpload(factory);
                        upload.setHeaderEncoding("UTF-8");
                        try {
                                List<FileItem> list = upload.parseRequest(request);
                               
                                for(FileItem item : list){
                                       
                                        String name = item.getFieldName();
                                       
                                        if(item.isFormField()){
                                               
                                                String value = item.getString("UTF-8");
                                               
                                                ///System.out.println("name:" + name + "  value:" + value);
                                               
                                                request.setAttribute(name, value);
                                        }else{
                                               
                                                String value = item.getName();
                                               
                                                int start = value.lastIndexOf("\\");
                                               
                                                String fileName = value.substring(start + 1);
                                                //String fileName = new String(file.getBytes("ISO-8859-1"),"UTF-8");
                                                request.setAttribute(name, fileName);
                                                //StringBuffer sb = new StringBuffer();
                                                //sb.append(path);
                                                //sb.append(fileName);
                                                item.write(new File(path,fileName));
                                        }
                                }
                        } catch (Exception e) {
                                e.printStackTrace();
                        }
                       
                        request.getRequestDispatcher("filetbUploadSuccess.jsp").forward(request, response);
        }
       
}

posted @ 2012-06-28 13:24 chen11-1 阅读(1187) | 评论 (0)编辑 收藏

系统接口开发总结经验

最近一段时间的工作,很多都是和各系统间串联有关的,其间有两个问题很值关注,如何调用其它系统的接口和如何设计供其它系统调用的接口。
如何调用其它系统的接口?
因为是其它系统的接口,直接调用就行了,没有什么啊,其实不然,下面是我总结的一些经验,还是很有用的。
1.不要程序各个地方直接使用其它的系统的接口,最好是写一个类来封装其它系统的接口,如果其它系统的接口很多,可以专门建一个项目来管理类,这样当接口发生变化时(如接口名,接口方式),只需要替换该项目的DLL就可以了,而程序的其它地方都可以不用改,切忌在程序的各个地方直接调用其它系统的接口
2.对于调用会产生数据交易的其它系统接口,一定要写Log,这对将来数据出错时,查找问题的根源很必要,特别是对方系统的接口没有写log时,一旦出现数据问题,往往会不知从何查起,是我们给的数据有问题,还是对方系统处理我们给的数据有问题?在最近的一个项目中,因为我们产生数据的逻辑很复杂,而对方接口收到我们产生的数据后,也会做一个很复杂数据交易动作,在系统上线初期,出现了很多莫名其秒的数据,而我们正是通过在调用对方接口时的写log数据,tb很快查出一些是我们生成的数据有问题,一些是对方处理数据有问题
如何设计接口?
1.一般来说,公布给其它的系统用接口,都是稳定的,较少变动的,所以做足需求,能考虑到多种因素和未来可能发生的因素是前提,这样能尽可能减少接口的变动
2.接口的使用的类型变量尽量通用,特别是对使用此接口的用户一无所知情况下,对方可能是JAVA,也可能是VB6,也可能是C#,不要使用某种编程语言的特定类型,我认为比较好的是,参数和返回值都使用string类型,这样基本上的编程语言都能支持,然后参数和返回都使用XML来定义。
公布接口的时候一同公布接口定义文档,最好加上XDL文档。
3.对接口接收过来的数据,最好进行数据效验,因为你不能保证其它系统会传给你完全符合标准的数据。
4.对数据校验不通过的和执行失败的,最好能有清淅明了的提示返回给调用方
5.对于产生交易数据的接口,最好写log,记录调用方传过来的数据,方便将来查数,不能指望所有的调用方都会写log

posted @ 2012-06-28 13:22 chen11-1 阅读(922) | 评论 (0)编辑 收藏

非常实用的项目经理需要看的书籍介绍

 

项目管理知识体系指南(第3版)(PMBOK指南)
作者:美国项目管理协会
出版社:电子工业出版社
这本书是美国项目管理协 会(PMI)的权威经典著作,已经成为美国项目管理的国家标准之一,也是当今项目管理知识与实践领域的事实上的世界标准。本书共分为4大部分12章内容, 以精辟的语言定义了5个项目管理过程组和介绍了项目管理的9大知识领域。可以帮助一个人快速了解项目管理知识体系的全貌。

不过这本书很多理论在实际操作中很难把握,而且中文版翻译还是有点硬。

我推荐的第二本书是

成功的项目管理(原书第2版)
作者:(美)吉多,(美)克莱门斯 著,张金成 译
出版社:机械工业出版社
这本书适合入门项目经理。书中内容穿插了大量案例和提问让人去思考,而且是从一个项目启动到最后结束的时间顺序提供不同的指导,是一本不错的项目管理入门教科书。

我推荐的第三本书是:

项目管理:计划、进度和控制的系统方法(第9版)
作者:(美)科兹纳(Kerzner,H.)著,杨爱华,杨敏,王丽珍 等译
出版社:电子工业出版社

这本书是由项目管理领域最知名、最受人尊重的权威之一——哈罗德·科兹纳博士所著,项目管理学会(PMI)还以他的名字设立了“项目管理科纳奖”, 以表彰他在项目管理领域的杰出贡献。本书融入了《项目管理知识体系指南》2004版最新内容,tb全面阐述了项目管理的基本原理和概念。本书覆盖了项目管理的 所有关键领域:从决定项目成功的复杂精细的组织行为和结构,到对有效的项目管理至关重要的计划、进度和控制过程。

另外建议做为补充,可以多看几本项目管理方面的书,例如

有效的项目管理(第3版)
作者:(美)威索基,(美)麦加里 著,费琳 等译
出版社:电子工业出版社
项目管理:模板、解决方案与最佳实践(第2版
作者:(美)维尔朱(Verzuh,E.) 著,刘霞 等译
出版社:电子工业出版社
 此外想了解软件开发过程,推荐一本好书:

最后期限(中国第一本项目管理通俗读物)
作者:[美]迪马可 著,UML China翻译组 译
出版社:中国少年儿童出版社
把IT项目开发过程中的问题写得非常清楚,很棒!

对于想做管理软件实施的,最好再看一些具体讲管理系统实施经验的书,我看过的有:

构建高效的ERP系统(制造企业ERP实施指南)/ERP经典译丛
作者:(美)汉密尔顿(Hamilton,S.) 著,简学 等译
出版社:机械工业出版社
这本书对实施ERP建立业务模型很有好处。

成功的ERP项目实施——SAP R/3
作者:(荷)诺伯特·韦尔蒂 著
出版社:机械工业出版社
这本书是结合自己的实施项目,把一个项目过程写得很清楚,更重要的是,不厚,没有太多多余的文字。

SAP软件实施(第二版)
作者:维威克·乔 著,朱明 译
出版社:东方出版社
这本我觉得也不错,特别是选型建议,虽然有倾向性,但的确完备。

ERP项目实施全攻略
作者:田俊国 著
出版社:北京大学出版社
这本是用友写的,有中国特色和用友特色,可以看看。

信息系统建模信息项目实施方法手册(第二版)
作者:(德)史派克 著,黄官伟,霍佳震,魏嶷 译
出版社:清华大学出版社
这本书可以看看,不晓得如何画流程图的人可以读一读。

走出软件作坊
副标题: 三五个人 十来条枪 如何成为正规军
出版社: 电子工业出版社

这是我的朋友阿朱在2009年1月出版的新书,举贤不避亲,阿朱在国内做软件研发管理时间很长,难得的是他为了做好项目深入参与和思考了销售和实施 整个环节的问题,并不断总结自己的心得感悟,十年磨一书。这本书和我的书倒可以互补,他侧重从技术规划角度看项目,我侧重从市场互动角度看项目,但我们都 提倡根据实际情况积极灵活去解决问题,逐步做大做强做成正规军。
 

超越对手——软件项目经理的18种实用技能

作者:张志 著      出版社:机械工业出版社

这本也是我写的,是《项目经理的九阴真经》前身版本,比较实用,工作一年后人看都特别喜欢。

另外项目经理我建议还要看一看

金字塔原理:思考,写作和解决问题的逻辑(附盘)
作者:(美)芭芭拉·明托 著,王德忠,张珣 译
出版社:民主与建设出版社
麦肯锡方法
作者:(美)拉塞尔 著,赵睿 等译
出版社:华夏出版社
麦肯锡意识
作者:(美)拉塞尔 等著,张涛,赵陵 译

出版社:华夏出版社

posted @ 2012-06-26 16:25 chen11-1 阅读(2510) | 评论 (0)编辑 收藏

XML文件导入、导出到 DataSet

//导出dataset数据到XML文件

//Author:Quietwalk

//2010-09-09

 public bool ExportToXMl(DataSet ds, string strXMLPath)

 {

      //DirectoryInfo mobileDir = new DirectoryInfo(strXMLPath);

      FileInfo XMLfile = new FileInfo(strXMLPath);

      bool bReturnValue = false;

 

      try

      {

          if (ds != null && ds.Tables.Count > 0 && XMLfile.Exists)

          {

              ds.WriteXml(strXMLPath, XmlWriteMode.WriteSchema);

              bReturnValue = true;

          }

     

      }

      catch(SqlCeException ex)

      {

          throw(ex);

      }

 

      return bReturnValue;

     

 }

 

 //XML 数据导入到 DataSet中

//Author:Quietwalk

//2010-09-09

 public DataSet ImportFromXml(string fromPath)

 {

      FileInfo xmlFile = new FileInfo(fromPath);

      DataSet dsXML =null;

 

      if (xmlFile.Exists)

      {

          FileStream fsReadXml = new FileStream(fromPath, FileMode.Open);

          XmlTextReader myXmlReader = new XmlTextReader(fsReadXml);

          dsXML=new DataSet ();

 

          dsXML.ReadXml(myXmlReader);

          myXmlReader.Close();

 

 

      }

 

      return dsXML;

 

 }

 

说明:

 

 

 

DateSet.ReadXML()

ReadXML缺省使用XmlReadMode.Auto方式读取,这就给大数据量留下了低效率的伏笔。因为tb如果XML没有SchemeDataSet就会自己推算XML的结构,然后再加载,这就是低效的主要原因。让DataSet推算不让我们帮他算,因为DataSet已经提供了一个ReadXmlSchema方法。

 

dataset是这样存储的:table(0)中存放feature层的信息,包括fno等属性,只有一行;
table(1)
中包括attribute的信息包括ano等属性,有两行。如果attribute下还有其他子层,就依次放在 table(2)..中。 dataset读取数据之后,可以与datagrid绑定进行显示,绑定时可以针对dataset中的单个表,也可以一次绑定所有表。

 

1. 载入 xml 文件的格式要求

a. 不可以读取空的文件.
如果使用 DataSet.ReadXml 载入一个空的文件, 将出现异常, 因为没有根元素.

b. 可以读取没有 <?xml?> 头的 xml 文件.
你的 xml 文件可以不包含 <?xml version="1.0" encoding="utf-8" ?> 这样的代码.

2. xml 文件的编码格式

a. <?xml?> 头中标记的编码最好和文件自身的编码一致.
在测试文件中, 我使用 utf-32 存储标记为 utf-8 xml 文件, 或者反过来都导致了 DataSet 读取文件异常. 虽然, 我并没有对所有的编码进行测试, 而且用 ASCII 存储标记为 utf-8 xml , tb读取不会出现异常, 只不过中文可能会出现乱码, 最好还是保持编码一致吧.

b. 采用 ASCII 存储 xml 文件可能出现中文乱码.
xml
自身是不支持 ASCII , 虽然读取没有异常, 但你读取的信息可能是一堆"?".

3. XmlReadMode 参数对 DataSet 读取 xml 文件的影响

a. 非典型 DataSet 如果包含架构, 并使用默认的 XmlReadMode.Auto 或者忽略此选项, 将只载入 xml 文件中符合架构的数据.
如果你的数据集中包含了架构信息, 例如定义了 S1, T1(Name string, Age int), Student(Name string, Age int), Teacher 4 个表, 数据集名称为 TestDS, 命名空间为 http://tempuri.org/TestDS.xsd, 如果一个的 xml 文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<TestDS xmlns="http://tempuri.org/TestDS.xsd">
  <Student>
    <Name>
小明</Name>
    <Age>12</Age>
  </Student>
  <Teacher>
    <Name>
王老师</Name>
    <Age>32</Age>
  </Teacher>
  <Room>
    <ID>123</ID>
  </Room>
</TestDS>

使用 DataSet.ReadXml 读取此 xml 文件时, 第一个 Student 被读取到 DataSet Student 表中, 因为 xml Student 对应的列名数据类型和 DataSet 架构一致. 第二个 Teacher 不会被读取, DataSet 架构中虽然包含了表 Teacher, 但并没有定义任何的列, xml 中的 Teacher 包含了 Name, Age 两个列. 第三个 Room 不会被读取, 因为架构中不包含表 Room. 以上是针对非典型 DataSet 测试的结果, 典型 DataSet 应该也是如此, 有兴趣的朋友可以自己测试一下.

b. 非典型 DataSet 如果不包含架构, 并使用默认的 XmlReadMode.Auto 或者忽略此选项, 将分析并采用 xml 文件的架构.
如果仅仅使用 new 创建了一个非典型 DataSet, 那么 DataSet 中尚未包含架构. 如果一个的 xml 文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<TestDS xmlns="http://tempuri.org/TestDS.xsd">
  <Room>
    <ID>123</ID>
  </Room>
  <Room>
    <ID>123</ID>
    <Name>
储藏室</Name>
  </Room>
</TestDS>

DataSet 读取 xml 文件时, 将分析数据集名称, 命名空间, 并针对每一条数据进行架构分析, 我想这一点很重要, 正如上面的文件中, 当读取到第一个 Room , 分析得到需要 Room(ID) 这样的表, 读取第二个 Room , 会发现 Room 表的架构信息已经存在, 经过对比发现需要变更架构为 Room(ID, Name). 每一条数据除了架构分析以外, 还要进行可能的架构更改工作. 因此, 在效率上可能不及 a 中说到的情况.

c. 对于 XmlReadMode 的其余选项, 似乎并不用于 ReadXml 方法, 或者没有实际效果.

4. 载入 xml 字符串, byte[] 数组到 DataSet

a. 使用 DataSet.ReadXml(new StringReader(string)) 可以将 xml 字符串载入到 DataSet.
xml
字符串应该是合法的, 如果在字符串的 <?xml?> 头中指定 encoding, 那么指定任何编码都可以读取中文字符, 也就是说指定对于载入是没有作用的.

b. 使用 DataSet.ReadXml(new MemoryStream(byte[])) 可以将 byte[] 数组表示的 xml 载入到 DataSet.
对于编码, 载入 byte[] 数组和载入文件的要求是类似的, <?xml?> 头中标记的编码应该和 byte[] 数组的编码一致, 最好不要采用 ASCII, 原因在上文中已经提到. 使用 Encoding.GetBytes 方法将字符串转化为 byte[] 数组时, 编码应该对照. 如果, 使用 Encoding.UTF8.GetBytes, 那么字符串中 <?xml?> 头应该标记 uft-8, 另外, 也可以不标记 encoding, 结果是相同的.

posted @ 2012-06-26 16:23 chen11-1 阅读(890) | 评论 (0)编辑 收藏

WCF传较大数据 例子说明

在从客户端向WCF服务端传送较大数据(>65535B)的时候, 客户端会报错。什么远程服务器没反应之类的。

问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数据量差别并不大。

然后发现,在客户端和服务端实际使用的是不同的配置,对于客户端,在添加ServiceReference时自动生成的ServiceReferences.ClientConfig文件中system.serviceModel节下有这样的设置:

<bindings>
    <basicHttpBinding>
        <binding name="BasicHttpBinding_WcfService" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
            <security mode="None" />
        </binding>
    </basicHttpBinding>
</bindings>

然后在Client节里应用Binding Configuration:

<client>
            <endpoint address="http://localhost:22000/Service/WcfService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_WcfService"
                contract="WcfServiceReference.WcfService" name="BasicHttpBinding_WcfService" />

 

</client>

在Binding里指定了最大缓存字节数和最大接受字节数,相当于2G的大小!除非传一整套连续剧,一般是够用了。

而在服务端,Web.config文件里,Bindings节是空的,而Service也没有指定bindingConfiguration属性,那么它们采用的就是默认的65535的大小。

问题找到,解决就比较容易了:

在Bindings节添加新的Binding设置,TB指定最大接受数据:

<bindings>
    <basicHttpBinding>
        <binding name="LargeDataTransferServicesBinding" maxReceivedMessageSize="2147483647"
  messageEncoding="Text" transferMode="Streamed" sendTimeout="00:10:00" />
    </basicHttpBinding>
</bindings>

之后给相应的Service指定bindingConfiguration属性:

<service behaviorConfiguration="Server.Service.WcfServiceBehavior"
  name="Server.Service.WcfService">
  <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeDataTransferServicesBinding" contract="Server.Service.WcfService" />
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

这样就可以从客户端发送足够大的数据了。

P.S.:

asp.net默认只能传4M的文件,所以尽管设定了Wcf两端的配置,还是超不出.net的限定,所以如果要传输大文件,还需要在System.Web节下加上

    <httpRuntime maxRequestLength="102400" />
这里的单位是KB,这样就可以传100M的文件了。当然,这么大的文件,最好还是分段传输比较好。

posted @ 2012-06-26 16:20 chen11-1 阅读(1118) | 评论 (0)编辑 收藏

JAVA OOP学习总结

这些都是我上课认真听讲的结晶,里面提到了许多用Java做开发的许多小技巧 同时还有一些oracle数据库的东东。

1、第一章
 为什么类名可以直接访问类的属性和方法?
 答:可以被类名访问的都是静态方法,而静态方法是在程序一运行,JAVA虚拟机就会在内存中为其开辟了空间并进行了初始化
 所以,我们可以直接使用类名来调用属性和方法。普通的实例方法则是在创建对象的时候被初始化,所以只能通过对象名进行访问
 
 先有对象后有类
 在类中用static修饰的方法和变量称为类属性,方法
 不适用static修饰的属性和方法,属于单个对象,通常称为为实例属性(实例变量),实例方法
 构造函数:与类同名且无返回值,作用是初始化成员

2、第二章
 
  一个JAVA程序中在编译的时候,有多少个class 在编译的时候就会产生多少个.class文件
  注意:JAVA中的类名第一个字母大写,方法第一个字母小写,如果方法名由多个单词组成 从第二个单词开始 首字母都要大写
  初始化子类对象的时候,会默认优先调用父类的构造函数
  使用关键字 super 可以在子类中访问父类的成员 (无法访问private修饰的成员)
  super代表对当前对象的直接父类对象的默认引用
  如果我们不显示使用super关键字调用父类的有参构造函数,JVM将会自动调用父类的无参构造函数进行对父类成员的初始化
  如果一个类存在多重继承关系,既:A类继承B类,B类继承C类,C类继承自D类
  如果子类中存在与父类同名的方法,只会调用子类的同名方法
 
  抽象类:如果父类是一个抽象类 且包含抽象方法,那么子类必须实现抽象方法
  严重注意:子类实现父类的抽象方法,方法签名必须与父类对应抽象方法相同

  用final关键字修饰的类不能被继承,用final修饰的方法不能被重写,用final修饰的变量tb值无法改变
  abstract关键字的作用与final相反
  用final修饰一个对象,对象的属性是可以改变的,但对象引用指向另一个堆空间

  abstract不能和private同时修饰一个方法
  abstract不能和static同时修饰一个方法
  abstract不能和final同时修饰一个方法或类
  注意:abstract不能用来修饰属性和构造方法

  MIS:经营管理系统
   OA:办公自动化系统
  ERP:企业资源管理系统
         CRM:客户关系管理系统
 
  为什么抽象类不能被实例化?
  答:因为抽象类
 
  注意:如果父类是抽象类,子类必须实现抽象类中的所有抽象方法。除非子类也是一个抽象类,就可以不实现父类中的抽象方法

posted @ 2012-06-21 17:08 chen11-1 阅读(387) | 评论 (0)编辑 收藏

Java项目经验——程序员成长的关键

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点:
1、掌握项目开发的基本步骤
2、具备极强的面向对象的分析与设计技巧
3、掌握用例驱动、以架构为核心的主流开发方法

没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法!

关于基础tb知识:你可以看看这些名词或知识点,看是否能说出个一二三四来。

JavaSE
----基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while
----面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC(垃圾回收)、override、overload、对象转型(casting)、多态、this、super
----异常处理:理解编译期错误和运行期错误的区别、Exception、RuntimeException、checked exception、unchecked exception、try、catch、finally、throw new XXXException、throws XXXException、异常处理的基本原则
----数组与集合:数组的定义和使用方法、Collection、List、Set、Map、ArrayList、HashSet、HashMap、Iterator、equals、hashCode、Comparable、Comparator
----常用类:String、intern、常量池、StringBuffer、java.util.Date、SimpleDateFormat、Regex(正则表达式)
----反射机制:Class、Method、Field、invoke、newInstance、BeanUtils(apache-commons)、PropertyUtils(apache-commons)
----输入输出流:InputStream、OutputStream、Reader、Writer、Adapter设计模式与原始流类、Decorator设计模式与包装流类、对象序列化和反序列化
----多线程:Thread、Runnable、sleep、wait、notify、synchronized、lock

Servlet和JSP
----HttpServlet、doGet、doPost、HttpServletRequest、HttpServletResponse、request.getParameter()、request.setAttribute()、request.getAttribute()、request.getSession()、ServletContext、Filter、web.xml、tomcat、forward与redirect、http协议的无状态性、cookie、JSP Scope Object、<c:out …/>、<c:forEach …>

HTML与JavaScript
----你需要能够理解常见的网页标签、理解在网页中引入JavaScript的方法、以及JavaScript的基本语法与使用方法

以上,就是你进一步学习Java所必备的基本知识。特别是一些个专业术语和名词,看到这些名词,如果你像看到亲爹一样亲切,那么说明你对Java的基础知识就很熟悉了。

接下来是SSH
对于初学者来说,这三大框架被赋予了太多神秘的色彩,似乎它们是重中之重的知识!但是对于拥有多年Java开发经验的专业技术人员来说,对于那些Java牛人来说,却对这三大框架不太感冒!难道它们不重要吗?

现在很多企业都在用这三大框架,所以很多企业也把掌握这三大框架作为招聘的必备条件。不可否认的是,也有很多大型企业没有用这三大框架,这些企业经过多年发展,自身已经有一定的技术积累,也形成了自己独特的技术框架体系。这三大框架既可以说很重要,也可以说不重要。

说重要的原因在于:这三大框架对JavaEE开发中所存在的普遍的问题,提供了优美的解决方案,它们蕴含了这个行业中最NB的开发人员的努力和想法,所以,学习这三大框架,你就可以窥探到这些处于技术巅峰的牛人们究竟对一个问题是怎么想的,通过一种什么样的设计思路去解决问题的。所以,对于你来说,你没有太多项目开发的经验,经验是什么?经验就是你知道可能会遇到哪些问题,针对哪个问题可以有哪些解决方法,在某个情景下,哪种解决方法是较好的,哪种方法不太好等等!如果你没做过什么项目,你根本就不会去意识到你可能会遇到哪些问题,而这些问题往往又是非常关键的!解决得不好,会影响到你的程序的稳定性、可扩展性等等!三大框架就给初学者提供了了解你以后可能会遇到哪些问题,以及针对这些问题的解决方案!

当你了解了这三大框架为什么是重要的,那么你也就能理解,为什么这三大框架也可以说是不重要的。如果你曾经开发过很多项目,你碰到了各种各样的问题,凭着你的技术功底,逐个击破了这些问题,在这些人眼里,三大框架(是不是还有N个框架?呵呵)都是浮云!

你属于哪一种人呢?如果你没有太多项目开发经验,那么三大框架对于你来说就是非常重要的!而且,由此你也知道了该怎么去学这三大框架。对于三大框架的学习而言,着力点在于给你展示问题,并触发你自己主动的思考,我们鼓励你提出自己的想法,也许你的想法很白痴,但那毕竟是你自己的想法,如果你不知道牛人的想法,那你怎么知道自己的想法是很白痴的呢?在这种思想的碰撞过程中,你就会逐渐提高自己!所以,三大框架学完之后,你不应该只是看到一大堆配置文件,你不应该只是看到了一些Action,一些Service,一些映射文件,你不应该只知道session.save/update/delete,你不应该只是知道struts2中有一堆interceptor,你不应该只是看到一堆jar包……

如果你只是知道拷贝一堆jar包,定义一系列配置文件之后,SSH三大框架就能够运行起来了,也可以给你干活了,那么,很悲哀的是,你仍然没有掌握三大框架的精粹!请你回答以下问题:

Struts2:
为什么每次请求都要创建一个Action对象?
ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题?
为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求?
请你给我谈谈ValueStack?
Struts2是如何实现MVC设计模式的?

Spring:
你为什么要用Spring?
请你聊一聊IOC/DI?
什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理?
把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行查询任务的方法定义为read-only?

Hibernate:
请你谈谈你对OR映射的理解?
很多人说Hibernate不适合大项目,性能有问题,你是如何理解的?
Hibernate为什么一定要定义一个数据库标识?
为什么Hibernate建议你的实体类实现hashCode和equals方法?
谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识?
谈谈你对Hibernate关联映射与数据库外键之间关系的认识?
调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解
调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解
请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size
配置了lazy=”true”一定会实现懒加载吗?
请你谈谈Hibernate中的“N+1”问题
请你谈谈Hibernate有哪些最佳实践?

以上并非SSH中全部重点的问题,但它们能考察你能否灵活运用SSH框架!如果你能深刻理解这些问题,再配以合适的实战项目训练,你也会逐渐成为牛人!

最后是项目开发能力
不管你是学Java还是别的技术,你的根本目的在于给客户创造价值!否则,你下大力气学习的东西,随着技术的进步和更新,很快就会过时!所以,技术的核心在于用技术创造有价值的成果!也就是说,客户需要什么,你就要用技术把客户需要的东西给他造出来!一个公司之所以要用各种福利条件极力挽留你,是因为你能够给公司带来极高的利益!那么,你有什么可以给公司利用的呢?公司最看重你的哪方面的能力呢?

做项目需要的能力很多,其中最核心最基础的就是建模能力(现在最主流的就是面向对象建模!)。什么是建模能力呢?

我给大家一个面试题:
一个保险公司的保险卡管理模块:销售人员领取保险卡信息(保险卡数量、卡号、领取日期),然后直接销售给客户,销售完毕后,将保险卡信息录入保险公司系统内部(销售人员信息、购买人信息、购买的保险卡数量、卡号等),客户登录保险公司网站激活保险卡,需要填写(保险卡卡号、激活密码、被保险人信息、受益人信息)

要求就是:如果这个模块交给你来做,你要怎么做?你要解决哪些问题?你可否画个图,给我描述一下你的想法是什么吗?

这只是一个面试题而已,因为只有简单几句话,所以我把它放到这里,让大家感受一下所谓建模要解决什么问题。而业务领域的问题实在是太多了!也许一个几十上百页的需求文档才能把某个业务领域的问题描述清楚,而你的职责就是要把它们实现出来!

某个公司要开发一个考勤管理系统,要求与现有的人力资源系统对接,你是主要的技术负责人,那么,你要做哪些工作呢?

某ERP项目要实现一个排班管理模块,交给你去完成,你如何去完成呢?

不要抱怨项目经理给你的信息太少(只有几句话),不要抱怨客户没有描述清楚他们的需求……你的价值就在于理顺所有的问题tb,用各种手段获得你想要的信息,按照一定的思路汇总,并在特定的时间里逐个解决它

你应该意识到学Java不是一个坦克大战、一个网络飞车、一个CMS、一个DRP、一个OA那么简单,你不要沉迷于那些技术细节(虽然也是有必要的,但不要转牛角尖),不要满足于实现了CRUD式的项目需求(虽然这是基础中的基础),在你的前方,永远有一个目标在那里,需要你去努力追赶!  

今后你将面对更加繁杂的需求,你学习项目的唯一目的,就是:学习如何将需求转化为实现,如何对需求进行分析,如何建立概念模型,如何理顺各种概念之间的关系,如何进行设计,如何选择合适的技术来实现你的设计方案,如何对你的实现进行测试,如何解决你所遇到的形形色色的问题(性能、需求变更等)。当你真正到公司里面从事了几年开发之后,你就会同意我的说法!

利用Java找工作,需要的就是项目经验,项目经验就是理解项目开发的基本过程,理解项目的分析方法,理解项目的设计思路,理解项目的实现技巧,理解项目的测试方法,理解项目中各种问题的解决方案!!!

所以,你该清楚你的目标了!

posted @ 2012-06-21 16:23 chen11-1 阅读(13241) | 评论 (5)编辑 收藏

C#打包教程

1 新建安装部署项目

打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定。

 

2 安装向导

关闭后打开安装向导,点击下一步,或者直接点击完成。

 

3、开始制作

安装向导完成后即可进入项目文件夹:

 

(1)双击"应用程序文件夹"(Application Folder)在右边的空白处右击,选择添加->文件,将你的应用程序生成的可执行文件(*.exe)和相应的类库和组件添加进来。然后右击你的文件,创建快捷方式,然后把快捷方式分别复制或剪切到左边的"用户的'程序'菜单"(User's Programs Menu)"用户桌面"(User's Desktop)中。这样安装程序安装完成后会在 "开始->所有程序""桌面"上生成程序的快捷方式。也可以TB直接在"用户的'程序'菜单""用户桌面"相应目录下新建快捷方式,然后定位到你的文件。

 

(2)然后右击左边的"应用程序文件夹"(Application Folder)打开属性对话框:将属性中的"DefaultLocation"的路径中的"[Manufacturer]"去掉,不然的话做好的安装程序默认安装目录会是"C:\Program Files\你的用户名\安装解决方案名称"

 

(3)然后打开解决方案管理器,右击你的解决方案名称,选择属性:打开的属性页中,

选择"系统必备",在打开的系统必备页中,在"指定系统必备安装组件的位置"中选中如下选择项:

 

从与我的应用程序相同的位置下载系统必备组件。

 

(4)接着配置属性,把生成选项卡下的复选框全选,选上以后,在生成的安装文件包中包含.NetFramework组件

 

好了,这样就完成99%了,然后点击"生成->生成解决方案",哈,生成成功!

 

4 、制作完成

 

现在打开解决方案文件夹下的Debug文件夹,就可以看到生成的安装文件了。

 

5 关于"卸载"功能的添加

 

上面只介绍了简单的生成安装的方法,但是在VS2005下并没有直接生成卸载程序的功能,所以我们只好用msi来实现了,操作方法如下:

 

在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:\windows\system32文件夹下,添加进去以后,为了让他更像个卸载程序,把他的名字改成"Uninstall.exe",当然这个关系不大,改不改都行。

 

然后创建一个快捷方式,放到"开始-程序"中,接下来我们要做的就是查找这个部署项目的ProductCode了,鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的TB属性,这个区别很大,这时你就可以看到ProductCode了。

 

然后打开你创建的那个快捷方式的属性对话框,在Aguements属性中输入"/x {ProductCode}",好了,然后点击"生成解决方案"即可生成带有卸载功能的安装程序了。

posted @ 2012-06-20 13:26 chen11-1 阅读(1087) | 评论 (0)编辑 收藏

MyEclipse 中文乱码 解决方法

Myeclipse导入一个项目,有中文乱码问题,解决方法如下:

 

一、将整个project设置编码UTF-8UTF-8可以最大的支持国际化)

windows->Preferences->general->Workspace->Text file encoding->Other框中的Text file encoding改为UTF-8


二、java源文件编码设置为UTF-8.

windows->Preferences->general->Context Types->Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Updatetb则设置Java文件编码为UTF-8

posted @ 2012-06-20 13:24 chen11-1 阅读(1065) | 评论 (0)编辑 收藏

怎么查询端口被占用

source:http://www.cnblogs.com/xyzdw/articles/2108149.html

以下文章主要以80端口号为例,如果想知道其他的端口号也可以使用该方法..........................

1、在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等.
        这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入"cmd"后点击确定按钮,进入DOS窗口,接下来分别运行以下命令:
        >netstat -aon | findstr "80"
                Proto  Local Address          Foreign Address        State            PID
                ====  ============      ==============  ==========  ======
                TCP    0.0.0.0:80                    0.0.0.0:0                LISTENING      1688
可以看出80端口被进程号为1688的程序占用.
        >tasklist | findstr "1688"
图像名                                                PID            会话名                    会话#       内存使用
               ========================= ====== ================ ======== ============
               inetinfo.exe                                        1688           Console                      0              2,800 K
很明显,是inetinfo占用了80端口;inetinfo.exe主要用于支持微软Windows IIS网络服务的除错,这个程序对你系统的正常运行是非常重要的.
        当然,并不是只有inetinfo.exe进程会占用80端口,这只是我机器上的情况.如果你并不了解此进程是干什么用的,千万不要盲目地将其kill掉,最好先百度或Google搜索一下;当然如果你很了解它,并确定可以终止,那么继续下面的命令.
        >taskkill /pid 1688 /F
成功: 已终止 PID 为 1688 的进程。
如果你很熟悉此进程,并确定可以终止,那么就直接使用上面的命令把PID为1688的进程终止.(这一步同样可以在任务管理器中执行,inetinfo.exe就是任务管理器中的映像名称,选中它,点击"结束进程"即可)
        >tasklist | findstr "1688"
再次确认是否成功终止,如果成功终止此次执行命令后应返回空.

2、linux下如何查看80端口占用情况?TB是被哪个进程占用?如何终止等

查询端口是否被占用,被哪个进程占用有两种方式:1、netstat -anl | grep "80" ;2、lsof -i:80

终止进程的方式:kill pid

posted @ 2012-06-19 17:22 chen11-1 阅读(2228) | 评论 (0)编辑 收藏

仅列出标题
共20页: First 上一页 12 13 14 15 16 17 18 19 20 下一页