JSP
2018-12-21 本文已影响0人
微笑中的你
Java Server Pages java服务器页面
是在传统的HTML文件中插入 Java程序段和JSP标记。
其根本是一个简化的Servlet。
jsp文件在第一次被访问时会被web容器翻译成servlet。
- 第一次访问 index.jsp
- index_jsp.java
- 翻译成 index_jsp.class运行
- 可以在 tomcat的work目录中找到。
- 下一次访问时,如果内容发生了变化,会重新翻译加载
jsp 常见语法
<% java 代码 %>
java代码会被翻译到servlet中的service方法的内部
<%= java 变量或表达式%>
会被翻译成service方法内部out.print();
<%! java 代码 %>
会被翻译成 servlet 的成员内容
HTML 注释 在页面中的查看源码中可以看到
<!-- 这里是注释 -->
java 注释 jsp生成的servlet文件中有,页面看不到
/* 这里是注释 */
//单行注释
JSP注释 jsp生成的servlet文件中没有,页面看不到
<%-- 这里是注释 --%>
jsp 常见指令
用来设置jsp页面相关信息,以及用于jsp页面间的通信。
-
page 指令
设置jsp页面相关信息
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
常见属性:
language 目前只支持java
contentType 用来指定jsp页面的MIME和编码格式,用分号隔开;
pageEncoding 用来设置文件的编码 默认为 ISO 8859-1 需修改为utf-8
import 在jsp页面中用来引入java中的package
session 指定当前页面是否能获取当前用户的session对象,默认为true。如果设置为
false,怎不能使用session对象,不然会报500错误。
errorPage 如果当前页面发送错误,网页会重定向到errorPage指定的页面
isErrorPage 允许错误处理
extends jsp页面生成的servlet继承于哪个类。
buffer 设置缓冲区的大小
autoFlush 是否自动刷新缓冲区
isThreadSafe 是否支持多线程访问,默认为true
info 设置jsp页面的介绍信息
isELIgnored 是否支持EL表达式
-
include 指令
可以用来包含其它页面
只生成一个java文件及class文件
<body>
<%@ include file="/header.jsp" %>
<h1>主体</h1>
<%@ include file="/footer.jsp" %>
</body>
-
taglib 指令
声明jsp文件中使用的标签库:jsp标准标签库,第三方标签库,自定义标签库
标签动作
- 页面包含 动态包含 <jsp:include page="/header.jsp"></jsp:include> 生成多个java和class文件
- 请求转发 <jsp:forward page="/footer.jsp"></jsp:forward>
隐式对象
jsp翻译成servlet时,servic方法中存在9个已初始化的对象
* request
得到用户请求信息对象
* response
服务器向客户端的响应对象
* final javax.servlet.jsp.PageContext pageContext
* javax.servlet.http.HttpSession session=null;
用来保存用户会话的信息
* final javax.servlet.ServletContext application
所有用户的共享信息
* final javax.servlet.ServletConfig config
服务器的配置,可以取得初始化参数
* javax.servlet.jsp.JspWriter out=null;
* final java.lang.Object page=this;
当前页面转换后的Servlet类的实例
* javax.servlet.jsp.JspWriter _jspx_out=null;
* javax.servlet.jsp.PageContext _jspx_page_context = null;
* exception
表示页面发生异常,在错误页中才起作用。只有是错误页面的时候,才会有该对象
out
为什么ddd在最前面??
EL 表达式 Express Lanuage
代替jsp页面中脚本的编写
作用:获取四大域中的数据
<body>
<%
//pageContext 域
pageContext.setAttribute("name", "张三------pageContext域");
//request 域
request.setAttribute("age", "11--------request域");
//session 域
session.setAttribute("address", "杭州---------session域");
//application域
application.setAttribute("national", "中国-----------application域");
%>
姓名:${pageScope.name }
<br>
年龄:${requestScope.age }
<br>
地址:${sessionScope.address }
<br>
国籍:${applicationScope.national }
<br>
<hr>
<br>
<h1></h1> el简写 从四个域去查找,从小到大查找 </h1>
<br>
${name } <br>
${age } <br>
${address } <br>
${national } <br>
<br>
<hr>
<br>
${1+1 }
<br>
${empty name }
<br>
</body>
JSTL (JSP Standard Tag Library)jsp标准标签库
可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能
JSTL 有5个库:
- core 核心库
- i18N 国际化
- SQL
- XML
- Functions
使用,在lib中加入 jstl-1.2.jar,然后在jsp页面引入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
jstl标签通常会在jsp页面中配合 EL 表达式使用
if 标签使用
<body>
<c:if test="${1==1 }">lxf</c:if>
</body>
foreach 标签使用
<hr>
<!-- 遍历字符串集合 -->
<%
ArrayList<String> strList = new ArrayList<String>();
strList.add("aaa");
strList.add("bbb");
strList.add("ccc");
strList.add("ddd");
pageContext.setAttribute("strList", strList);
%>
<c:forEach items="${strList }" var="str">
${str } <br>
</c:forEach>
<hr>
<!-- 遍历自定义对象集合 -->
<%
ArrayList<User> userList = new ArrayList<User>();
User user1 =new User();
user1.setUsername("lisi");
userList.add(user1);
User user2 =new User();
user2.setUsername("wangwu");
userList.add(user2);
User user3 =new User();
user3.setUsername("chenliu");
userList.add(user3);
pageContext.setAttribute("userList", userList);
%>
<c:forEach items="${userList }" var="user">
${user.username } <br>
</c:forEach>
<hr>
<!-- 遍历Map -->
<%
HashMap<String, String> person = new HashMap<String, String>();
person.put("name", "phonegg");
person.put("sex", "男");
pageContext.setAttribute("person", person);
%>
<c:forEach items="${person }" var="entry">
${entry.key }:${entry.value } <br>
</c:forEach>