JAVA项目开发点滴

来源:互联网 发布:mssql数据库迁移 编辑:程序博客网 时间:2024/04/26 10:57

  1. 类中的静态方法,可以直接不用初始化对象直接调用;
  2. @AutoWired注解,需要在basic.xml,配置bean,可以传入class里面的属性值,例如
  3. <!-- Service --><bean id="PeopleService" class="*.service.impl.PeopleServiceImpl"><property name="searchSystemId"><value>${people_service.search.system_id}</value></property><property name="searchPwd"><value>${people_service.search.pwd}</value></property><property name="searchBaseUrl"><value>${people_service.search.base_url}</value></property><property name="searchReqUrl"><value>${people_service.search.req_path}</value></property></bean>

    JUnit使用:
  4. 参考这个http://wenku.baidu.com/link?url=a9uZmrBRCaqAlNXOamoUa7pBiMgq86D4_2HmSi1yqPGWDocK_h8TX8EXNgm7-1AN0o1Udp1tnIGMK1wU9f2Da4Ua-aLhvpND7cZ64NbLSWu
  5. 项目中jdk版本的选择,除了在cmplier里面设置jdk包,还需要再,项目-邮件-属性-Project Facets,的java有个下拉框选择一致就可以了

spring的bean配置:链接地址http://www.taobaotest.com/blogs/qa?bid=7395


5、直接运行severlet获得java生成jpg代码

HttpServletResponse response;response = rundata.getResponse();Random random = new Random();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);  Graphics g = image.getGraphics();g.fillRect(0, 0, width, height);//设置填充范围g.setFont(new Font("Times New Roman",Font.PLAIN,18));//划线g.setColor(getColor(colorLineStart,colorLineEnd));for(int i=0;i<lineNum;i++){int x = random.nextInt(width);int y = random.nextInt(height);//int x1 = width-random.nextInt(width);//int y1 = height-random.nextInt(height);int x1 = random.nextInt(12);int y1 = random.nextInt(12);g.drawLine(x,y,x+x1,y+y1);}//随机数字写出来List<String> codeList = getCode();for(int i=0;i<codeList.size();i++){g.setColor(getColor(colorFontStart,colorFontEnd));g.drawString(codeList.get(i), i*13+7, 16); }g.dispose();//发送到httpresponse.setContentType("image/jpg");response.setHeader("Pragma","No-cache");response.setHeader("Cache-Control","no-cache");  response.setDateHeader("Expires", 0);//写入SessionHttpSession session = rundata.getRequest().getSession();session.setAttribute("checkCode", codeList.toString());try {ImageIO.write(image, "JPEG", response.getOutputStream());} catch (IOException e) {e.printStackTrace();}

6、在mybaitis-generator文件夹下:

1)首先设置generatorConfig.xml中的配置,定义数据库、生成类的文件夹等信息

2)运行run.bat 

3)在Service下面的dbbean.xml里面 增加bean

7、引入一个已经存在的maven到eclipse
1)从svn下载项目
2)用mvn eclise:eclipse命令新建eclipse相关文件
2)用mvn eclise:clean
3)打开eclipse,file-import-maven project-选择项目,即可
4)如果mvn有问题,可以在开发的根目录,运行mvn eclipse:clesn
5)项目右键--config--cover to maven project即可。




8、当前项目eclipse的java编译器选择,通过项目--右键--properties
1)java buildpath:可以查看当前引用的liberay里面的jdk版本,如果没有的话,点击Add libaray----jre system libaray,通过此方式可以安装excution eviorment和安装jre,然后选择不同的自己需要的执行环境
2)另外在run config里面jRE的选择也要和上面的一致。

9checked/unchecked exception的区别

之所以区分 checked/unchecked exception,JAVA的设计思想是区分从类/方法设计者角度来看两种不同的异常: 一种是设计者认为这个方法在使用过程中使用者能够处理的异常,这些往往作为checked exception。比如一个IO系统的设计者会认为诸如物理文件不存在或者介质无法读取等异常时很可能发生,而使用者完全可能捕获这个异常,通过让用户重新输入文件名等方式重新进行这个操作,也就是说,这是一个可恢复的操作。所以我会在诸如 read()/write()等操作中throw 一个 IOException(checked exception)。 第二种是设计者认为使用者不能够处理的异常,比如我写一个函数要求传入的参数是个正数,那么当我发现使用者传了个负数进来时,合理的预期是程序中出bug了。如果我抛出一个异常描述这件事,即使我要求调用者捕获这个异常,他肯定也不知道该怎么办(总不能随便传一个正数进来吧)。这时候我就会抛出一个IllegalArgumentException(uncheck exception),这里面的潜台词是:小子,我知道你也是帮人背黑锅的,处理不了这个,你还是交给你的领导(调用你的程序)去处理这个异常吧。 同理,当JVM发现除数为0时,抛出的ArithmeticException也是一个unchecked exception。 

10、修改数据库字段后,进入mybatis-generator目录,查看generatorConfig.xml目录,指定自己要更新的table

<table tableName="bu_case" domainObjectName="BUCase" />


运行run.bat,完成之后,工具会自动生成db的dao和vo。如果是sql自己写了,到src/main/resource需要更新相应的字段

11、查看配置文件http://localhost:8081/internal/Explorer?context=bucase?


12、项目刚开始,访问的路径,提示无法找到template。需要注意配置webx-componet-and-root.xml中

<!-- Template渲染服务。 --><services:template searchExtensions="true"><tpl-engines:velocity-enginetemplateEncoding="UTF-8" strictReference="false"path="/templates/${component}/templates"><global-macros><name>global/*.vm</name></global-macros>
MAVEN可以指定配置的初始路径——不一定非要放在webapp下面。在pom里面配

<build><finalName>xxxx</finalName><!-- maven filter 配置 --><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources>

13打包没有问题,但是在启动tomcat的时候总是回报


Context initialization failedorg.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [xxx.xml]Offending resource: ServletContext resource [/xxx.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/home/xxxx.class]; nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
这个解决方案应该是spring的版本有问题。

14

1)在WEB_INF里面的jboss-web.xml配置,在域名/xxx后之后,还可以很直接访问根目录一样。

<context-root>/xxx</context-root>

2)在WEB_INF/webx.xml重配置<components defaultComponent="",指定域名不加PATH的时候指定的路径

3)在common/pipeline.xml里面配置<pl-valves:analyzeURL homepage=""/>里面配置在默认路径下,指定的首页。

15:如果eclipse一直处于auto-config打包中,没有进展,是因为autoconfig文件和定义变量的文件没有对应起来。比如:antx.properties里面的值没有配置好。


16:发布遇到问题,

     1)服务无法启动,应该是上次用了root权限启动,日志、以及其他文件夹的权限都被改为root权限,后来admin无法创建文件,需要将文件权限修改后,再启动。

    2)打包成功,但是启动tomcat失败,很有可能是java环境没有安装好,重新PE初始换环境就OK了。 

    3)打包成功、部署成功。但是curl都无法访问,看看是不是端口被占用了。查到进程,把进程杀掉,然后在重启服务。

    4)


17:出现“关于Web请求中出现413 FULL head问题的解决方法”的提示,可能是cookie太大了, 清楚cookie、缓存就OK了。 


18:查看包冲突依赖

      1)eclipse中,打开pom文件,打开“dependecy Hiberachy"的标签,左边可以看到个依赖层次,右边是依赖jar,可以点击右边的每个条目,看到被那些依赖已用过

      2)也可以打开看WEB-INF/lib下的jar包,看一下实际打包过程中下载的jar包

     3)也可以运行mvn dependency:tree > tree.txt 看到依赖关系。


19:启动sql命令(Linux)路径在/etc/init.d 命令mysql -u root -p xxxxxxxxx

============本文转自http://lavasoft.blog.51cto.com/62575/436216,在此感谢原作者的成果===============Compile、Make和Build的区别 针对Java的开发工具,一般都有Compile、Make和Build三个菜单项,完成的功能的都差不多,但是又有区别。 编译,是将源代码转换为可执行代码的过程。编译需要指定源文件和编译输出的文件路径(输出目录)。Java的编译会将java编译为class 文件,将非java的文件(一般成为资源文件、比如图片、xml、txt、poperties等文件)原封不动的复制到编译输出目录,并保持源文件夹的目 录层次关系。 在Java的集成开发环境中,比如Eclipse、IDEA中,有常常有三种与编译相关的选项Compile、Make、Build三个选项。这三个选项最基本的功能都是完成编译过程。但又有很大的区别,区别如下:1、Compile:只编译选定的目标,不管之前是否已经编译过。 2、Make:编译选定的目标,但是Make只编译上次编译变化过的文件,减少重复劳动,节省时间。(具体怎么检查未变化,这个就不用考虑了,IDE自己内部会搞定这些的) 3、Build:是对整个工程进行彻底的重新编译,而不管是否已经编译过。Build过程往往会生成发布包,这个具体要看对IDE的配置 了,Build在实际中应用很少,因为开发时候基本上不用,发布生产时候一般都用ANT等工具来发布。Build因为要全部编译,还要执行打包等额外工 作,因此时间较长。================================================================================

20:myBatis中$ 和#的区别

1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 
2)$将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by 111,  如果传入的值是id,则解析成的sql为order by id. 
3)#方式能够很大程度防止sql注入。$方式无法防止Sql注入。
4)$方式一般用于传入数据库对象,例如传入表名。比如:order by 动态参数时需要注意,用$而不是# 
5)一般能用#的就别用$.

21、maven的生命周期

validate:验证工程是否正确,所有需要的资源是否可用。 compile:编译项目的源代码。   test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。 Package:把已编译的代码打包成可发布的格式,比如jar。 integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。 verify:运行所有检查,验证包是否有效且达到质量标准。 install:把包安装在本地的repository中,可以被其他工程作为依赖来使用。 Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。 clean:清除先前构建的artifacts(在maven中,把由项目生成的包都叫作artifact)。 site:为项目生成文档站点

22、maven filter 和autoconfig 的区别

    见这个:http://my.oschina.net/zimingforever/blog/310314

23、Java对象和JDBC对应关系

 从 JDBC 类型映射到 Java 类型JDBC 类型Java 类型CHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERintBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINARYbyte[]VARBINARYbyte[]LONGVARBINARYbyte[]DATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.Timestamp从 Java 类型映射到 JDBC 类型Java 类型JDBC 类型StringVARCHAR 或 LONGVARCHARjava.math.BigDecimalNUMERICbooleanBITbyteTINYINTshortSMALLINTintINTEGERlongBIGINTfloatREALdoubleDOUBLEbyte[]VARBINARY 或 LONGVARBINARYjava.sql.DateDATEjava.sql.TimeTIMEjava.sql.TimestampTIMESTAMP

24、mybatis各个操作返回值

insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。update/delete,返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。queryForObject,返回的是:一个实例对象或null;需要包含<select>语句,并且指明resultMap;queryForList,返回的是:实例对象的列表;需要包含<select>语句,并且指明resultMap

25、定时器配置

字段名(项)  必须  值范围  特殊字符 秒 是 0-59  , - * /  分 是 0-59  , - * /  时 是 0-23  , - * /  月的某天  是 1-31  , - * ? / L W  月 是 1-12 or JAN-DEC  , - * /  星期的某天 是 1-7 or SUN-SAT  , - * ? / L #  年 否 empty, 1970-2099  , - * / 先看示列:"0 0/30 8-10 5,20 * ?" 表示“每个月的5日和20日的8:00,8:30,9:00,9:30,10:00,10:30” 字符解释: ,:与,表式","两边的值都是需要执行的时间,如上例"5,20",每个月的5日与20日。 -:表示值的范围,如上例"8-10",从8点开始到10结束,包括8点与10点。 *:表式任意可合法的值,如上例"*"是处于月份的字段,所以代表1-12中的任意值,所以上例是指“每个月”。 /:增量,如上例是指从0分开始,每过30分钟取一次值。如果换成"5/8"就是从第5钟开始每过8分钟取一次值:8:05,8:13,8:21,8:29等等 ?:不指定值,就是“我也不知道”的意思,只能出现在“月的某天,星期的某天”项中。在什么情况下用呢?如上例如果指定值为星期一,那么可能会出现如4月5日不是星期一,这里就是不对应,有冲突,所以指定为"?",也就是说我也不知道是星期几,只要是5日与20日就行了,至于是星期几我才不管呢! L:最后的,last的意思,只能出现在“月的某天,星期的某天”项中。表示当前月或当前星期的最后一天,注意的是星期的最后一天为星期六。 W:月中最接近指定日期的普通日(星期一到星期五),只能出现在“月的某天”,如"15W"就是说当前月最接近15日的普通日,如果当月的15是星期三就是星期三,如果当月的15是星期六那么就是昨天也就是星期五,如果当月的15是星期天则为第二天也就是星期一。 #:当前月的第N个星期X日,只能出现在“星期的某天”项中。如"6#3"就是说当前月的第三个星期五,注意"1-7",1=星期天,2=星期一等等。 
 <!--运行类初始化--><bean id="cronTab" class="目标类">    <property name="1" value=""></property>        <property /></bean>    <!--定义运行的类+方法+定时属性--><bean id="backRemind" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="concurrent" value="false" /><property name="targetObject" ref="cronTab" /><property name="targetMethod" value="backRemind" /></bean></property>        <property name="cronExpression" value="0 0/2 * * * ?" /></bean><!--实际触发运行--><bean id="schedule"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean"autowire="no"><property name="triggers"><list><ref local="backRemind" /></list></property></bean>




































0 0