jsp实现网页包含
在编写网页代码时,经常会出现一种需求,不同网页都会出现一个固定的内容,例如:导航栏,页面foot等。如果一个个复制粘贴,编写时可能不是很麻烦,但是需要修改时,网页每个都需要重新修改,网页代码也很复杂很冗余。所以,在jsp中会使用标签引入的方法来实现该效果。
静态包含
<%@include file="xxx.jsp"%>
例:
<body>
<%@include file="navigation.jsp"%>
网页内容<br/>
</body>
如果有斜杠,则 / 代表 http://ip:port/工程路径/
查看编译的源文件
动态包含
<jsp:include page="xxx.jsp"></jsp:include>
例:
<jsp:include page="navigation.jsp"></jsp:include>
网页内容(动态包含)
查看编译的文件
相比静态包含,多了一个编译文件,将被包含的jsp网页也编译了
使用动态包含,不仅是调用了网页,还将自己的request和response一起传递给了被包含的网页,这样一来就可以实现动态变化
例:
将birthday参数传递到navtion.jsp中
content.jsp
<body>
<jsp:include page="navigation.jsp">
<jsp:param name="birthday" value="2000-5-20"/>
</jsp:include>
网页内容(动态包含)
</body>
被包含的网页 navigation.jsp
<body>
<h1>我是导航</h1>
生日<%=request.getParameter("birthday")%><br/>
</body>
*jsp标签实现请求转发
<jsp:forward page="xxx.jsp"></jsp:forward>
例:
<body>
<jsp:forward page="index.jsp"></jsp:forward>
</body>
但是由jsp转发出去的请求比较少,请求转发一般使用于servlet和jsp网页之间,一般的业务流程为
客户端发送请求给servlet => servlet处理请求和数据库做数据交换,搜索等 => 最后请求转发给jsp网页
jsp网页一般只做输出功能,业务处理交给servlet
servlet
public class HandlerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//模拟处理数据
int value = 5*5;
//存储到resquest域中
req.setAttribute("data",value);
//请求转发
req.getRequestDispatcher("/forward.jsp").forward(req,resp);
}
}
jsp
<body>
<%
int value = (int) request.getAttribute("data");
%>
<h1>data=</h1><%=value%>
</body>
```![请添加图片描述](https://img-blog.csdnimg.cn/bf276469ec3e40d7a3ae98a4bd1ab3ad.png)
jsp
```java
<body>
<%
int value = (int) request.getAttribute("data");
%>
<h1>data=</h1><%=value%>
</body>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngp61hb2-1642148709987)(C:/Users/MengN/AppData/Roaming/Typora/typora-user-images/image-20220111222034905.png)]