[英]How to reuse the code in servlet when mapping servlet from the jsp page
[英]How to reuse the same code block at the beginning of JSP page?
我的公司使用的是JSP,幾乎每個頁面上都有從會話中獲取數據並將其分配給某個變量的幾乎相同的邏輯,以便我可以用來呈現頁面並傳遞給JavaScript函數。 我想知道我是否可以重構以減少“復制粘貼”
喜歡:
<%
String attr1= (String) session.getAttribute("attr1");//
boolean isEnglishVersion = "en".equals(session.getAttribute("Lang"));//Get lang version, needed when rendering page
MobileGameMeta meta= (MobileGameMeta) session.getAttribute("meta");
String strFieldId = request.getParameter("id");
MobileGameField field = //use attr1 and meta to build this field, this is needed when call JavaScript function
JSONObject parameters = HTTPUtil.parseParameterMap2JSONObject((Map<String, String[]>) request.getParameterMap()); //needed when call JavaScript function
%>
我的頁面后面需要此變量,而每個頁面將具有幾乎相同的代碼塊。 如何重用?
在java類中,我可以定義一些字段並在構造函數中初始化它們,我在JSP中也有類似的方法嗎?
我知道這不能直接回答您的問題,但是您不應該編寫Java代碼/在JSP中與會話進行交互。 JSP是一種顯示技術,應僅用於顯示。
答案是通過servlet將這些值公開給JSP。 如果您尚未使用作為標准使用模式一部分進行此操作的框架,請查找並學習它。 Spring MVC非常好,Struts可以正常工作,您可能還要調查其他幾個問題(Google是您的朋友)。
然后,在您的JSP中,使用標簽庫顯示servlet公開的值,除非您絕對需要(並且幾乎不需要),否則不要在JSP中編寫Java代碼。
正如@GreyBeardedGeek所說,Spring / Struts是最好的選擇,但是您的代碼已經存在了好幾年了,您不能只遷移到Spring或Struts,所以還有另一種選擇可以嘗試SiteMesh
過濾器。 這有點像Java的母版頁。
下載庫: http : //goo.gl/6uzwCJ
在目錄template
創建master.jsp
頁面,並在body標簽中添加您不想復制粘貼的常見邏輯。
<%@taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jstl/fmt" prefix="fn" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><decorator:title/></title>
</head>
<body>
<decorator:body/>
</body>
</html>
現在,在WEB-INF文件夾中創建decorators.xml
文件,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/template">
<decorator name="main" page="master.jsp">
<pattern>/Folder_name/*</pattern>
<pattern>/Folder_name2/test.jsp</pattern>
</decorator>
</decorators>
配置web.xml
文件。 將以下代碼附加在web.xml
文件中。
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.