??xml version="1.0" encoding="utf-8" standalone="yes"?> server.xml 的修Ҏ式如? Q一Q多域名l定 1.如果你要l定|站,首先是要把tomcat的默认访问端?080,修改?0 原始: 修改?
]]>严重: IOException while loading persisted sessions: java.io.EOFException
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5282)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
2012-7-12 10:08:04 org.apache.catalina.session.StandardManager startInternal
严重: Exception loading sessions from persistent storage
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5282)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:649)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1585)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
]]>
环境Q?br />MyEclipse10
JDK6
Tomcat7
CXF2.5
Spring3
CZ目l构图:
如上图所C,全部依赖的第三方库都在lib中,下面贴出全部代码?br />IHelloService.javapackage bing.server;
import javax.jws.WebService;
/**
* <p>
* WebService接口
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService
public interface IHelloService {
public String sayHello(String username);
}
HelloServiceImpl.javapackage bing.server;
import javax.jws.WebService;
/**
* <p>
* WebService实现c?br />
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
@WebService(endpointInterface = "bing.server.IHelloService", serviceName = "HelloService")
public class HelloServiceImpl implements IHelloService {
@Override
public String sayHello(String username) {
return "hello, " + username;
}
}
HelloServiceClient.javapackage bing.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import bing.server.IHelloService;
/**
* <p>
* WebService调用?客户?br />
* </p>
*
* @author IceWee
* @date 2012-7-6
* @version 1.0
*/
public class HelloServiceClient {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-client.xml");
IHelloService helloService = (IHelloService) context.getBean("client");
String response = helloService.sayHello("Peter");
System.out.println(response);
}
}
applicationContext-server.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--
***注意***
手动d的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
-->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="helloService" implementor="bing.server.HelloServiceImpl" address="/helloService" />
</beans>
applicationContext-client.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--
***注意***
手动d的内容:
xmlns:jaxws="http://cxf.apache.org/jaxws"
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
-->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="client" class="bing.server.IHelloService" factory-bean="clientFactory" factory-method="create" />
<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="bing.server.IHelloService" />
<property name="address" value="http://localhost:8080/CXFDemo/ws/helloService" />
</bean>
</beans>
web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>CXFDemo</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-server.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXFServlet</display-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
所有项目都已配|完成,可以发布到Tomcat了,在浏览器中输入:http://localhost:8080/CXFDemo/wsQ返回如图:
从上图中可以看到我们对外发布的WebService接口Q点击蓝色超链接Q返回如图:
到此Q证明我们的Web Service已经发布成功Q可以进行调用测试了。运行HelloServiceClientQ返回如图:
全文完!
]]>
全部依赖库:
commons-logging-1.1.1.jar
httpclient-4.1.3.jar
httpcore-4.1.4.jar
httpmime-4.1.3.jar(上传文g使用)
在(一Q中的程序包中创Z个客Lc:HttpsClient
HttpsClient.javapackage com.icesoft.client;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.KeyStore;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class HttpsClient {
private static final String KEY_STORE_TYPE_JKS = "jks";
private static final String KEY_STORE_TYPE_P12 = "PKCS12";
private static final String SCHEME_HTTPS = "https";
private static final int HTTPS_PORT = 8443;
private static final String HTTPS_URL = "https://127.0.0.1:8443/HttpClientSSL/sslServlet";
private static final String KEY_STORE_CLIENT_PATH = "E:/ssl/client.p12";
private static final String KEY_STORE_TRUST_PATH = "E:/ssl/client.truststore";
private static final String KEY_STORE_PASSWORD = "123456";
private static final String KEY_STORE_TRUST_PASSWORD = "123456";
public static void main(String[] args) throws Exception {
ssl();
}
private static void ssl() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
try {
KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
KeyStore trustStore = KeyStore.getInstance(KEY_STORE_TYPE_JKS);
InputStream ksIn = new FileInputStream(KEY_STORE_CLIENT_PATH);
InputStream tsIn = new FileInputStream(new File(KEY_STORE_TRUST_PATH));
try {
keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
} finally {
try { ksIn.close(); } catch (Exception ignore) {}
try { tsIn.close(); } catch (Exception ignore) {}
}
SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);
Scheme sch = new Scheme(SCHEME_HTTPS, HTTPS_PORT, socketFactory);
httpClient.getConnectionManager().getSchemeRegistry().register(sch);
HttpGet httpget = new HttpGet(HTTPS_URL);
System.out.println("executing request" + httpget.getRequestLine());
HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
String text;
while ((text = bufferedReader.readLine()) != null) {
System.out.println(text);
}
bufferedReader.close();
}
EntityUtils.consume(entity);
} finally {
httpClient.getConnectionManager().shutdown();
}
}
}
启动TomcatQ运行HttpsClientQ控制台q回Q?br />
OKQ和使用览器访问得到的l果一模一P
全文完!
]]>
]]><Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" />
<Connector port="80" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
redirectPort="8443" acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" />
其实q里是把port:8080,修改成port:80可以了,其他的参C?/span>
2.接下来就是重点了哈哈...
?/span>?
修改?
q里解释一下上面的配置
Engine ?dafaultHost :表示讉K该tomcat默认q入的主?注意一定不能是localhost,不然别h通过你的ip讉K,׃默认q入tomcat的管理界?
Host ?name:表示该主机绑定的域名,如果l定localhost则可以通过在浏览器中输入localhost讉K该Host.
Host?appBase:表示该主机绑定的文g存放路径,可以使用相对路径或绝对\?
按照上面的配|?
1.如果我在览器中输入http://localhost 则访?C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\ROOT 下的|站
2.如果输入http://www.abc.com 则访?C:\Program Files\Apache Software Foundation\Tomcat 5.5\abcapps\ROOT 下的|站
3.如果输入http://www.cba.com 则访?D:\cba\ROOT 下的|站.
注意q里有一个ROOT目录需要创?我们只要把网站放到相应的ROOT目录向下?卛_通过相应域名讉K?
q里面的参数q有很多,我也不是很清?不过q样做确实可以实现多域名l定哈哈.而且|站面修改了只要直接覆盖就可以?tomcat可以自动更新cd面,当然如果修改了web.xml或lib,则需要重启tomcat才可?
Q二Q?/span>虚拟目录
其中QHost标记是用来配|虚拟主机的Q就是可以多个域名指向一个tomcatQ格式只要参考默认的?可以了?
<context>是Host标记的子元素吧,表示一个虚拟目录,它主要有两个属性,pathq当于虚拟目录名字Q??docbase则是具体的文件位|。在q里我的虚拟路径名称为cqqQ实际上我的E序也就是html、jsp?
q样我就可以通过 http://127.0.0.1/cqq/ 讉K我的q个虚拟目录了?/span>
servlet?攑֜了f:\java\cqqappq个目录下了?
另外一U方法是Q?/span>
配置两个站点
<Host name="www.xyz.com" debug="0" appBase="D:\Tomcat5.5\portal"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="D:/Tomcat5.5/portal" debug="0"
reloadable="true" />
</Host>
<Host name="www.abc.com" appBase="D:\Tomcat5.5\hxw" unpackWARs="true"
autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="D:\Tomcat5.5\abc" debug="0"
reloadable="true" />
</Host>
q样讄以后Q输入域名可以分别到两个站点Q?/span>但由于没有指定默认站点,所以直接输入IP的时候,无法讉K?/span>于是增加 D:\Tomcat5.5\conf\Catalina\localhost\ROOT.xml内容?span style="font-family: tahoma,arial,helvetica,sans-serif; color: #000000; font-size: 14px" color="#000000">
q样可以实现输入域名分别C站点Q输入IP默认到D:/Tomcat5.5/portalq个站点Q?/span>可是Q可是,问题出现了,q两个站点启动相当消耗内存,TOMCAT内存讄我已l设?400M了(再高TOMCAT5无法启动Q,所以不能同时启动三个应用?/span>
大家有没有实现过Q启一个应用而绑定多个域名的Ҏ?br />如下Q这样写TOMCAT肯定是启动不了的Q只是用来表达我的意思)
因ؓ我是整合的,所以就不用?080端口了哦~~~~~
W一步,L端口
扑ֈserver.xmlQ将默认端口8080改ؓ80Q而且发布C联网必须?0端口Q因此端口防火墙不会拦截?br />
W二步,L目名称
qx我们开发时可能会经常用http://localhost:8080/xxx?a >http://127.0.0.1:8080/xxx来访问我们的目Q通过W一步的修改现在我们要用http://localhost/xxx?a >http://127.0.0.1/xxx来访问项目,也可以用L名替?#8220;localhost”?#8220;127.0.0.1”。如果现在我们实?a href="http://localhost/">http://localhost/?a >http://127.0.0.1/讉KQ看到的会是Tomcat的欢q界面,|上众说ULQ不q测试后都不用Q其中有一U说法测试成功,那就是:
q是修改server.xmlQ在Host标签中配|项目虚拟\径。以前测试都是将xxx.xml攑֜Tomcat的conf/localhost中,文g内容大概为:
现在我将path的值改?"Q启动TomcatQ发C旧是TomcatƢ迎面?/span>
于是此配置复制到Host标签中,注意要把xxx.xmlUd出去Q否则就配置了两ơ,l果成功Q?/span>
现在可以用http://localhost来访问你发布的项目了Q?/span>
备注Q?/span>
l过此配|可能导致的问题是部分功能出现错误,也就是页面无法显C,功能不可用。原因可能之一为:目的jsp中应用了目路径如:iframe?src{于 xxxx/xxxx.doQ在此请勿实用写ȝ目名做为根Q要用动态项目跟路径Q如Q?{pageContext.request.contextPath}Q当前我们访问的目根\径已l变?"(IZ)Q你在用xxxd用自然找不到路径而报错。这是用动态项目根路径的好处?/span>