Could not instantiate Seam component
尝试把官方例子代码拷到eclipse项目中运行时出现的问题。
翻译过来就是不弄实例化Seam组件,好像是找不到。
百度之它们说WAR不能用EJB,仔细一看果然项目是WAR……
搞了个EAR的项目,立即可用 Orz。
hibernate.hbm2ddl.auto
嗯,在程序启动时自动创建数据表结构,
下面贴一下可选值意义:
- create:
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 - create-drop:
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。 - update:
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。 - validate:
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
Response.sendRedirect 中文传参乱码
实验在sendRedirect之前用response.setCharacterEncoding("GBK")无效
原因:sendRedirect里面的URL传参是通过GET方法,会被强行转换成ISO-8859-1来传输(如果使用tomcat的话。修改tomcat默认编码请见:http://yoyo.is-programmer.com/posts/10306.html)
解决方案:传参时通过java.net.URLEncoder.encode方法进行编码,或在收到参数时以new String(arg.getBytes("ISO-8859-1"), "GBK")方式转码。
JSF开发中的几个问题笔记。。
- jar包冲突
服务器是JBoss4.2.2GA,部署的时候报错,看意思似乎是JAR包冲突,估计JBOSS自带了JSF的jar包,
于是把应用程序lib目录下的jar包删掉,这次成功了。
百度说该版本的default确实自带了,位置在deploy/jboss-web.deployer/jsf-libs下,可以直接删除或修改deploy/jboss-web.deployer/conf/web.xml文件来去除JBoss的自带JSF,详细在:http://blog.csdn.net/luofengjava/archive/2007/09/10/1779798.aspx。
- javax.servlet.ServletException: viewId:xxx - View xxx could not be restored.
据说是session超时。。。这提示真不友好
继续学习……
在Axis上部署WebService
上文提到了在Axis中用JWS即时编译、部署jws文件为WebService,虽然很简便但是十分不灵活,它不支持class,不支持jar,甚至不支持带包的文件,因此主要使用wsdd文件来定制部署。下面是一个例子:
这是课本上的一个例子的wsdd文件,
-
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
-
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
-
<service name="SearchOrder" provider="java:RPC">
-
<parameter name="className" value="org.yoyo.service.SearchOrder" />
-
<parameter name="allowedMethods" value="*" />
-
</service>
-
<beanMapping qname="mySearch:Order" xmlns:mySearch="urn:BeanService" languageSpecificType="java:org.yoyo.bean.Order" />
-
<beanMapping qname="mySearch:Customer" xmlns:mySearch="urn:BeanService" languageSpecificType="java:org.yoyo.bean.Customer" />
-
</deployment>
执行时通过控制台运行命令java org.apache.axis.client.AdminClient deploy.wsdd 来部署服务,成功后打开http://localhost:8080/axis/servlet/AxisServlet会看到部署的服务。
参数意思写得很明显了,在此不再细表。
在Tomcat中部署Axis搭建SOAP环境
几个下载地址:
- Axis:http://www.apache.org/dyn/closer.cgi/ws/axis/1_4
- XML解析器xerces-j:http://archive.apache.org/dist/xml/xerces-j/
- JavaMail API:http://java.sun.com/products/javamail/downloads/index.html
- JavaBeans Activation Framework (JAF):http://java.sun.com/javase/technologies/desktop/javabeans/jaf/downloads/index.html
搭建步骤:
- 将Axis的压缩包解压后webapps目录下的axis目录拷贝到Tomcat的webapps目录下,
- 将xerces-j解压后得到的jar包放入Tomcat/webapps/axis/WEB-INF/lib目录下,
- 如果要支持JWS(临时发布,由Axis自动编译部署,即下文中用到的),要将jdk的tools.jar也拷贝进该目录。
- 同时配置环境变量,CLASSPATH中加上该目录下的所有jar包。
- 将JavaMail和JAF解压后的jar包拷到JDK的lib目录下和tomcat的lib目录下。
- 启动Tomcat,此时应可以看到axis的目录并能正常访问。
- 下面编写一个WebService程式HelloWorld.jws,并将之放入axis的目录下(会被axis自动编译部署):
- 编写测试程式,在eclipse中创建一个项目,导入axis的lib目录下的所有jar包,新建TestClient类,代码如下:
-
import java.net.MalformedURLException;
-
import java.net.URL;
-
import java.rmi.RemoteException;
-
-
import javax.xml.rpc.ServiceException;
-
-
import org.apache.axis.client.Call;
-
import org.apache.axis.client.Service;
-
-
public class TestClient {
-
-
String url = "http://localhost:8080/axis/HelloWorld.jws";
-
Service service = new Service();
-
Call call = (Call) service.createCall();
-
call.setOperationName("sayHelloWorld");
-
}
-
-
try {
-
new TestClient().doTest("YOYO");
-
e.printStackTrace();
-
e.printStackTrace();
-
} catch (ServiceException e) {
-
e.printStackTrace();
-
}
-
}
-
-
}
-
- 运行该程式,若能得到正确的运行结果("YOYO, Hello World!")即说明成功搭建了一个SOAP环境。
HTTP请求头与应答头参数
可以在request.getHeader和response.setHeader中作为参数使用。
JSTL forEach的索引。。
使用varStatus的index属性即可:
-
<c:forEach var="sell" items="${sellList.list}" varStatus="idx">
-
${idx.index}
-
</c:forEach>