您的位置:首页 > Web前端 > JavaScript

jsp:include包含servlet

2016-03-21 00:00 288 查看
和Struts2的<s:action/>这个标签一样,<jsp:include>也是在页面中包含另外的页面或servlet,一般在页面一加载就显示后台数据时这两个标签比较实用。

首先是一个servlet:

public class LoadAllNewsController extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

INewsService newsService = new NewsServiceImpl();

try {
List<News> newsList = newsService.getAll();//得到数据

request.setAttribute("newsList", newsList);
} catch (ServiceException e) {
e.printStackTrace();

}
finally{

newsService = null;
//这里不再是跳转页面,而是include
request.getRequestDispatcher("/WEB-INF/admin/loadAllNews.jsp").include(request, response);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);

}

}


这个servlet要返回的页面:

<div class="row clearfix">
<div class="col-md-12 column">
<!-- 新闻列表 -->
<c:choose>
<c:when test="${newsList != null && newsList.size() != 0 }">
<table class="table">
<thead>
<tr>
<th>新闻标题</th>
<th>发布时间</th>
<th>城市</th>
<th>分类</th>
<th>编辑</th>
<th>是否审核</th>
</tr>
</thead>
<tbody>
<c:forEach items="${newsList }" var="news">
<c:choose>
<c:when test="${news.examined == 0 }">
<tr class="error">
</c:when>
<c:when test="${news.examined == 1 }">
<tr class="success">
</c:when>
</c:choose>
<td><a
href="root/newsDescription?id=<c:out value="${news.id}"/>"><c:out
value="${news.title }"></c:out></a></td>
<td><fmt:formatDate value="${news.publishTime }"
pattern="yyyy年MM月dd日 HH:mm:SS" /></td>
<td><c:out value="${news.city }"></c:out></td>
<td><c:choose>
<c:when test="${news.category == 1 }">社会</c:when>
<c:when test="${news.category == 2 }">国际</c:when>
<c:when test="${news.category == 3 }">军事</c:when>
<c:when test="${news.category == 4 }">娱乐</c:when>
<c:when test="${news.category == 5 }">时尚</c:when>
<c:when test="${news.category == 6 }">科技</c:when>
<c:when test="${news.category == 7 }">财经</c:when>
<c:when test="${news.category == 8 }">体育</c:when>
<c:when test="${news.category == 9 }">旅游</c:when>
<c:when test="${news.category == 10 }">美食</c:when>
<c:when test="${news.category == 11 }">汽车</c:when>
<c:when test="${news.category == 12 }">教育</c:when>
<c:when test="${news.category == 13 }">其他</c:when>
</c:choose></td>
<td><a
href="root/listNewsByEditorId?id=<c:out value="${news.editorId }"/>"><c:out
value="${news.editor }"></c:out></a></td>
<td><c:choose>
<c:when test="${news.examined == 0 }">未审核</c:when>
<c:otherwise>已审核</c:otherwise>
</c:choose></td>
</tr>
</c:forEach>
</tbody>
</table>
</c:when>
<c:otherwise>
<h3>没有新闻</h3>
</c:otherwise>
</c:choose>
</div>
</div>


包含该servlet的页面index.jsp:

<div class="row clearfix">
<div class="col-md-12 column">
<jsp:include page="${basePath }/root/loadAllNews"></jsp:include>

</div>
</div>


这样在刷新index.jsp时加载servlet的数据。有时会报这个错:

org.apache.jasper.JasperException: /WEB-INF/admin/rootIndex.jsp (line: 83, column: 26) attribute for %>" is not properly terminated
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:443)
。。。

我的原因是

<jsp:include page="${basePath }/root/loadAllNews"></jsp:include>

的servlet路径不正确,不要用<%=basePath>来加载路径,标签的page属性值可以是相对路径URL或者<%=表达式 %>,但同时只能存在其中一种

<jsp:include page="/frame/include.jsp"></jsp:include> 表示绝对路径

<jsp:include page="frame/include.jsp"></jsp:include> 表示相对路径
<jsp:include page="<%=uri %>"></jsp:include> 两个引号与<%=uri %>之间不能有空格
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: