include指令不支持Servlet路径的写法,Servlet路径的写法会报错,但是我们有变通的办法!
(如果不能使用Servlet路径,那就写jsp路径,在jsp中再转发到Servlet中,相当于利用jsp过渡了一下,换句话说,相当于jsp是个中转站,jsp起到了中转的作用,这也不失为一种变通的办法)
看下面
home2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>测试include指令能否包含Servlet</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/body.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/mark.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/console.css">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/console.js"></script>
</head>
<body>
<h2>
测试include指令能否包含Servlet(如果不能使用Servlet路径,那就写jsp路径,在jsp中再转
发到Servlet中,相当于利用jsp过渡了一下,换句话说,相当于jsp是个中转站,jsp起到了中转的作用,这也不失为一种变通的办法)
</h2>
<h2>include指令不支持Servlet路径的写法,Servlet路径的写法会报错</h2>
<%@ include file="/index.jsp"%>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
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>临时过渡页面,类似于中转站的作用</title>
</head>
<body>
<h2>临时过渡页面,类似于中转站的作用</h2>
<%
request.getRequestDispatcher("/SaveData2").forward(request, response);
%>
</body>
</html>
名字叫SaveData2的servlet
package com.jiongmeng.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jiongmeng.entity.HyperLink;
/**
* 保存数据,然后转发到jsp页面
*/
@WebServlet("/SaveData2")
public class SaveData2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setAttribute("fromPath", "SaveData2");
System.out.println("--------------SaveData2--------------");
System.out.println("SaveData2 / city=" + request.getParameter("city"));
System.out.println("SaveData2 / moeny=" + request.getParameter("moeny"));
System.out.println("SaveData2 / workYear=" + request.getParameter("workYear"));
// 超链接实体,集合
List<HyperLink> hyperLinkList = new ArrayList<HyperLink>();
HyperLink hyperLink1 = new HyperLink("626", "智联招聘", "http://www.zhaopin.com/", "找工作上智联招聘");
HyperLink hyperLink2 = new HyperLink("627", "前程无忧", "http://www.51job.com/", "找工作上前程无忧");
HyperLink hyperLink3 = new HyperLink("628", "拉勾网", "https://www.lagou.com/", "IT互联网垂直招聘");
HyperLink hyperLink4 = new HyperLink("629", "酷狗音乐", "http://www.kugou.com/", "就是歌多");
HyperLink hyperLink5 = new HyperLink("630", "大众点评", "http://www.dianping.com/", "点评中的佼佼者");
HyperLink hyperLink6 = new HyperLink("891", "12306", "http://www.12306.cn/mormhweb/", "官方购买火车票");
hyperLinkList.add(hyperLink1);
hyperLinkList.add(hyperLink2);
hyperLinkList.add(hyperLink3);
hyperLinkList.add(hyperLink4);
hyperLinkList.add(hyperLink5);
hyperLinkList.add(hyperLink6);
request.setAttribute("hyperLinkList", hyperLinkList);
//转发至jsp页面
// request.getRequestDispatcher("/hyperLinkList.jsp").forward(request, response);
request.getRequestDispatcher("/hyperLinkList.jsp").include(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
hyperLinkList.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!--
<title>我是被包含的页面hyperLinkList.jsp</title>
-->
<center>
<hr>
<h1>演示jsp:include动作和include指令</h1>${param.onLineName}<br><br>
<h2>我是显示超链接集合页面(我是hyperLinkList.jsp)</h2>
<c:if test="${'SaveData2' == requestScope.fromPath }">
<c:forEach var="hyperLinkItem" items="${requestScope.hyperLinkList}">
<a style="background-color: red;" href="${hyperLinkItem.url}" target="_blank">${hyperLinkItem.name}</a>
</c:forEach>
</c:if>
<c:if test="${'SaveData' eq requestScope.fromPath }">
<c:forEach var="hyperLinkItem" items="${requestScope.hyperLinkList}">
<a href="${hyperLinkItem.url}" target="_blank">${hyperLinkItem.name}</a>
</c:forEach>
</c:if>
</center>
<jsp:include page="/toDesktop.jsp?userName=jack&age=6">
<jsp:param name="hobby" value="football"/>
</jsp:include>
<hr>
toDesktop.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
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>放到桌面,发送快捷方式到桌面</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/body.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/mark.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/console.css">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/console.js"></script>
</head>
<body>
<center>
<h1>
我是toDesktop.jsp页面<br><br>
${param.userName}<br><br>
${param.age}<br><br>
${param.hobby}<br><br>
</h1>
<h2>放到桌面,发送快捷方式到桌面(IE浏览器会显示放到桌面这个按钮,其他浏览器不会显示放到桌面这个按钮)</h2>
<input name="myToDesktopButton" style="display: block;" id="toDesktopButton" type="button" value="放到桌面" οnclick="toDesktop(location.href, '雪豹软件工作室')">
<!--
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
如果把上面的button按钮的style的display设置成inline,那么该button按钮就会和下面的button按钮会显示在同一行
如果把上面的button按钮的style的display设置成block,那么该button按钮就会和下面的button按钮不会显示在同一行
-->
<input type="button" value="我是个按钮,我这个按钮没有任何意义">
</center>
</body>
<script type="text/javascript">
//将快捷方式发送到桌面
function toDesktop(sUrl, sName) {
try {
var WshShell = new ActiveXObject("WScript.Shell");
var oUrlLink = WshShell.CreateShortcut(WshShell
.SpecialFolders("Desktop")
+ "\\" + sName + ".url");
oUrlLink.TargetPath = sUrl;
oUrlLink.Save();
alert("成功创建桌面快捷方式!");
} catch (e) {
alert("当前IE安全级别不允许操作或您的浏览器不支持此功能!");
}
}
//判断是否是IE浏览器
function isIE() {
if (!!window.ActiveXObject || "ActiveXObject" in window) {
// alert("是IE浏览器");
return true;
} else {
// alert("不是IE浏览器");
return false;
}
}
//如果该页面include(被包含)被包含多次,那么要等整个大的页面加载完之后才会执行onload事件,而且只会执行一次onload事件
/*比如a.jsp页面被多次包含进home.jsp页面中,那么要等整个home.jsp页面加载完之后才会执行onload事件,而且只会执行一次onload事件*/
window.onload = function() {
alert("url=" + window.location.href);
var result = isIE();
if (!result) {
//不是IE浏览器
/*
如果该页面include(被包含)只被包含1次,就使用下面这种document.getElementById("元素的id")的方式获取元素,只
能获取到一个元素
*/
//获得按钮元素
var toDesktopButtonNode = document.getElementById("toDesktopButton");
//隐藏按钮
toDesktopButtonNode.style.display = "none";
/*
如果该页面include(被包含)被包含多次,就使用下面这种document.getElementsByName("元素的name")的方
式获取元素,可以获取到多个元素,获取到的是一个数组
*/
var toDesktopButtonNodes = document.getElementsByName("myToDesktopButton");
for (var index = 0; index < toDesktopButtonNodes.length; index++) {
var toDesktopButtonElement = toDesktopButtonNodes[index];
toDesktopButtonElement.style.display = "none";
}
}
}
</script>
</html>