在实际开发中,解决在spring中service在servlet中注入失败的情况【如何用Spring将Service注入到Servlet中】

【0】了解servlet
网上虽然有写servlet有各种各样的文章,但是所要表述的就是对servlet的原理学习,随便查查都能了解个大概(但是建议看专门阐述servlet的网站中,那更全面,更权威http://www.runoob.com/servlet/servlet-life-cycle.html),所以在这不过多阐述,只说明在实际开发中遇到的小问题和解决办法。

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

【1】公司项目总的结构
在spring架构的MVC情况下,(spring,springmvc,hibernate)客户端请求是由web.xml配置,从action进入service进行业务逻辑处理,然后与底层dao数据交互,分为controller/service/dao三层。想用servlet替换controller使用,需要解决如何在servlet中使用注入到spring上下文中的service bean。
首先在web.xml中

<!-- 保单资料导出-->
<!-- 配置-->
< servlet >
    < description ></ description >
    < display-name > UIDownloadData </ display-name >
    < servlet-name > UIDownloadData </ servlet-name >
    < servlet-class > com.sinosig.n02.n01service.printmanager.web.UIDownloadData </ servlet-class >
  </ servlet >
  < servlet-mapping >
    < servlet-name > UIDownloadData </ servlet-name >
    < url-pattern > /UIDownloadData </ url-pattern >
  </ servlet-mapping >
<!-- 保单资料导出-->
【2】 刚开始servlet中存在doGet(),doPost(),直接用该uIPolicyDownloadService 会报空指针异常,出现 javax.servlet.ServletException异常,是因为servlet中调用service

@Autowired
private  UIPolicyDownloadService  uIPolicyDownloadService ;

【3】 servlet不能直接使用serviceImpl,因为servlet不能注入,可手动注入。
加入init()可初始化自动注入。

@Override
      public void init(ServletConfig config ) throws ServletException {
      super .init( config );
          SpringBeanAutowiringSupport.processInjectionBasedOnServletContext( this , config .getServletContext());
     }
之后即可正常使用service。














猜你喜欢

转载自blog.csdn.net/qq_30546099/article/details/79855900