刚学ssh整合。 以前struts+hibernate的时候在jsp页查询数据我都是用dao直接查出来的,那现在用了spring了,JSP页没有service注入,就不能调用service查询,也不能调用dao查询,因为他们都需要注入的。那现在JSP页用什么查询数据呢?有朋友说放action中
查了后放入request.setAttribute(,,) 这样,可是并不是每个页面都经过action的啊!
那种不在struts管理范围,但又需要显示数据的页面用什么查询呢?比如一个
ListNews.jsp这样的展示页面,不在STRUTS流程中,而且还要翻页什么的,更不能指望用ACTION了吧,import的service和DAO都不能用了(没有注入),难道还得用老方法写个不在SPRING管理范围的DAO查询DB吗?那不是又回到老路上了?! JSP页如何查询数据?请说说具体的解决方案.
查了后放入request.setAttribute(,,) 这样,可是并不是每个页面都经过action的啊!
那种不在struts管理范围,但又需要显示数据的页面用什么查询呢?比如一个
ListNews.jsp这样的展示页面,不在STRUTS流程中,而且还要翻页什么的,更不能指望用ACTION了吧,import的service和DAO都不能用了(没有注入),难道还得用老方法写个不在SPRING管理范围的DAO查询DB吗?那不是又回到老路上了?! JSP页如何查询数据?请说说具体的解决方案.
都用TAG?似乎这样效率又会降低呢 如何是好
至于读取数据,可以用JSTL啊;至于效率嘛,本人觉得对效率没有特殊要求的,略微牺牲那么点点,不算大问题吧
加一个param.page参数
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
UserService userService = wac.getBean("userService");List users = userService.find();%>
一般是ACTION(或者再封装一曾)去操作DAO,获得数据结果集传给JSP进行显示的。很少见到有人在JSP里操作DAO的
WebApplicationContextUtils
在jsp页无法解析,需要引入什么呀?
<%page import="org.springframework.web.context.support.WebApplicationContextUtils"%>
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());
UserDao userDao = (UserDao)ctx.getBean("userDao");
List list = userDao.getUsers();
ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");二:ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());三:ServletContext servletContext = request.getSession().getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.
getRequiredWebApplicationContext(servletContext); 什么区别啊?
第一个是比较通用的获得spring上下文的一个类,它的参数是文件所在本地系统的路径,它不仅可以用于b/s的web应用程序,也可以应用于c/s的桌面程序,如果你在web应用中采用这种方式的话,没有指定配置文件的绝对路径,它默认是从tomcat/bin目录去加载(如果你用的tomcat作为你的web server的话^_^)
第二个是web应用程序专用的一个获得spring上下文的一个类
第三个不就是和第二个类似吗(我觉得)^_^
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>二:在JSP<%@ page import="org.springframework.context.ApplicationContext"%>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils"%><%@ page import="com.yourcompany.service.CategoryService"%><%
//上面的CategoryService引用是我自己的东西
//applicationContext.xml中一定要有完整的依赖链,从dataSource到CategoryServiceApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());CategoryService cs = (CategoryService) ctx.getBean("CategoryService");List list =cs.getCategoryDAO().findAll();%>
或者
ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext();这是在action以外的地方拿ApplicationContext的方法,需要的参数是:ServletContext,在request.getServletContext里能拿到,所以只要有request就能拿到spring配置文件里的bean.这种方法通常在写组件时用,比如写个自定义标签,正常的流程,最后都走action,尽量保证每个请求都给一个.do,而不是直接去一个JSP,这样既保证了MVC模式,又防止用户直接记下JSP地址在没有后台准备情况下访问。