JSP系列记录
JSP就是可以实现在html中写Java代码
例:
hello.jsp
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <!-- 引入相关的Java包--> 你好 <% <!--这里面可写Java代码 --> String list = "listssssss"; session.setAttribute("list", list); <!--设置session --> %> <br> <a href="bye.jsp">跳转到bye页面</a> <!-- 纯html代码-->
bye.jsp
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> 拜拜! <br> <%=new Date().toLocaleString()%> <!--输出时间,Java代码--> <br> <% String list = (String)session.getAttribute("list"); <!--获得session-->
%>
<%= list%> <!--输出session内容-->
执行过程
例如新建一个hello.jsp文件:
- 把 hello.jsp转译为hello_jsp.java
- hello_jsp.java是一个servlet
- 把hello_jsp.java 编译为hello_jsp.class
- 执行hello_jsp,生成html
- 通过http协议把html 响应返回给浏览器
页面元素
1. 静态内容
就是html,css,javascript等内容
2. 指令
以<%@开始 %> 结尾,比如<%@page import="java.util.*"%>
3. 表达式 <%=%>
用于输出一段html
4. Scriptlet
在<%%> 之间,可以写任何java 代码
5. 声明
在<%!%> 之间可以声明字段或者方法。但是不建议这么做。
6. 动作
指令include <%@include file="footer.jsp" %>。footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件
动作include <jsp:include page="footer.jsp" /> footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果,嵌入到响应中。
7. 注释 <%-- -- %>
不同于 html的注释 <!-- --> 通过jsp的注释,浏览器也看不到相应的代码,相当于在servlet中注释掉了
跳转
服务器端跳转:
request.getRequestDispatcher("hello.jsp").forward(request, response);
或使用动作
<jsp:forward page="hello.jsp"/>
客户端跳转:
response.sendRedirect("hello.jsp");
作用域
pageContext表示当前页面作用域
requestContext 表示一次请求。随着本次请求结束,其中的数据也就被回收.
如果发生了服务端跳转,从setContext.jsp跳转到getContext.jsp,这其实,还是一次请求。 所以在getContext.jsp中,可以取到在requestContext中设置的值
客户端跳转,浏览器会发生一次新的访问,新的访问会产生一个新的request对象。所以页面间客户端跳转的情况下,是无法通过request传递数据的。
sessionContext 指的是会话,从一个用户打开网站的那一刻起,无论访问了多少网页,链接都属于同一个会话,直到浏览器关闭。
applicationContext 指的是全局,所有用户共享同一个数据