JSP动态页面技术
-
脚本和注释
-
jsp脚本
<% java代码 %> <%= java变量或表达式 %> <%! java代码 %>
-
jsp注释
html注释:<!--注释内容--> java注释: //单行注释 /* 多行注释 */ <%--注释内容--%>
-
-
Jsp原理
- jsp第一次被访问的时候会被web容器翻译成servlet,在执行。
- Jsp翻译后会变成 文件名_jsp.java 此格式,保存在Tomcat根目录下的work文件夹内部
- <% java代码 %> 其中Java代码会原封不动放置到 翻译后的 java文件中的 service方法中,因此该java代码中不允许定义方法
- <%= java变量或表达式 %> 会翻译为 out.print(java变量或表达式);
- <%! java代码 %> 其中Java代码会原封不动放置到 翻译后的 java文件中的 成员位置
- 流程:访问服务器-查找work目录是否有对应的翻译后的java-没有则到项目目录下进行翻译
-
jsp指令(<%@ 指令 %>)
-
page指令
<%@ page 属性名1="属性值1" 属性名2="属性值2" ...%>//格式 //常用属性pageEncoding,contentType,improt,errorPage //e.g <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" session="true" import="java.util.List" errorPage="error.jsp" isErrorPage="true" %> 翻译 contentType="text/html;charset=UTF-8" ==> response.setContentType("text/html;charset=UTF-8");//可不写,会跟随pageEncoding格式 pageEncoding="UTF-8" ==> jsp文件的编码 session="true" == > HttpSession session = request.getSession();//是否在Jsp翻译时自动创建session,默认为true,在jsp文件中可以直接使用session对象 import="java.util.List" ==>导包 errorPage="error.jsp" ==>jsp出现错误会自动跳转 isErrorPage="true" ==>说明本页为处理错误页面,申明此属性可以获得错误的异常
-
include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中.格式如下
<%@ include file="被包含的文件地址" %>
-
taglib指令
在jsp页面引入标签库(jstl,struts2标签库...)格式如下:
<%@ taglib uri="标签库地址" pretix="前缀" %>
-
-
内置对象
-
javax.servlet.jsp.JspWriter out
用于页面输出,缓冲区默认8kb,程序执行会将out.print(String str),中的str先写到out的缓冲区,然后缓冲区满了,或者刷新或页面输出了会在将out缓冲区内的数据放入response的缓冲区中。response再提交给tomcat。可以使用如下代码直接将缓冲区内数据写到response中
<%@ page buffer="0kb" %>
-
javax.servlet.http.HttpServletRequest request
得到用户请求信息
-
javax.servlet.http.HttpServletResponse response
服务器向客户端的回应信息
-
javax.servlet.ServletConfig config
服务器配置,可以取得初始化参数
-
javax.servlet.http.HttpSession session
用来保存用户的信息
-
javax.servlet.ServletContext application
所有用户的共享信息
-
java.lang.Object page
指当前页面转换后的Servlet类的实例
-
javax.servlet.jsp.PageContext pageContext
JSP的页面容器
pageContext.setAttribute(String key,String value,int score);//此方法可以向其他域写内容 pageContext.getAttribute(String key,int score);//从指定的域获取数据 pageContext.findAttribute(String key);//自动从所有域(从小打到)中寻找关于key的值
-
java.lang.Throwable exception
表示JSP页面所发生的异常,在错误页中才起作用
-
-
jsp标签
- 页面包含(动态包含):<jsp:include page="被包含的页面" />
- 请求转发:<jsp:forward page="要转发的资源" />
-
EL表达式
主要用于获取域中数据
pageContext.setAttribute("company", "传智播客"); //存储字符串 request.setAttribute("company", "黑马程序员"); //存储一个对象 User user = new User(); user.setId(1); user.setName("zhangsan"); user.setPassword("123"); session.setAttribute("user", user); //存储一个集合 List<User> list = new ArrayList<User>(); User user1 = new User(); user1.setId(2); user1.setName("lisi"); user1.setPassword("123"); list.add(user1); User user2 = new User(); user2.setId(3); user2.setName("wangwu"); user2.setPassword("123"); list.add(user2); application.setAttribute("list", list); <!-- 使用EL表达式获得域中的值 --> ${requestScope.company } ${sessionScope.user.name } ${applicationScope.list[1].name} <!-- 使用el表达式 全域查找 --> ${company } ${user.name } ${list[1].name} <!-- el可以执行表达式运算 --> ${1+1 } ${1==1?true:false } <!-- empty 判定某个对象是否是null 是null返回true --> ${empty list} ${pageContext}//获取web开发中的pageContext,可从该对象获取其他八大对象
-
JSTL
主要用于jsp页面中使用标签的形式完成业务逻辑功能
-
导包jstl.jar以及standard.jar两个包
-
引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
使用
<c:if>
<c:if test="${count==10} ">xxx</c:if>
<c:forEach>
<c:forEachitems="${productList }" var="pro"> ${pro.name}<br/> </c:forEach> <c:forEachitems="${productMap }" var="entry"> ${entry.key}==${entry.value}<br/> </c:forEach>
-
网友评论