利用JSP 怎么实现获取spring容器中的bean
更新时间:2023-11-30
段落1: JSP获取spring容器中的bean
在一个基于Spring框架的应用程序中,JSP可以方便地获取spring容器中的bean。这使得 JSP 程序设计变得简单易懂,也减少了对繁琐的代码和“胶水”层的依赖。
以下是一个JSP程序从Spring容器中获取bean的示例:
示例1:从Spring容器中获取一个bean
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <body> <% ApplicationContext context = org.springframework.web.context.support.WebApplicationContextUtils .getWebApplicationContext(pageContext.getServletContext()); String beanName = "userService"; UserService userService= (UserService) context.getBean(beanName); %> <p>userName: <c:out value="${userService.userName}"/></p> </body> </html>这个例子中,我们使用了WebApplicationContextUtils工具类,它提供的getWebApplicationContext()方法可以获取到在Web容器中初始化的Spring容器ApplicationContext。接下来,我们根据bean的名称从容器中获取UserService实例,并输出它的userName属性值。 段落2: 使用自定义标签库从Spring容器中获取bean 在JSP中,可以使用自定义标签库来扩展JSP的功能。因此,我们可以使用自定义标签库扩展JSP的能力,允许我们快速地指定要使用的bean。 以下是一个自定义标签库示例,用于从Spring容器中获取一个bean:
示例2:使用自定义标签库从Spring容器中获取一个bean
创建一个自定义标签库示例:
创建文件 WEB-INF/tags/myTags.tld,并在其中包含以下内容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.2</tlib-version> <short-name>myTags</short-name> <uri>/WEB-INF/tags/myTags</uri> <tag> <name>getUserService</name> <tag-class>com.example.tags.UserServiceTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
创建文件com.example.tags.UserServiceTag:
public class UserServiceTag extends SimpleTagSupport { String beanName; public void setBeanName(String beanName) { this.beanName = beanName; } public void doTag() throws JspException, IOException { PageContext context = (PageContext) getJspContext(); ApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(context.getServletContext()); UserService userService= (UserService) springContext.getBean(beanName); context.setAttribute("userService", userService); } }
在JSP文件中,导入标签库,然后使用标签库标记调用自定义标签:
<%@ taglib prefix="my" uri="/WEB-INF/tags/myTags.tld"%> <my:getUserService beanName="userService" /> <p>userName: <c:out value="${userService.userName}"/></p>在这个例子中,我们使用了JSP的扩展机制,包括SimpleTagSupport类和doTag()方法来实现我们的自定义标签。这个标签会从Spring容器中获取bean,并暴露出来,便于我们在页面上使用。 段落3: 在Controller中指定bean名称以及作为参数传递给JSP 在一些情况下,我们希望由Controller来指定要使用的bean名称,并将其作为参数传递给JSP。下面的示例演示如何在Controller中实现这一点:
示例3:在Controller中指定bean名称以及作为参数传递给JSP
Controller代码:
@Controller public class MyController { @Autowired public UserService userService; @RequestMapping(value="/getUserInfo", method=RequestMethod.GET) public ModelAndView getUserInfo(HttpServletRequest request, HttpServletResponse response) { ModelAndView modelAndView = new ModelAndView("userInfo"); modelAndView.addObject("userServiceName", userService.getBeanName()); modelAndView.addObject("userName", userService.getUserName()); return modelAndView; } }
在JSP中:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <body> <p>User Service Name: <c:out value="${userServiceName}"/></p> <p>User Name: <c:out value="${userName}"/></p> </body> </html>在这个示例中,我们从spring容器中获取了userService实例,并将它作为Controller实例的一个属性来注入。然后,在UserController中,我们通过RequestMapping定义了一个getUserInfo方法,并返回一个指定的View(视图)- userInfo.jsp。在这个方法中,我们将想要显示的数据添加到ModelAndView对象中,并将其传递给对应的View。在JSP中,我们使用c:out标记来输出变量userNam和userServiceName。 段落4: 在JSP中使用JSTL标签库获取Spring Bean JSTL(JavaServer Pages标准标记库)是Java EE平台中的一个标准标记库,可以简化JSP的开发。由于JSTL被广泛使用,它也支持使用Spring框架。 JSTL标签库提供了一种简便的方式来从spring容器中获取bean,以下是一个简单的示例:
示例4:在JSP中使用JSTL标签库获取Spring Bean
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <html> <body> <c:set var="userService" value="${springBean('userService')}" /> <p>User Name: <c:out value="${userService.userName}" /></p> </body> </html>在这个示例中,我们使用了JSTL的核心标签库c,该库支持使用Spring框架获取bean。在JSP文件中,我们使用springBean()函数获取UserService实例。注意:如果要使用springBean()函数,必须导入spring标签库。 总结: 本文介绍了JSP如何通过不同的方式从Spring容器中获取bean。我们介绍了使用WebApplicationContextUtils工具类从Spring容器中获取bean、使用自定义标签库在JSP页面中从Spring容器中获取bean、在Controller中指定bean名称以及作为参数传递给JSP以及在JSP中使用JSTL标签库获取Spring Bean等不同的方式,希望读者可以从中获取到有用的信息。