常用标签
静态包含
在浏览网页的时候,同一个网站的footer可能是不变的,如果要给同一个网站的多个网页都加上footer那就太麻烦了,这时可以用静态包含。
index:
footer:
运行结果:
使用这种方式就可以通过改一个jsp文件而更新所有的网页了,翻译后的java代码如下:
可以看到,静态包含其实是把被包含的jsp页面中的代码复制到包含的位置。
动态包含
和静态包含不同的是:
- 动态包含会把包含的jsp页面也翻译成java代码
- 动态包含底层代码是:org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);
- 动态包含还可以传递参数
查看翻译后的java代码:
其中,这行代码:org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “/include/footer.jsp”, out, false);将request、response和out都传给了footer.jsp,因此index.jsp和footer.jsp共用一个out缓冲区,并且在footer.jsp中也能使用index.jsp传过来的参数,如:
请求转发
<jsp:forward page=“文件路径”/> 即可
一个小例子 查询学生信息
用户输入用户名,访问servlet,servlet查询到数据后将其发送给jsp文件显示在浏览器页面上。
这里假设已经获取到了待查询的内容:
servlet程序:
public class SearchInfo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Student> student = new ArrayList<>();
for (int i =0; i < 10; i++) {
student.add(new Student("name" + i, 17 + i, "phone" + i));
}
req.setAttribute("student", student);
req.getRequestDispatcher("/printInfo.jsp").forward(req, resp);
}
}
jsp:
<body>
<%
List<Student> studentList = (List<Student>) request.getAttribute("student");
%>
<table>
<tr>
<td>姓名</td>
<td>年龄</td>
<td>电话</td>
</tr>
<% for (int i=0; i < 10; i++) { %>
<tr>
<td><%=studentList.get(i).getName()%></td>
<td><%=studentList.get(i).getAge()%></td>
<td><%=studentList.get(i).getPhone()%></td>
</tr>
<%}%>
%>
</table>
</body>
==注意,如果直接访问jsp页面会报错,因为serlvet会将查询结果通过setAttribute发送给jsp,所以直接访问jsp得不到待查询数据。
下图是访问流程图:
Listener监听器
JavaWeb三大组件:Servlet程序、Filter过滤器、Listener监听器。
Listener的作用是,监听某种变化,然后通过回调函数反馈给客户/程序做相应的处理。
ServletContextListener
监听ServletContext对象的创建和销毁,ServletContext在web工程启动时创建,在web工程停止时销毁。
目前先简单了解这一个监听器,后面在详细说。
下面简单验证一下,先实现这个接口,然后重写两个方法,contextInitialized在web启动时运行,contextDestroyed在web工程停止时触发。
public class ListenerTest implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("创建!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("销毁!");
}
}
当启动TomCat时,可以看到:
点击Stop后: