JSP 常用标签(静态/动态包含、请求转发)简单了解

常用标签

静态包含

在浏览网页的时候,同一个网站的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后:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值