分类存档: JSP

解决java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.getParameterMetaData()Ljava/sql/ParameterMetaData错误

昨天使用DbUtils – BoneCP的时候,遇到这个错误:

java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.getParameterMetaData()Ljava/sql/ParameterMetaData

原因是LIB目录里有多个ORACLE驱动JAR,分别是OJDBC14和CLASSES12,我把这两个删除,然后找上OJDBC6,问题解决了.

继续阅读 »

Nginx Windows下TCP连接数用完的解决方法

公司,测试环境.windows+Nginx+tomcat

下午,准备打开测试环境工作时,发现nginx出现502 bad gateway错误.按常理,我怀疑是后端的tomcat故障了.于是决定重启tomcat.但未果.直接打开TOMCAT的8080端口,是可以正常访问JAVA页面的.奇怪了.

502肯定是后端的问题呀.接着,打开NGINX错误日志,发现问题:

An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

原来是TCPIC资源用完了.

于是GOOGLE,找到”试图从大于 5000 的 TCP 端口连接时收到错误”这篇文章:http://support.microsoft.com/kb/196271

启动注册表编辑器。
在注册表中,找到下面的子项,然后单击 参数:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在 编辑 菜单上单击 新建,然后添加以下注册表项:
值名称: MaxUserPort
值类型: DWORD
值数据: 65534
有效范围: 5000-65534 (十进制)
默认值: 0x1388 (5000 十进制)

修改了注册表,但需要重启.因为其它同事正在使用机器,无法马上重启.所以,未知是否能修复此问题.

继续阅读 »

Java的10个面向对象设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程。

众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计。查看Apache和Sun的开放源代码能帮助你发现其他Java设计原则在这些代码中的实际运用。Java Development Kit则遵循以下模式:BorderFactory类中的工厂模式、Runtime类中的单件模式。你可以通过Joshua Bloch的《Effective Java》一书来了解更多信息。我个人偏向的另一种面向对象的设计模式是Kathy Sierra的Head First Design Pattern以及Head First Object Oriented Analysis and Design。

虽然实际案例是学习设计原则或模式的最佳途径,但通过本文的介绍,没有接触过这些原则或还在学习阶段的Java程序员也能够了解这10个面向对象的设计原则。其实每条原则都需要大量的篇幅才能讲清楚,但我会尽力做到言简意赅。

继续阅读 »

Hibernate3将SQL结果映射

记录一些Hibernate的自动转换功能,

Hibernate把SQL查询结果映射成MAP:

List list = getSession().createSQLQuery(“select * from person”)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

映射成List

List list = getSession().createSQLQuery(“select * from person”)
.setResultTransformer(Transformers.TO_LIST);

完整地映射到一个类的LIST,这样,Hibernate就会自动把查询得到的结果转换成 Persion的List

List list = getHibernateTemplate().loadAll(Person.class);

只映射类中的某几个字段:

注意,如果需要完成引功能,需要事先在Person类中添加构造方法:

public Person(Long id, String name, Long age) {
this.id = id;
this.name = name;
this.age = age;
}

然后

List list = getHibernateTemplate().find(“select new test.Person(id,name,age) from Person”);

继续阅读 »

Nginx整合Tomcat

Nginx是很优秀的WEB软件,性能上比apache好很多,特别是在处理静态内容方面尤其突然。所以如果Nginx+Tomcat的话,会比Apache+Tomcat要好。
原理是,Nginx主要负责处理静态内容,而当接收到jsp动态页面的请求时,通过proxy转发到tomcat。当然,同时还可以支持php.

继续阅读 »

Eclipse开发环境中Tomcat找不到类的解决方法

使用Eclipse开发JSP网站,出现

org.apache.jasper.JasperException: /index.jsp (line: 7, column: 0) The value for the useBean class attribute xxx is invalid.

org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

相关类class已经正确存放在src目录,但是一直说没找到。

解决方法:

右击project=>Build Path=>Configure Build Path

然后修改

继续阅读 »

JSP目录结构说明

 根目录下建立更为复杂的目录层次结构。对于简单的应用程序则完全可以简单的经这些文件放在根目录下。

  /WEB-INF/web.xml:web.xml文件用于配置Web程序,它被称为Web应用程序部署描述器(Web Application Deployment Desicription)。他是一个用来描述Servlet和其他Web应用程序组成部分以及它们的初始参数等属性的XML文档。

  /WEB-INF/classes:这个子目录用于存储所有Java类文件和相关资源文件,如图片、语言信息等。这些类文件可能是servlet,也可能是普通的Java类。需要注意的是,如果一个类文件属于某个包(package),则需要将整个目录层次结构放置于classes目录下。

  /WEB-INF/lib:该子目录用于存放Web应用程序所需的所有库文件,这些库文件是以压缩的.jar文件格式存储的,它包含所有Web应用程序所需的类文件和相应的资源文件。比如,一个电子商务应用需要访问Oracle,就需要将要使用的JDBC驱动程序库文件都放置于lib目录下。

继续阅读 »