最近从网找到一个简单的CMS系统,相对于网络上哪些产品化的CMS开源框架,这个系统基本反馈了CMS系统的大致思路,由于本人是做后台开发的,针对界面以下分析就将源码拿过来用,同时添加以下自己认为应该修改的地方,学习就是去其槽粕的过程以及遇到各种问题的过程,所以耐心很重要。
首先搭建我们的项目,我的web项目名称CMS,从网上下载的源码框架是Struts1搭建的,由此可以看出这个系统应该是很老了,具体用到的技术我还没分析,但是我会用新技术去代替原来的老旧技术,java开发也是如此,应该与时俱进,这里我用Struts2替换Struts1,所以关于配置方面有很大改造。
首先,先引入Struts2的必要jar包,在WEB-INF下创建web.xml文件,并集成Struts2.这个比较简单。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>/public/index.jsp</welcome-file> </welcome-file-list> </web-app>
源码中index.jsp页面
<%@ page language="java" pageEncoding="utf-8"%> <%@ include file="/WEB-INF/jsp/pub/include.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="UTF-8"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>网站首页</title> <link href="<%=request.getContextPath()%>/css/index.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="wrap"> <!--头部定义开始--> <div id="header" class="main"> <jsp:include page="/WEB-INF/jsp/pub/header.jsp"></jsp:include> </div> <!--头部定义结束--> <!--中部内容定义开始--> <div class="main"> <!--右侧内容定义--> <div class="mainContent"> <div class="r_navigation"> <strong style="font-size: 14px;">头条新闻</strong> </div> <div id="column1"> <div id="flashNews"> <div style="width:300px;height: 230px;float:right;text-align:center"> <script type=text/javascript> var focus_width=300; var focus_height=230; var swf_height = focus_height; var picPath='<f:message key="upload_http_path"/>/p_w_picpaths/'; var pics=''; var links=''; <c:forEach items="${newsBigImgList}" var="nb"> pics+=picPath+'<c:out value="${nb.img}"/>|'; links+="<c:url value="/news/see.do?id=${nb.id}"/>|"; </c:forEach> pics=pics.substring(0,pics.length-1); links=links.substring(0,links.length-1); var flash_path='<c:url value="/p_w_picpaths/s_flash.swf"/>'; document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">'); document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="'+flash_path+'"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">'); document.write('<param name="menu" value="false"><param name=wmode value="opaque">'); document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&borderwidth='+focus_width+'&borderheight='+focus_height+'">'); document.write('<embed src="'+flash_path+'" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&borderwidth='+focus_width+'&borderheight='+focus_height+'" menu="false" bgcolor="#F0F0F0" quality="high" width="'+ focus_width +'" height="'+ swf_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'); document.write('</object>'); </script> </div> </div> <div class="newsList"> <ul class="listStyle1"> <c:forEach items="${newsTJList}" var="newstj"> <li><a href="<c:url value="/news/see.do?id=${newstj.id}"/>" target="_blank"><c:out value="${newstj.title}"/></a><f:formatDate value="${newstj.pubtime}" pattern="MM-dd"/></li> </c:forEach> </ul> </div> <div class="clearbox"></div> </div> <div class="c_spacing"></div> <div class="ADBanner"> <img src="<f:message key="p_w_picpath_http_url"/>/p_w_picpaths/ADBanner1.gif" /> </div> <div class="c_spacing"></div> <div id="moralEduSpace" class="goldenrod"> <dl> <dt> <em><a href="<c:url value="/clazz/"/>">课程中心</a></em> <ul class="colChildNav"> <c:forEach items="${clazzMenuList}" var="clazzmenu"> <li><a href="<c:url value="/clazz/search.do?pmId=${clazzmenu.id}"/>"><c:out value="${clazzmenu.name}"/></a></li> </c:forEach> </ul> </dt> <dd> <ul class="thumbListStlye2"> <c:forEach items="${tjClazzList}" var="tjc"> <li> <div class="pe_u_thumb"> <a href="<c:url value="/clazz/view.do?id=${tjc.id}"/>" target="_blank"><img src="<f:message key="upload_http_path"/>/p_w_picpaths/${tjc.img}" width="160" height="120" border="0"/></a> </div> <div class="pe_u_thumb_title"> <a href="<c:url value="/clazz/view.do?id=${tjc.id}"/>" target="_blank"><c:out value="${tjc.name}"/></a> <br /> </div> </li> </c:forEach> </ul> <ul class="listStyle1"> <c:forEach items="${newClazzList}" var="newclazz"> <li><a href="<c:url value="/clazz/view.do?id=${newclazz.id}"/>" target="_blank"><c:out value="${newclazz.name}"/></a><f:formatDate value="${newclazz.pubtime}" pattern="MM-dd"/></li> </c:forEach> </ul> <div class="clearbox"></div> </dd> </dl> </div> <div class="c_spacing"></div> <div id="moralEduSpace" class="lightGreen" style="margin-top:60px;"> <dl> <dt> <em><a href="<c:url value="/source/"/>">资源下载</a></em> <ul class="colChildNav"> <c:forEach items="${sourceMenuList}" var="sourceMenu"> <li><a href="<c:url value="/source/menu.do?id=${sourceMenu.id}"/>"><c:out value="${sourceMenu.name}"/></a></li> </c:forEach> </ul> </dt> <dd> <ul class="listStyle1" style="float:left"> <c:forEach items="${sourceList}" var="source" varStatus="vs"> <li><a href="<f:message key="upload_http_path"/>/files/${source.filename}"><c:out value="${source.name}"/>[<c:out value="${source.fileSize}" />]</a>[<f:formatDate value="${source.pubtime}" pattern="MM-dd"/>]</li> <c:if test="${vs.index==7}"> </ul><ul class="listStyle1"> </c:if> </c:forEach> <div class="clearbox"></div> </dd> </dl> </div> <div class="c_spacing"></div> <div id="instructionalResearch" class="mediumTurquoise" style="margin-top:20px;"> <dl> <dt> <em><a href="<c:url value="/topic/"/>">互动交流</a></em> <ul class="colChildNav"> <c:forEach items="${topicMenuList}" var="topicMenu"> <li><a href="<c:url value="/topic/menu.do?id=${topicMenu.id}"/>"><c:out value="${topicMenu.name}" /></a></li> </c:forEach> </ul> </dt> <dd> <div class="col2"> <ul class="listStyle1"> <c:forEach items="${topicList}" var="topic" varStatus="vs"> <c:if test="${vs.index<8}"> <li><a href="<c:url value="/topic/topic.do?id=${topic.id}"/>" target="_blank">华师奥运抬水版</a><f:formatDate value="${topic.pubtime}" pattern="MM-dd HH:mm"/></li> </c:if> </c:forEach> </ul> </div> <div class="col1"> <ul class="listStyle1"> <c:forEach items="${topicList}" var="topic" varStatus="vs"> <c:if test="${vs.index>7}"> <li><a href="<c:url value="/topic/topic.do?id=${topic.id}"/>" target="_blank">华师奥运抬水版</a><f:formatDate value="${topic.pubtime}" pattern="MM-dd HH:mm"/></li> </c:if> </c:forEach> </ul> </div> </dd> </dl> </div> <div class="c_spacing"></div> </div> <!--侧边栏--> <div id="sideBar"> <jsp:include page="/WEB-INF/jsp/userbox.jsp"></jsp:include> <div class="left_box"> <dl> <dt><em>学科资源</em></dt> <dd> <ul class="subjectList"> <c:forEach items="${clazzMenuList}" var="clazzmenu"> <li><a href="<c:url value="/clazz/search.do?pmId=${clazzmenu.id}"/>"><c:out value="${clazzmenu.name}"/></a></li> </c:forEach> <div class="clearbox"></div> </ul> </dd> </dl> </div> </div> <div class="clearbox"></div> </div> <!--中部内容定义结束--> <div class="clearbox"></div> <jsp:include page="/WEB-INF/jsp/pub/footer.jsp"></jsp:include> </body> </html>
欢迎页面我设置为登录页面,这里面我遇到一个问题,就是jsp页面是放置在WebContent或者WebRoot下,还是放置在WEB-INF下,网上也有讨论,我们这里不做详细说明,可以看http://blog.csdn.net/lin446591998/article/details/38126445我放置在WebContent下。
现在我们来看一下源码index.jsp页面,引入css样式的方式<%=request.getContextPath()%>,这里我们可以用${pageContext.request.contextPath} 来替换,其实两者功能相同,一个是EL表达式,一个是java代码,因此 我更偏向于${pageContext.request.contextPath}
<link href="<%=request.getContextPath()%>/css/index.css" rel="stylesheet" type="text/css" />
修改后
<link href="${pageContext.request.contextPath}/css/index.css" rel="stylesheet" type="text/css" />
这里企业方法一般用<c:set var="cms" value="${pageContext.request.contextPath}" />这个方法来获取项目名称,这个标签必须引入两个jar包(jstl-1.1.2.jar;standard-1.1.2.jar
)为了防止每个页面都set这个值,我们在WebContent下新建base文件夹,然后新建taglibs.jsp,将以下内容放入其中,这样其他jsp页面想获取项目管理名称,就直接用${cms}就可以了,前提是这个jsp要将taglibs.jsp引入。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%> <c:set var="cms" value="${pageContext.request.contextPath}" />
在index.jsp里面引入taglibs.jsp,同时将引入css的方式改变,index中用了JSTL的c标签以及f标签,所以我们要在taglibs.jsp中引入。注意fmt:message这个国际化标签的运用,想了解的可以百度
<%@ page language="java" pageEncoding="utf-8"%> <%@ include file="/base/taglibs.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="UTF-8"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>网站首页</title> <link href="${cms}/css/index.css" rel="stylesheet" type="text/css" /> </head> <body> <div class="wrap"> <!--头部定义开始--> <div id="header" class="main"> <jsp:include page="/public/header.jsp"></jsp:include> </div> <!--头部定义结束--> <!--中部内容定义开始--> <div class="main"> <!--右侧内容定义--> <div class="mainContent"> <div class="r_navigation"> <strong style="font-size: 14px;">头条新闻</strong> </div> <div id="column1"> <div id="flashNews"> <div style="width:300px;height: 230px;float:right;text-align:center"> <script type=text/javascript> var focus_width=300; var focus_height=230; var swf_height = focus_height; var picPath='<f:message key="upload_http_path"/>/p_w_picpaths/'; var pics=''; var links=''; <c:forEach items="${newsBigImgList}" var="nb"> pics+=picPath+'<c:out value="${nb.img}"/>|'; links+="<c:url value="/news/see.do?id=${nb.id}"/>|"; </c:forEach> pics=pics.substring(0,pics.length-1); links=links.substring(0,links.length-1); var flash_path='<c:url value="/p_w_picpaths/s_flash.swf"/>'; document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">'); document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="'+flash_path+'"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">'); document.write('<param name="menu" value="false"><param name=wmode value="opaque">'); document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&borderwidth='+focus_width+'&borderheight='+focus_height+'">'); document.write('<embed src="'+flash_path+'" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&borderwidth='+focus_width+'&borderheight='+focus_height+'" menu="false" bgcolor="#F0F0F0" quality="high" width="'+ focus_width +'" height="'+ swf_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />'); document.write('</object>'); </script> </div> </div> <div class="newsList"> <ul class="listStyle1"> <c:forEach items="${newsTJList}" var="newstj"> <li><a href="<c:url value="/news/see.do?id=${newstj.id}"/>" target="_blank"><c:out value="${newstj.title}"/></a><f:formatDate value="${newstj.pubtime}" pattern="MM-dd"/></li> </c:forEach> </ul> </div> <div class="clearbox"></div> </div> <div class="c_spacing"></div> <div class="ADBanner"> <img src="${cms}/p_w_picpaths/ADBanner1.gif" /> </div> <div class="c_spacing"></div> <div id="moralEduSpace" class="goldenrod"> <dl> <dt> <em><a href="<c:url value="/clazz/"/>">课程中心</a></em> <ul class="colChildNav"> <c:forEach items="${clazzMenuList}" var="clazzmenu"> <li><a href="<c:url value="/clazz/search.do?pmId=${clazzmenu.id}"/>"><c:out value="${clazzmenu.name}"/></a></li> </c:forEach> </ul> </dt> <dd> <ul class="thumbListStlye2"> <c:forEach items="${tjClazzList}" var="tjc"> <li> <div class="pe_u_thumb"> <a href="<c:url value="/clazz/view.do?id=${tjc.id}"/>" target="_blank"><img src="<f:message key="upload_http_path"/>/p_w_picpaths/${tjc.img}" width="160" height="120" border="0"/></a> </div> <div class="pe_u_thumb_title"> <a href="<c:url value="/clazz/view.do?id=${tjc.id}"/>" target="_blank"><c:out value="${tjc.name}"/></a> <br /> </div> </li> </c:forEach> </ul> <ul class="listStyle1"> <c:forEach items="${newClazzList}" var="newclazz"> <li><a href="<c:url value="/clazz/view.do?id=${newclazz.id}"/>" target="_blank"><c:out value="${newclazz.name}"/></a><f:formatDate value="${newclazz.pubtime}" pattern="MM-dd"/></li> </c:forEach> </ul> <div class="clearbox"></div> </dd> </dl> </div> <div class="c_spacing"></div> <div id="moralEduSpace" class="lightGreen" style="margin-top:60px;"> <dl> <dt> <em><a href="<c:url value="/source/"/>">资源下载</a></em> <ul class="colChildNav"> <c:forEach items="${sourceMenuList}" var="sourceMenu"> <li><a href="<c:url value="/source/menu.do?id=${sourceMenu.id}"/>"><c:out value="${sourceMenu.name}"/></a></li> </c:forEach> </ul> </dt> <dd> <ul class="listStyle1" style="float:left"> <c:forEach items="${sourceList}" var="source" varStatus="vs"> <li><a href="<f:message key="upload_http_path"/>/files/${source.filename}"><c:out value="${source.name}"/>[<c:out value="${source.fileSize}" />]</a>[<f:formatDate value="${source.pubtime}" pattern="MM-dd"/>]</li> <c:if test="${vs.index==7}"> </ul><ul class="listStyle1"> </c:if> </c:forEach> <div class="clearbox"></div> </dd> </dl> </div> <div class="c_spacing"></div> <div id="instructionalResearch" class="mediumTurquoise" style="margin-top:20px;"> <dl> <dt> <em><a href="<c:url value="/topic/"/>">互动交流</a></em> <ul class="colChildNav"> <c:forEach items="${topicMenuList}" var="topicMenu"> <li><a href="<c:url value="/topic/menu.do?id=${topicMenu.id}"/>"><c:out value="${topicMenu.name}" /></a></li> </c:forEach> </ul> </dt> <dd> <div class="col2"> <ul class="listStyle1"> <c:forEach items="${topicList}" var="topic" varStatus="vs"> <c:if test="${vs.index<8}"> <li><a href="<c:url value="/topic/topic.do?id=${topic.id}"/>" target="_blank">华师奥运抬水版</a><f:formatDate value="${topic.pubtime}" pattern="MM-dd HH:mm"/></li> </c:if> </c:forEach> </ul> </div> <div class="col1"> <ul class="listStyle1"> <c:forEach items="${topicList}" var="topic" varStatus="vs"> <c:if test="${vs.index>7}"> <li><a href="<c:url value="/topic/topic.do?id=${topic.id}"/>" target="_blank">华师奥运抬水版</a><f:formatDate value="${topic.pubtime}" pattern="MM-dd HH:mm"/></li> </c:if> </c:forEach> </ul> </div> </dd> </dl> </div> <div class="c_spacing"></div> </div> <!--侧边栏--> <div id="sideBar"> <jsp:include page="/public/userbox.jsp"></jsp:include> <div class="left_box"> <dl> <dt><em>学科资源</em></dt> <dd> <ul class="subjectList"> <c:forEach items="${clazzMenuList}" var="clazzmenu"> <li><a href="<c:url value="/clazz/search.do?pmId=${clazzmenu.id}"/>"><c:out value="${clazzmenu.name}"/></a></li> </c:forEach> <div class="clearbox"></div> </ul> </dd> </dl> </div> </div> <div class="clearbox"></div> </div> <!--中部内容定义结束--> <div class="clearbox"></div> <jsp:include page="/public/footer.jsp"></jsp:include> </body> </html>
与index.jsp相同目录header.jsp,同时修改css引入方式以及图片的引入方式
<%@ page language="java" pageEncoding="utf-8"%> <%@ include file="/base/taglibs.jsp"%> <ul id="globalNav"> <script type="text/javascript"> var url = document.URL; var index="index"; if(url.indexOf("/news/")!=-1){ index="news"; } else if(url.indexOf("/clazz/")!=-1){ index="clazz"; } else if(url.indexOf("/source/")!=-1){ index="source"; } else if(url.indexOf("/topic/")!=-1){ index="topic"; } else if(url.indexOf("/master/")!=-1){ index="master"; } if(index=="index"){ document.write('<li id="topTabOn"><a href="<c:url value="/"/>"><span>网站首页</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/"/>"><span>网站首页</span></a></li>'); } if(index=="news"){ document.write('<li id="topTabOn"><a href="<c:url value="/news/"/>"><span>校园新闻</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/news/"/>"><span>校园新闻</span></a></li>'); } if(index=="clazz"){ document.write('<li id="topTabOn"><a href="<c:url value="/clazz/"/>"><span>课程中心</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/clazz/"/>"><span>课程中心</span></a></li>'); } if(index=="source"){ document.write('<li id="topTabOn"><a href="<c:url value="/source/"/>"><span>资源下载</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/source/"/>"><span>资源下载</span></a></li>'); } if(index=="topic"){ document.write('<li id="topTabOn"><a href="<c:url value="/topic/"/>"><span>互动交流</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/topic/"/>"><span>互动交流</span></a></li>'); } if(index=="master"){ document.write('<li id="topTabOn"><a href="<c:url value="/master/"/>"><span>个人中心</span></a></li>'); } else{ document.write('<li><a href="<c:url value="/master/"/>"><span>个人中心</span></a></li>'); } </script> </ul>
footer.jsp页面
<%@ page language="java" pageEncoding="utf-8"%> <%@ include file="/base/taglibs.jsp"%> <div class="main" id="footer"> <dl> <dt> <a href="#">联系我们</a> | <a href="#">网站留言</a> | <a href="#">友情链接</a> | <a href="#">版权声明</a> </dt> <dt> 版权所有 2010 </dt> </dl> </div>
userbox.jsp页面引入
<%@ page language="java" pageEncoding="utf-8"%> <%@page import="com.classnet.util.page.WebUtil"%> <%@ include file="/public/include.jsp"%> <div class="left_box"> <dl> <dt><em>用户中心</em></dt> <dd> <div id="Con_11" > <form action="<c:url value='/j_acegi_security_check'/>" method="post" style="margin:0"> <div id="LoginFrom" class="Login_ajax"> <ul style="line-height:30px;"> <% if(WebUtil.getLoginUser()!=null){ %> <li>欢迎您:</li> <li style="padding-left:20px;"><%=WebUtil.getLoginUser() %></li> <li style="text-align:center"> <% if(WebUtil.isAdmin()){ %> <a href="<c:url value="/admin"/>">进入后台管理</a> <% } else{ %> <a href="<c:url value="/master/"/>">进入用户中心</a> <% } %> | <a href="<c:url value="/logout"/>">退出登录</a> </li> <% } else{ %> <li>用户名:<input name="j_username" type="text" class="inputtext" style="width: 125px;" /></li> <li>密 码:<input name="j_password" type="password" class="inputtext" style="width: 125px;" /></li> <li id="loginButton"> <a href="<c:url value="/reg.do?m=toreg"/>">注册</a> <input type="submit" value="登 录" class="inputbutton" /> </li> <% } %> </ul> </div> </form> </div> </dd> </dl> </div> <script type="text/javascript"> function changep_w_picpathkey(){ document.getElementById("p_w_picpathkey").src="<c:url value="/p_w_picpathkey.jsp?d="/>"+new Date().getTime(); } </script>
上面一个因为源码中含有java代码,现在我们暂时屏蔽掉这些需要查询数据库的,修改后
<%@ page language="java" pageEncoding="utf-8"%> <%@ include file="/base/taglibs.jsp"%> <div class="main" id="footer"> <dl> <dt> <a href="#">联系我们</a> | <a href="#">网站留言</a> | <a href="#">友情链接</a> | <a href="#">版权声明</a> </dt> <dt> 版权所有 2010 </dt> </dl> </div>
将我们新建的项目部署在tomcat中,这时候我们打开项目,页面如下:
转载于:https://blog.51cto.com/zangyanan/1871161