您的位置:首页 > 编程语言 > Java开发

第三章:Dubbo整合maven+spring+springmvc+mybatis之服务消费搭建

2016-11-10 11:02 726 查看
服务消费者ivan-dubbo-web工程搭建,首先这是一个web工程,这里只存在Controller及前台view



1、在WEB_INF下新建文件夹views,并将自动生成的index.jsp,拖到views文件夹下,如上图;

2、pom.xml文件,这里依赖暴露的接口ivan-api及ivan-core工程:

[html] view
plain copy

print?

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<span style="color:#FF9966;"><groupId>ivan</groupId>

<artifactId>ivan-dubbo-web</artifactId></span>

<packaging>war</packaging>

<span style="color:#FF9966;"><version>0.0.1-SNAPSHOT</version>

<name>ivan-dubbo-web Maven Webapp</name></span>

<url>http://maven.apache.org</url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>ivan</groupId>

<artifactId>ivan-core</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>ivan</groupId>

<artifactId>ivan-api</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

</dependencies>

<build>

<finalName>ivan-dubbo-web</finalName>

</build>

</project>

3、web.xml,这里采用的web工程2.5版本,如果各位是2.3、3.0等,请百度修改xml文件:

[html] view
plain copy

print?

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="<span style="color:#FF0000;">2.5</span>"

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_<span style="color:#FF0000;">2_5</span>.xsd">

<display-name>ivan-dubbo-web</display-name>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring.xml</param-value>

</context-param>

<filter>

<filter-name>encodingFilter</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>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<filter>

<filter-name>hiddenHttpMethodFilter</filter-name>

<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>hiddenHttpMethodFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 防止spring内存溢出监听器 -->

<listener>

<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

</listener>

<!-- 配置静态文件访问 -->

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.jpg</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.png</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.gif</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.js</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.css</url-pattern>

</servlet-mapping>

<!-- <servlet> <servlet-name>upload</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name>

<url-pattern>/</url-pattern> </servlet-mapping> -->

<servlet>

<description>ivan-dubbo-web servlet</description>

<servlet-name>rest</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>

classpath:spring-mvc.xml

</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>rest</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

<!-- 配置session超时时间,单位分钟 -->

<session-config>

<session-timeout>30</session-timeout>

</session-config>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

4、spring.xml,主要阐述服务注册中心及服务暴露协议,这里为dubbo协议(这里引入的静态文件config.properties暂时没有用,可以注释掉):

[html] view
plain copy

print?

<?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:dubbo="http://code.alibabatech.com/schema/dubbo"

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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--引入配置属性文件 -->

<context:property-placeholder location="classpath:config.properties" />

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->

<dubbo:application name="ivan-dubbo-web" />

<!-- 使用zookeeper广播注册中心暴露服务地址 -->

<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

</beans>

5、spring-mvc.xml,这个大家应该都比较熟悉了,就是前台解析及bean的自动扫描(启动upload的配置暂时无用):

[html] view
plain copy

print?

<?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:dubbo="http://code.alibabatech.com/schema/dubbo"

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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--

自动扫描controller包下的所有类,如果@Controller注入为bean

并将bean依赖注入,即dubbo服务端暴露的Service注入到Controller中

-->

<dubbo:annotation package="com" />

<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->

<bean id="mappingJacksonHttpMessageConverter"

class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

<property name="supportedMediaTypes">

<list>

<value>text/html;charset=UTF-8</value>

</list>

</property>

</bean>

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->

<bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

<list>

<!-- json转换器 -->

<ref bean="mappingJacksonHttpMessageConverter" />

</list>

</property>

</bean>

<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass"

value="org.springframework.web.servlet.view.JstlView" />

<property name="prefix" value="/WEB-INF/views/" />

<property name="suffix" value=".jsp" />

</bean>

<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="defaultEncoding" value="UTF-8" />

<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->

<property name="maxUploadSize" value="200000" />

</bean>

<!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->

<!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->

<bean id="exceptionResolver"

class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->

<prop

key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>

</props>

</property>

</bean>

</beans>

6、log4j.properties

[html] view
plain copy

print?

### set log levels ###

log4j.rootLogger = INFO , C , D , E

### console ###

log4j.appender.C = org.apache.log4j.ConsoleAppender

log4j.appender.C.Target = System.out

log4j.appender.C.layout = org.apache.log4j.PatternLayout

log4j.appender.C.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### log file ###

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender

log4j.appender.D.File =../logs/IvaDubboWeb-info.log

log4j.appender.D.Append = true

log4j.appender.D.Threshold = INFO

log4j.appender.D.layout = org.apache.log4j.PatternLayout

log4j.appender.D.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### exception ###

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender

log4j.appender.E.File = ../logs/IvaDubboWeb-error.log

log4j.appender.E.Append = true

log4j.appender.E.Threshold = ERROR

log4j.appender.E.layout = org.apache.log4j.PatternLayout

log4j.appender.E.layout.ConversionPattern = [%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

7、创建UserController,并将ivan-api工程中的UserService依赖注入(注意:@Reference中若有其他属性,需与服务端的@Service完全对应。如:@Service(version="1.0.0"),消费者必须为@Reference(version="1.0.0"),否则是找不到服务的):

[java] view
plain copy

print?

import java.util.List;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;

import com.ivan.api.dubbo.UserService;

import com.ivan.entity.User;

@Controller

@RequestMapping("/user")

public class UserController {

@SuppressWarnings("unused")

private static final Logger logger = LoggerFactory.getLogger(UserController.class);

@Reference

private UserService userService;

@RequestMapping("/")

public String goIndex(){

return "index";

}

@RequestMapping("/list")

@ResponseBody

public List<User> getUsers(){

return userService.getUsers();

}

@RequestMapping("/one")

@ResponseBody

public User getUserById(){

return userService.getUserByPrimaryKey("1");

}

}

至此,消费者已经搭建完成了,将工程发布到tomcat中,并启动(前提服务提供者即ivan-dubbo-server及注册中心zookeeper已经启动了),在浏览器中访问:http://127.0.0.1:8080/ivan-dubbo-web/user/list/ 或 http://127.0.0.1:8080/ivan-dubbo-web/user/one/
看到如下信息则表示搭建成功,并可以将测试添加多个注册中心,多个服务提供者的容灾了:





ok,到这就结束了,接下来就是整合一下mybatis了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐