jsp
Posted π+1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp相关的知识,希望对你有一定的参考价值。
一、jsp概述
(1)jsp全称是java Server Pages,是一种用于开发动态web的技术。
(2)jsp实际上是一种servlet技术。
(3)jsp=html+java
(4)html/servlet/jsp三者的区别:
1)html:静态内容
2)servlet:适合编写java逻辑代码,不适合编写网页内容
3)jsp:适合编写输出静态内容
二、jsp原理
服务器端: 翻译(生成xxx_jsp.java文件) -> 编译(生成xxx_jsp.class文件) -> 执行
html代码,服务器不及诶,直接写回客户端
Java代码直接解析,把结果写回到客户端
三、jsp的最佳实践
Servlet:控制器。重点编写java代码
作用:(1)获取表单数据;
(2)处理业务逻辑
(3)分发转向
jsp:代码显示模板,重点在于显示数据
四、jsp的基本语法
(1)JSP模版元素
网页的静态内容。如:html标签和文本。
(2)JSP的脚本
小脚本 <% java代码 %>
表达式 <%= a+b %> 等价于out.print(a+b);
声明 <%! %> 表示在类中定义全局成员,和静态块。
(3)JSP注释
JSP注释:<%-- 被注释的内容 --%> 特点:安全,省流量
网页注释:<!-- 网页注释 --> 特点:不安全(在网页源码中会显示注释的内容),费流量
五、3个指令
(1)语法:
<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%>
或者:
<%@ 指令名称 属性1=“属性值1”%>
<%@ 指令名称 属性2=“属性值2”%>
(1)page:都有默认值。
其中:pageEncoding是告诉服务器使用什么编码进行翻译
contextType告诉浏览器使用什么编码解析
(2)include:
静态包含:把其它资源包含到当前页面中。
<%@ include file="/xxx.jsp %>
动态包含:
<jsp:include page="/xxx.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
注:能用静的就不用动的。
(3)taglib:
作用:在JSP页面中导入JSTL标签库,替换jsp中的java代码片段。
六、jsp的6个动作
<jsp:include > 动态包含
<jsp:forward> 请求转发
<jsp:param> 设置请求参数
<jsp:useBean> 创建一个对象
<jsp:setProperty> 给指定的对象属性赋值
<jsp:getProperty> 取出指定对象的属性值
七、jsp的9个内置对象
request:域对象
response
session:域对象
application:域对象
exception
page:java.lang.Object:当前对象this
config
out
pageContext:域对象
可以操作其他对象方法
findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找
八、EL表达式
(1) EL表达式:expression language 表达式语言用来简化jsp中java代码开发。EL不是一种开发语言,是jsp中获取数据的一种规范.
(2)EL表达式只能获取存在4个作用域中的数据
${u} <===> pageContext.findAttribute("u");
${u.name} <==>u.getName()方法
.运算符相当于调了getter方法,(.属性名)。
(3)EL获取对于null这样的数据,在页面中表现为空字符串"";
(4)empty
也可以使用三元运算符
<%
<%--判断null,是的话返回true(空字符串和没有元素的集合都是null)--%> String str1 = null; request.setAttribute("str1", str1); String str2 = ""; request.setAttribute("str2",str2); String str3 = "abc"; request.setAttribute("str3", str3); List list1 = new ArrayList(); request.setAttribute("list1", list1); List list2 = new ArrayList(); list2.add("asdf"); request.setAttribute("list2", list2); int sex = 0; request.setAttribute("sex", sex); %> ${ empty str1 } //true ${ empty str2 } //true ${ empty str3 } // false ${ empty list1 } // true ${ empty list2 } // false <%--三元运算符--%> <input type="radio" name="sex" value="male" ${sex==0 ? "checked=‘checked‘":"" }/>男<br/> <input type="radio" name="sex" value="female" ${sex==1 ? "checked=‘checked‘":"" }/>女<br/>
九、JSTL
(1)JSTL(JavaServerPages Standard Tag Library)JSP标准标签库,使用JSTL实现JSP页面中逻辑处理。如判断、循环等。
(2)使用JSTL需在页面中添加taglib指令:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--通用标签: set、 out、 remove--%> <c:set var="num1" value="${2+3}" scope="page"></c:set> <c:out value="${num1}"></c:out> <c:remove var="num1"></c:remove> <%--条件标签:if --%> <c:set var="num2" value="3"></c:set> <c:if test="${7>num2}"></c:if> <%--条件标签:choose --%>-- <c:set var="num3" value="3"></c:set> <c:choose> <c:when test="${num3==1}">1111</c:when> <c:when test="${num3==2}">2222</c:when> <c:when test="${num3==3}">3333</c:when> <c:otherwise>others</c:otherwise> </c:choose>
<% <%--迭代标签:foreach--%> List list = new ArrayList(); list.add("tom"); list.add("bob"); list.add("jerry"); list.add("marry"); list.add("sundy"); pageContext.setAttribute("list", list);<%--只有在本页使用pageContext有效--%> %> <table border="1"> <tr> <th>姓名</th> <th>索引</th> <th>计数</th> <th>第一个</th> <th>最后一个</th> </tr> <c:forEach items="${list}" var="list" varStatus="vs"> <tr> <td>${list}</td> <td>${vs.index}</td> <%--索引--%> <td>${vs.count}</td> <%--计数--%> <td>${vs.first}</td> <%--第一个(Boolean)--%> <td>${vs.last}</td> <%--最后一个(Boolean)--%> </tr> </c:forEach> </table>
以上是关于jsp的主要内容,如果未能解决你的问题,请参考以下文章