ssh+Jerseyssh框架整合合,service注入不进去,用的时候总是service和dao是nul

如何在非action的普通java类中调用service和dao来操作数据库web程序用的框架是SSH的,在spring.xml中通过方式自动扫描service和dao,现有一个后台消息处理类,要在该
如何在非action的普通java类中调用service和dao来操作数据库
web程序用的框架是SSH的,在spring.xml中通过方式自动扫描service和dao,现有一个后台消息处理类,要在该类调用其他service和dao进行一些业务和数据库的操作,使用@Autowired
private BaseDaoI baseD引用dao,在调用时报空指针错误,请教大神们该怎么解决。
你所谓的“后台消息处理类”也的用注解标注它是一个Bean才行啊
解决方案二:
你好我也碰到这个问题,你找到解决方法了吗?
解决方案三:
你好我也碰到这个问题,你找到解决方法了吗?
【云栖快讯】浅析混合云和跨地域网络构建实践,分享高性能负载均衡设计,9月21日阿里云专家和你说说网络那些事儿,足不出户看直播,赶紧预约吧!&&
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供3567人阅读
SPRING-MVC(102)
用的是 SSM3的框架 Spring MVC 3.1 + Spring 3.1 + Mybatis3.1
第一种情况:
Spring MVC 和 Spring 整合的时候,SpringMVC的springmvc.xml文件中 配置扫描包,不要包含 service的注解,Spring的applicationContext.xml文件中
配置扫描包时,不要包含controller的注解,如下所示:
SpringMVC的xml配置:
&context:component-scan base-package=&com.insigma&&
&&&context:exclude-filter
type=&annotation& expression=&org.springframework.stereotype.Service&/&
&/context:component-scan&
Spring MVC启动时的配置文件,包含组件扫描、url映射以及设置freemarker参数,让spring不扫描带有@Service注解的类。为什么要这样设置?因为springmvc.xml与applicationContext.xml不是同时加载,如果不进行这样的设置,那么,spring就会将所有带@Service注解的类都扫描到容器中,等到加载applicationContext.xml的时候,会因为容器已经存在Service类,使得cglib将不对Service进行代理,直接导致的结果就是在applicationContext&中的事务配置不起作用,发生异常时,无法对数据进行回滚。以上就是原因所在。
同样的在Spring的xml配置如下:
&context:component-scan
base-package=&com.insigma&&&&&&&&&&&&&
&&context:exclude-filter
type=&annotation& expression=&org.springframework.stereotype.Controller&/&
&/context:component-scan&
扫描包路径,不扫描带有@Controller注解的类。因为这些类已经随容器启动时,在springmvc.xml中扫描过一遍了。
完成以上工作
注意以上几点就OK了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7304028次
积分:63459
积分:63459
排名:第32名
原创:252篇
转载:2639篇
评论:689条
(13)(46)(92)(17)(25)(37)(63)(7)(74)(67)(95)(177)(113)(86)(40)(43)(71)(14)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(141)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)2150人阅读
web service接口(6)
学习笔记(57)
工作积累(20)
java(30)
jersey框架中的web service接口传递对象参数
一、参考资源:
&&&&&&&& 1.http://blog.csdn.net/cb/article/details/
&&&&&&&& 2./link?url=RyoJ3qtAkzk0yRsMhDcDecYIEVlLVm4RRrazWj1dFX1Wr
&&&&&&&& & hEJ7LxzouqLkFJHXj0-Mco4xG8BXCUkGTqNgKJ1-uV7shCFLQIomb5_n_-63M_&
二、webservice开发实例
&&&&&&&& 关于jersey开发web service简单接口和客户端调用,可以参考:
&&&&&&&&&&&&&&&&&& http://blog.csdn.net/cb/article/details/
以下开发环境及工具:
&&&&&&&&&&&&&&&&&& 1.window764为Pc机
&&&&&&&&&&&&&&&&&& 2.Tomcat7.0 window& 64位版本
&&&&&&&& &&& 3.Eclipse 3.7 window 64位版本
&&&&&&&&&&&&&&&&&& 4.火狐浏览器36.0.1版本
&&&&&&&&&&&&&&&&&& 5.jaxrs-ri-2.16版本
1.新建一个web 项目,将下载的jaxrs-ri-2.16解压(下载资源可以参考‘资源地址1’),将里面的全部jar导入项目中,传递的参数为对象,需要转换成json格式,这里就要导入json支持的jar包(这里提供json支持jar的下载地址:/s/1bnfIWZP )
2.导包完成后,在src下的相应包中创建一个实体类UserBean和web service类RestService以及资源加载类MyServiceRegister,代码如下:
UserBean:注意:@JsonInclude是将该实体对象转换成json格式的注解配置,不能掉,以及导包不能导错,类路径为: com.fasterxml.jackson.annotation.JsonInclude
package com.jersey.
import com.fasterxml.jackson.annotation.JsonI
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class UserBean {
public UserBean() {
// TODO Auto-generated constructor stub
public UserBean(String name, String sex, int age) {
this.name =
this.sex =
this.age =
public String getName() {
public void setName(String name) {
this.name =
public String getSex() {
public void setSex(String sex) {
this.sex =
public int getAge() {
public void setAge(int age) {
this.age =
public String toString() {
return &UserBean [name=& + name + &, sex=& + sex + &, age=& + age + &]&;
RestService:
package com.jersey.
import javax.ws.rs.C
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.P
import javax.ws.rs.PathP
import javax.ws.rs.P
import javax.ws.rs.core.MediaT
@Path(&HelloWorld&)
public class RestService {
@Path(&/sayHello/{name}&)
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON)
public String sayHello(@PathParam(&name&)String name){
return &Hello &+
//实体对象参数web接口
@Path(&/sayName&)
@Consumes( MediaType.APPLICATION_JSON+&;charset=UTF-8&)
@Produces(MediaType.APPLICATION_JSON)
public UserBean
sayName(UserBean ub){
ub.setName(ub.getName()+&123&);
MyServiceRegister:在加载webservice接口类前也要加载JacksonJsonProvider类,JacksonJsonProvider的类路径com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider
package com.jersey.
import org.glassfish.jersey.server.ResourceC
import com.fasterxml.jackson.jaxrs.json.JacksonJsonP
public class MyServiceRegister extends ResourceConfig {
public MyServiceRegister() {
//转换格式资源类
register(JacksonJsonProvider.class);
//web service接口类
register(RestService.class);
3.在web.xml中为web service接口添加配置
&servlet-name&jersey-servlet&/servlet-name&
&servlet-class&
org.glassfish.jersey.servlet.ServletContainer
&/servlet-class&
&!-- 配置自己的资源加载类去加载资源 --&
&init-param&
&param-name&javax.ws.rs.Application&/param-name&
&param-value&
com.jersey.webservice.MyServiceRegister
&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&servlet-mapping&
&servlet-name&jersey-servlet&/servlet-name&
&url-pattern&/rest/*&/url-pattern&
&/servlet-mapping&
4.运行项目,浏览器访问:http://localhost:8080/JerseyObjPar/rest/HelloWorld/sayHello/admin
&&&&&&&& 出现如下结果,则接口发布成功。
三、客户端调用,实现对象传递(需要服务端提供实体类)
1.新建项目,导入jersey客户端支持jar和json支持jar(可以将写服务端的jar全部导入项目),然后在src下新建实体类UserBean,与服务端实体类一致,然后新建一个测试类Test,类中的各个类导包不要导错
package com.jersey.
import javax.ws.rs.client.C
import javax.ws.rs.client.ClientB
import javax.ws.rs.client.E
import javax.ws.rs.client.Invocation.B
import javax.ws.rs.client.WebT
import javax.ws.rs.core.MediaT
import org.glassfish.jersey.client.ClientC
import com.fasterxml.jackson.jaxrs.json.JacksonJsonP
public class Test {
public static void main(String[] args) {
String url = &http://localhost:8080/JerseyObjPar/rest&;
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonJsonProvider.class);
Client client = ClientBuilder.newClient(clientConfig);
WebTarget webTarget = client.target(url).path(&HelloWorld&).path(&sayName&);
Builder builder = webTarget.request(MediaType.APPLICATION_JSON);
UserBean ub = new UserBean(&admin&,&男&,121);
UserBean res = builder.post(Entity.entity(ub, MediaType.APPLICATION_JSON), UserBean.class);
System.out.println(res);
2.运行程序,结果:
最后附项目资源下载:/s/1qWv75Je
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:88206次
积分:1527
积分:1527
排名:千里之外
原创:64篇
转载:23篇
(2)(1)(4)(4)(4)(3)(4)(4)(3)(4)(4)(4)(5)(4)(4)(7)(5)(4)(1)(1)(14)(1)HESSIAN(4)
Spring让Hessian变得不但强大,而且易用,但是易用背后,却有不少陷阱!
这个例子很简单,但实际上的确花费了我超过一小时的时间,排除了种种问题,最后问题终于水落石出。
整合以上篇Hello Hessian为基础,加入Spring框架,进行改进。
顺便说下,如果不说环境版本,很难保证你的程序在别的版本下能运行。
1、写Spring的发布Hessian服务的配置文件
hessian-servlet.xml
&!DOCTYPE beans PUBLIC &-//SPRING//DTD BEAN//EN& &http://www.springframework.org/dtd/spring-beans.dtd&&&
&&&&&&&&&bean&id=&defaultHandlerMapping&&class=&org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping&/&&
&&&&&&&&&bean&id=&helloService&&class=&lavasoft.suths.service.HelloService&/&&
&&&&&&&&&bean&name=&/hello&&class=&org.springframework.remoting.caucho.HessianServiceExporter&&&
&&&&&&&&&&&&&&&&&property&name=&service&&ref=&helloService&/&&
&&&&&&&&&&&&&&&&&property&name=&serviceInterface&&value=&lavasoft.suths.service.Hello&/&&
&&&&&&&&&/bean&&
2、配置web.xml
&?xml&version=&1.0&&encoding=&UTF-8&?&&
&web-app&xmlns=&/xml/ns/javaee&&
&&&&&&&&&&&&&&&&&xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&&
&&&&&&&&&&&&&&&& xsi:schemaLocation=&/xml/ns/javaee&
&&&&&&&&/xml/ns/javaee/web-app_2_5.xsd&&
&&&&&&&&&&&&&&&&&version=&2.5&&&
&&&&&&&&&context-param&&
&&&&&&&&&&&&&&&&&param-name&contextConfigLocation&/param-name&&
&&&&&&&&&&&&&&&&&param-value&&
&&&&&&&&&&&&&&&&&&&&&&&&/WEB-INF/hessian-servlet.xml&
&&&&&&&&&&&&&&&&&/param-value&&
&&&&&&&&&/context-param&&
&&&&&&&&&servlet&&
&&&&&&&&&&&&&&&&&servlet-name&hessian&/servlet-name&&
&&&&&&&&&&&&&&&&&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&&
&&&&&&&&&&&&&&&&&load-on-startup&4&/load-on-startup&&
&&&&&&&&&/servlet&&
&&&&&&&&&servlet-mapping&&
&&&&&&&&&&&&&&&&&servlet-name&hessian&/servlet-name&&
&&&&&&&&&&&&&&&&&url-pattern&/hessian/*&/url-pattern&&
&&&&&&&&&/servlet-mapping&&
&/web-app&
a)hessian-servlet.xml的文件名必须以&servlet-name&hessian&/servlet-name&名字开头,并且加上-servlet.xml一段,组成完整的文件名。
b)hessian-servlet.xml的文件名格式必须是[servlet-name]-servlet.xml格式,否则出错。
三、部署应用
因为涉及到类加载顺序问题,好用IDEA启动Tomcat测试老失败,不知道为啥!这次不用IDEA嵌入式启动Tomcat了,直接自己部署测试。
部署后,启动界面如下:
三、写测试
这次测试,可以在上个例子的基础上进行修改来测试,根据上面的配置,那么请求HelloService的URL应该是:
package&lavasoft.suths.service.&
import&com.caucho.hessian.client.HessianProxyF&
import&lavasoft.suths.service.H&
import&java.net.MalformedURLE&
* 客户端调用(会依赖服务接口)&
* @author leizhimin
public&class&Client {&
&&&&&&&&public&static&void&main(String[] args)&throws&MalformedURLException
&&&&&&&&&&&&&&&&String url =&&http://localhost:8080/hessianapp/hessian/hello&;&
&&&&&&&&&&&&&&&&HessianProxyFactory factory =&new&HessianProxyFactory();&
&&&&&&&&&&&&&&&&Hello hello = (Hello) factory.create(Hello.class, url);&
&&&&&&&&&&&&&&&&System.out.println(hello.sayHello(&Hessian&));&
&&&&&&&&}&
运行结果:
Hello Hessian!&
Process finished with exit code 0
还有一种测试方法,就是在客户端也使用Spring,需要做个配置remoting-client.xml:
&!DOCTYPE beans PUBLIC&&-//SPRING//DTD BEAN//EN& &http://www.springframework.org/dtd/spring-beans.dtd&&&
&&&&&&&&&bean id=&helloServiceClient&&class=&org.springframework.remoting.caucho.HessianProxyFactoryBean&&&
&&&&&&&&&&&&&&&&&property name=&serviceUrl&&value=&http://localhost:8080/hessianapp/hessian/hello&/&&
&&&&&&&&&&&&&&&&&property name=&serviceInterface&&value=&lavasoft.suths.service.Hello&/&&
&&&&&&&&&/bean&&
然后写个测试类:
package&lavasoft.suths.service.&
import&lavasoft.suths.service.H&
import&org.springframework.context.ApplicationC&
import&org.springframework.context.support.ClassPathXmlApplicationC&
* Spring整合Hessian,客户端测试&
* @author leizhimin
public&class&TestClient {&
&&&&&&&&public&static&void&main(String[] args) {&
&&&&&&&&&&&&&&&&try&{&
&&&&&&&&&&&&&&&&&&&&&&&&ApplicationContext context =&new&ClassPathXmlApplicationContext(&/remoting-client.xml&);&
&&&&&&&&&&&&&&&&&&&&&&&&Hello hello = (Hello) context.getBean(&helloServiceClient&);&
&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(hello.sayHello(&Spring Hession&));&
&&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&&catch&(Exception e) {&
&&&&&&&&&&&&&&&&&&&&&&&&e.printStackTrace();&
&&&&&&&&&&&&&&&&}&
&&&&&&&&}&
运行结果:
Hello Spring Hession!&
Process finished with exit code 0
实际上,看着代码好好,程序有时候还是不能跑,原因是Hessian的版本问题,这里推荐使用Spring自带的版本,就不会有问题了。
整个工程所以依赖的包:
log4j-1.2.15.jar&
spring-aop.jar&
spring-beans.jar&
spring-context.jar&
spring-context-support.jar&
spring-core.jar&
spring-jdbc.jar&
spring-jms.jar&
spring-orm.jar&
spring-test.jar&
spring-tx.jar&
spring-web.jar&
spring-webmvc.jar&
spring-webmvc-portlet.jar&
spring-webmvc-struts.jar&
hessian-3.1.3.jar&
aopalliance.jar&
commons-logging.jar
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7304029次
积分:63459
积分:63459
排名:第32名
原创:252篇
转载:2639篇
评论:689条
(13)(46)(92)(17)(25)(37)(63)(7)(74)(67)(95)(177)(113)(86)(40)(43)(71)(14)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(141)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)

我要回帖

更多关于 ssh整合webservice 的文章

 

随机推荐