Jsp详解

Jsp详解

1. Jsp简介

Jsp,Java service page,Java动态网页技术。Jsp实际上也是Servlet。

  • jsp基本结构
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

</body>
</html>

2. Jsp原理分析

​ 在运行web程序的情况下,到tomcat中work\Catalina目录下,编译器已经将jsp文件解析成了Servlet。

3. Jsp语法

3.1 注释

第一种:HTML注释,在源码上可见
<!--  -->
第二种:Jsp注释,在源码上不可见
<%--  --%>

3.2 取值表达式

<%= 表达式 %>
(实际上就是调用输出流打印到页面上)

3.3 Java代码块

<%
	java代码;    
%>

3.4 Java代码块

<%!
	Java代码
%>

4. Jsp三大指令

  • Page : 页面指令
  • Include : 包含指令
  • Taglib:标签指令

4.1 Page指令

contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" 
errorPage="/myerror.jsp" :如果当前页面出错,就跳转到对应的页面
isErrorPage="true" :这个页面是否是错误页面(当我们要在页面上直接使用exception的时候就可以加上它)

4.2 包含指令

<%@ include file="/include/a.jsp"%>
//这个页面将会把a的布局加进来,可以用来做页面的分割。
//注意:被引入的页面只需要Jsp文档声明即可,不需要body及html头等标签。

4.3 Tablib指令

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

5. 九大内置对象

  • pageContext(PageContext)
  • request(HttpServletRequest)
  • response(HttpServletResponse)
  • session(HttpSession)
  • exception(Throwable)
  • application(ServletContext)
  • config(ServletConfig)
  • out(JspWriter)
  • page(当前jsp对象)

6. 动作元素

<jsp:include page="/include2/a.jsp">
<%--jsp:include主要来做包含页面的功能--%>
  • 动作元素与包含指令的区别:
静态包含先把页面包含进来,再翻译成java代码(只有一个文件)
动态包含先都编译成java代码,再将内容进行包含(有多个文件)

如果包含的是静态页面(html),那么使用静态包含
如果包含的是动态网页(jsp),那么使用动态包含

7. EL表达式

  • 导包
el-api.jars
  • mavne依赖
<dependency>                                 
    <groupId>javax.el</groupId>              
    <artifactId>javax.el-api</artifactId>    
    <version>3.0.0</version>                 
</dependency>                                
  • 注意有时候EL表达式不显示
<!--在jsp声明上加上这个属性就可以解决了-->
<%@ isELIgnored="false"%>

7.1 EL表达式作用

EL表达式的作用就是从四大作用域对象中取值。
注意:EL表达式能够从四大作用域取值的前提条件是:取的值的对象必须是符合JavaBean规范的。
集合、数组等都是符合JavaBean规范的。

7.2 EL表达式语法

${key} //会到四个作用域里面去找到key对应的value

7.3 EL取值的顺序:

如果在四个作用域存入了相同名字的属性,此时EL表达式查询找的顺序为从小至大,先取小的范围的值,小的没有,再取到大的范围的值(pageContext<request<session<application)。

${pageScope.msg}         //取pageContext域对象中的msg属性值
${requestScope.msg}      //取request域对象中的msg属性值
${sessionScope.msg}      //取session域对象中的msg属性值
${applicationScope.msg}  //取application域对象中的msg属性值

7.4 注意事项

  • 带点的属性名的取值方式
//设置值
session.setAttribute("KEY.IN.SESSION", "你是session");
//取值
${sessionScope["KEY.IN.SESSION"]}
  • 通过pageContext拿到上下文对象
${pageContext.request.contextPath}
  • Tomcat7之后EL表达式可以调用方法
${user.getUsername()}//调用user对象的getUsername方法

7.5 其他运算符

EL算术运算符
     ${1+2} ${2-1} ${2*3} ${16/5}
     EL 关系运算符
     ${16>5} 或${16 gt 5}
     ${16<5} 或${16 lt 5}
     ${16>=5} 或${16 ge 5}
     ${16<=5} 或${16 le 5}
     ${1=2} 或${1 eq 2}
     ${2!=1} 或 ${2 ne 1}
     EL 逻辑运算符
     ${true && true} --结果 true
     ${true and true} 结果true
     ${true || false} ${true or false} 结果 true
     ${!true} 或 ${not true} 结果false
EL 其他运算符
 	 ${empty param.name} 如果param.name 为空 返回true 否则false
EL 三目运算符
 	 ${A?B:C} 比如 ${user.sex?”男”:”女”}
获取上下文路径:可用于页面中form表达提交时提交servlet请求前的上下文配置
	${pageContext.request.contextPath}}

8. JSTL标准标签库

  • 导包
jstl.jar  
standard.jar 
jsp-api.jar
  • mavne依赖
<dependency>                                  
    <groupId>javax.servlet</groupId>          
    <artifactId>jstl</artifactId>             
    <version>1.2</version>                    
</dependency>                                 
<dependency>                                  
    <groupId>taglibs</groupId>                
    <artifactId>standard</artifactId>         
    <version>1.1.2</version>                  
</dependency>                                 

8.1 引用JSTL标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

8.2 JSTL常用标签

  • if判断标签
<!--test属性中写条件,如果条件成立,cif包裹的内容就会显示在页面上,否则则不会显示。-->
<c:if test="${age>20}">
</c:if>
  • choose选择标签
<c:choose>
    <c:when test="${score>60 && score<80}">
        B:中等水平。
    </c:when>
    <c:when test="${score>60}">
        A:高等水平。
    </c:when>
    <c:otherwise>
        C:垃圾水平。
    </c:otherwise>
</c:choose>
  • set/out存取值
<%--
    var:声明变量名,
    scope:存入的域对象,
    value:var中变量对应的值。
--%>
<c:set var="name" scope="request" value="张三"/>
<c:out value="${name}" />
  • url存取值标签
<%--
    var:变量名,
    value:servlet请求的地址。
    param中name:参数的名称。
    param中value:参数的值。
--%>
<c:url var="login" value="/login">
    <c:param name="username" value="tom"/>
    <c:param name="password" value="123"/>
</c:url>
<a href="${login}">login</a>
  • foreach循环遍历标签
<c:forEach items="${list}" var="stu">
    ${stu.msg}
</c:forEach>

8.3 frameset标签

<html>
	<frameset rows="20%,80%">
		<!-- 头部页面 -->
		<frame src="/xxx/top.jsp">
		<!-- 中间区域 -->
		<frameset cols="25%,75%">
		     <frame src="/xxx/menu.jsp">
		     <frame src="" name="frame_main">
		</frameset>
	</frameset>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章