源碼下載下傳
簡介:項目使用maven管理,SpringMvc架構。但是項目結構隻在配置檔案中有所展現(引入spring相關jar),未進行實際分子產品開發。
過程:
1.建立maven project
2.編輯配置檔案總共4個,分别是
(1)spring-mvc.xml
(2)spring-webservice.xml
(3)web.xml
(4)pom.xml
其中前兩個spring開頭的配置檔案可以随便命名,檔案尋址配置在web.xml中
檔案内容分别列出:
(1)spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 開啟注解驅動 -->
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> <!-- 配置Controller掃描器 -->
<context:component-scan base-package="com.msc.controller" />
</beans>
(2)spring-webservice.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://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true">
<bean id="webserviceServer" class="com.msc.service.impl.MyWebserviceImpl" />
<!-- 注解2 -->
<jaxws:endpoint id="myService" implementor="#webserviceServer"
address="/webservice111">
</jaxws:endpoint>
</beans>
(3)web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 注解1 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> classpath:spring/spring-webservice.xml </param-value>
</context-param>
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 注解2 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!--Spring MVC是通過DispatcherServlet來加載Spring配置檔案的,是以不需要在web.xml中配置ContextLoaderListener。
但是CXF卻需要通過ContextLoaderListener來加載Spring。 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 配置CXF架構的核心Servlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 注解3 -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/msc111/*</url-pattern>
</servlet-mapping>
</web-app>
注解1和注解2分别配置了spring-mvc.xml和spring-webservice.xml
兩個檔案不可以使用同一個容器加載。
相關配置的原因百度springmvc父子容器進行不充了解。
(4)pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.msc</groupId>
<artifactId>msc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>4.3.3.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency> <!--spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--web service 以下都是cxf必備的 --> <!--org.apache.cxf.transport.servlet.CXFServlet -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.8</version>
</dependency> <!--不加這個包會報錯Unable to locate spring NamespaceHandler for XML schema namespace
[http://cxf.apache.org/jaxws] -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.8</version>
</dependency>
<!--java實作webservice,不部署到tomcat,需要jetty包支援 <dependency> <groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.1.8</version>
</dependency> -->
</dependencies>
<!-- 添加tomcat插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
<!-- 編譯時測試内容報錯,需要加 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
</project>
WebService釋出方法:
與一般的maven項目運作相同。項目右鍵---run as---maven-build
運作如果成功,則可以在浏覽器輸入:
http://localhost:8080/msc111/webservice111?wsdl
該位址基于spring-webservice.xml中的注解1和web.xml中的注解3
浏覽器傳回内容為
最後使用紫色方框中的命名空間和名稱來進行測試。
在項目中建立一個類,内容如下
package com.msc.client;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.msc.service.MyWebService;
public class WebServiceClient {
public static void main(String args[]) {
try {
URL url = new URL("http://localhost:8080/msc111/webservice111?wsdl");
// 命名空間 及 名稱
QName qName = new QName("http://impl.service.msc.com/",
"MyWebserviceImplService");
Service service = Service.create(url, qName);
MyWebService myWebservice = service.getPort(MyWebService.class);
System.out.println(myWebservice.plus(2, 3));
System.out.println(myWebservice.minus(2, 3));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
在該類上右鍵 ---run as --- java application 就可以通路webservice的遠端服務計算加法減法。
maven build失敗,如何查找問題所在?
打開指令行,使用cd指令轉到目前項目中
然後執行指令:
mvn dependency:analyze
開始按照别人的方法做,就一直不能執行maven build,最終分析結果是,該文作者重複引用了jar檔案所緻。
生成用戶端指令:
首先下載下傳安裝cxf,然後配置環境變量
打開指令行
切換到項目目錄下輸入:
wsdl2java -encoding utf-8 -d E:\workspace\mschttp://localhost:8080/msc111/webservice111?wsdl
回車
項目目錄會多出若幹package檔案夾。可以直接放在用戶端項目裡使用