JavaWeb_SpringMVC和titles的简单整合

本文详细介绍了Tiles组件的原理与使用方法,包括如何在Spring配置文件中配置Tiles视图解析,编写tiles文件来定义布局和组件,以及如何在controller方法中返回tiles.xml文件中的名称以实现场景展示。同时,展示了layout.jsp模板的实现,以及如何通过tiles:insertAttribute动态插入内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 tiles组件

借用百度百科介绍的概念:
Tiles 是一种JSP布局框架,主要目的是为了将复杂的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。 Tiles使得struts在页面的处理方面多了一种选择。并且更容易实现代码的重用。
Tiles框架是建立在JSPinclude指令基础上的,但它提供了比JSPinclude指令更强大的功能。Tiles框架具有如下特性:

1.         创建可重用的模板

2.         动态构建和装载页面

3.         定义可重用的Tiles组件

4.         支持国际化。

2 在spring配置文件中增加对tiles的视图解析配置

<!-- Tiles3 Resolver -->
	<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" p:order="1"/>
	<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
		<property name="definitions">
			<list>
				<value>classpath:tiles.xml</value>
			</list>
		</property>
	</bean>

3 在classpath下编写tiles文件

<!--?xml version="1.0" encoding="UTF-8"?-->  
<!DOCTYPE tiles-definitions PUBLIC  
	"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"  
	"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">  
	
<tiles-definitions>

	<!-- ↓↓↓====================layout==================↓↓↓ -->
	<!-- base -->
	<definition name="baseLayout" template="/WEB-INF/jsp/layouts/layout.jsp">
		<put-attribute name="header" value="/WEB-INF/jsp/layouts/header.jsp" />
		<put-attribute name="sidemenu" value=""/>
		<put-attribute name="body" value="" />  
		<put-attribute name="footer" value="/WEB-INF/jsp/layouts/footer.jsp" />
	</definition>
	
	<!-- minyan_sidemenu -->
	<definition name="home_sidemenu" extends="baseLayout">
		<put-attribute name="sidemenu" value="/WEB-INF/jsp/layouts/minyan_sidemenu.jsp" />
	</definition>

	<!-- 主页 -->
	<definition name="home" extends="home_sidemenu">
		<put-attribute name="body" value="/WEB-INF/jsp/admin/common/home.jsp" />
	</definition>

    
	<!-- ↑↑↑===================MinYan===================↑↑↑ -->
</tiles-definitions>

4 编写重要的layout.jsp模版

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="robots" content="noindex,nofollow">
<meta name="author" content="">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="format-detection" content="telephone=no, email=no, address=no">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>minyan web</title>
<link href="<%=basePath%>/css/bootstrap.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/font-awesome.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/lib/iCheck/skins/flat/_all.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css"/>
<link href="<%=basePath%>/css/bootstrap-datetimepicker.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/lib/select2/css/select2.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/iconfont/iconfont.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/style.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/theme.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<script type="text/javascript" src="<%=basePath%>/js/jquery-1.11.1.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/lib/select2/js/select2.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-datetimepicker.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-datetimepicker.ja.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/lib/iCheck/icheck.min.js?<%=staticTimestamp%>" ></script>
<script type="text/javascript" src="<%=basePath%>/js/common.js?<%=staticTimestamp%>"></script>
</head>
<body class="theme-1">
<tiles:insertAttribute name="header" />
<div class="row-offcanvas row-offcanvas-left">
<tiles:insertAttribute name="sidemenu" />
<div class="content">
<tiles:insertAttribute name="body" />
<tiles:insertAttribute name="footer" />
</div>
</div>
</body>
</html>
其中tiles:insertAttribute根据项目需求定制页面模版。(jsp中用的是bootstarp不需注意class属性等)

5 在controller方法的返回值返回tiles.xml文件中的name属性即可

比如:
@RequestMapping(value = "/init.do")
	public String welcome(ModelMap model, HttpServletRequest request, @ModelAttribute(value = "pagenum") String p) {

		HashMap<String, Object> params = new HashMap<String, Object>();

		// 页码
		if (StringUtils.isEmpty(p)) {
			p = "0";
		}

		List<Account> accounts = new ArrayList<Account>();
		for (int i = 0; i < 20; i++) {
			Account account = new Account(i + 1, "login:" + i, "password:" + i);
			accounts.add(account);
		}

		// 分页设定
		PaggingHolder<Account> pagenation = new PaggingHolder<Account>(accounts);
		pagenation.setPage(Integer.parseInt(p));
		pagenation.setNrOfElements(accounts.size());

		model.addAttribute("accountList", pagenation);
		model.addAttribute("searchCond", params);

		return "home";
	}
所需jar包 http://download.youkuaiyun.com/detail/jwiang/9407369








### JavaWebSpringMVC 的作用 SpringMVCSpring 框架中的一个重要模块,它是一个基于 Java 实现的轻量级 Web 应用框架,遵循 Web MVC 设计模式。其主要目的是通过分离模型(Model)、视图(View)控制器(Controller),降低 Web 层组件之间的耦合度,从而提升应用的可维护性扩展性[^1]。 在 JavaWeb 开发中,传统的 Servlet JSP 技术虽然能够满足基本需求,但在处理复杂业务逻辑时容易导致代码混乱。而 SpringMVC 提供了一种更加结构化的方式,使得开发者可以专注于具体的业务逻辑而不是底层请求处理细节。 --- ### 如何在 JavaWeb 中使用 SpringMVC #### 配置 DispatcherServlet 要在 JavaWeb 项目中集成 SpringMVC,首先需要在 `web.xml` 文件中配置核心前端控制器 `DispatcherServlet`。这个 servlet 负责接收所有 HTTP 请求并将它们分派到相应的处理器上: ```xml <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 上述配置表示任何匹配根路径 `/` 的 URL 请求都会由 `DispatcherServlet` 来处理[^2]。 #### 定义 Handler Mapping 为了使 `DispatcherServlet` 知道如何找到对应的 Controller 方法来处理特定请求,通常会定义一个 **HandlerMapping** 组件。例如,在 XML 配置文件中可以通过如下方式指定 Bean 名称与 URL 映射关系: ```xml <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> ``` 这种方式允许根据 bean 的名称自动绑定 URL 地址。 #### 使用 @RequestMapping 注解简化映射 现代开发中推荐使用注解驱动的方式来替代繁琐的手动 XML 配置。通过 `@RequestMapping` 注解可以直接将某个类或者方法关联至具体 URI 上,省去了额外的 XML 设置工作: ```java @Controller public class MyController { @RequestMapping("/hello") public String sayHello(Model model) { model.addAttribute("message", "Hello, World!"); return "greeting"; } } ``` 在此例子中,当访问 `/hello` 路径时,将会执行该 controller 下面的方法,并向页面传递数据 `"message"`[^3]。 另外需要注意的是,Spring 将所有的 bean 控制权集中管理起来,这意味着我们不再手动实例化对象而是依赖于容器注入所需的服务资源。 --- ### 数据共享机制对比 类似于传统 JavaWeb 中 session 存储临时变量的功能,SpringMVC 提供了更为灵活的数据传输手段——即利用 Model 接口完成相同目的的操作 (`model.addAttribute()`)[^3]。这种方法不仅限定了生命周期范围还增强了程序间的协作能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值