c语言编程笔录

首页 >   > 笔记大全

笔记大全

利用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等不同的方式,希望读者可以从中获取到有用的信息。