jsp基础学习总结

1. 运行jsp首先需要搭建环境

jsp是在服务器运行的,因此需要一个web容器作为服务器作为运行环境,推荐使用tomcat。

特点:

  1. 在html中写java代码开发动态资源
  2. 放在服务器中运行,tomcat中的work目录用于存放jsp临时文件

2.jsp执行过程

问题:为什么通过http://localhost:8080/test.jsp就可以显示效果?

  1. 首先,访问到test.jsp文件。服务器(jspparse)解析jsp,在tomcat/work目录下翻译成test.java文件 --翻译过程
  2. 然后将test.java编译成test.class文件 --编译过程
  3. 构造test.class实例
  4. 执行test.class中的方法

注意:

  1. 第一次访问test.jsp,走1,2,3,4;第二访问走4
  2. 都是在tomcat服务器中执行的
  3. jsp 文件修改了或临时文件删除了,都会重新走翻译和编译的过程

3.生命周期

对比servlet生命周期:
执行:
1. 构造方法(第一次访问)
2. init方法(第一次访问)
3. service方法
4. destroy方法

jsp生命周期:
执行:
1. 翻译
2. 编译
3. 构造方法
4. init方法
5. service方法
6. destroy方法

4. jsp语法

  1. jsp模板
    就是jsp中html代码的部分
  2. jsp表达式
    语法:<%=表达式 %>
    作用就是向流浪器输出变量的值
  3. jsp脚本
    语法: <%java代码 %>
    作用:执行java代码
    原理:把Java代码拷贝到service方法中执行
  4. jsp声明
    语法:<%! 变量 %>
  5. jsp注释
    语法:<%!-- 注释 --%>
    注意:jsp注释不会被翻译和执行,html注释会翻译和执行

5.jsp三大指令

5.1 including指令

语法:<%@including file=“common/test.jsp” %>
作用:在当前页面包含其他页面,例如每一个网站下面都有版权相关信息,如果没次都写的话,非常麻烦,而且维护起来也相当不方便,工作量非常大,这时候就可以使用包含指令。

1,准备footer.jsp
2,静态包含
<%@include file="footer.jsp" %>

注意:

  1. 原理就是将两个jsp文件翻译成一个java源文件,再编译执行。叫做静态包含
  2. 被包含的页面可以不出现全局html标签了,因为会翻译到一个原文件中去,所以千万不要定义重复变量!!!
5.2 page指令

作用:告诉tomcat服务器如何翻译jsp文件
语法: <%@page
language =“java” – 翻译成的语言
import =“java.util.*” --java代码需要用到的包
pageEncoding =“utf-8” --服务器翻译jsp使用的编码
contentType =“text/html,charset=utf-8” --服务器输出到浏览器的内容与编码
isErrorPage=“false” --当前页面是否为错误处理页面
errorPage =“error.jsp” --指定错误处理页面
isELIgnored=“false” --是否支持EL表达式
seesion=“true” %>

6.九大内置对象

jsp内置了九大内置对象,在jsp加载完成是就会创建

名称          对应类型
request         HttpServletRequest
response        HttpservletResponse
session         HttpSession
page        Object(this)
config        ServletConfig
application         ServletContext
exception        Throwable
out          JspWriter
pageContextt         PageContext

6.1 out对象与printlnWriter对象

PrintlnWriter:直接向流浪器输出内容
out对象 :向jsp缓存写数据,相当于带缓存的printWriter

注意:以下才会刷新缓存:
  1. 手动刷新
  2. 缓存区满了
  3. 改jsp或者执行完jsp

6.2 pageContext对象

类型为PageContext,封装了其他对象,可用来获取其他对象,在自定义标签时常用

注意:pageContext也是域对象

jsp中有四大域对象,分别是:
request:只能在同一请求中使用
session : 只能在用一会话中使用
pageContext :只能在当前jsp使用
application : 在当前应用中使用

7. EL表达式

EL表达式非常好用,它的作用就是替代jsp表达式,可以输出变量,获取Javabean对象的属性,从域对象中取出数据

注意四个域对象的优先级

pageContext>request>session>application;
如果四个域对象都有同一个属性,则会按照优先级找;当然也可以到指定域对象中查找

//1.从域对象中获取数据
 <%request.setAttribute("name","张三"); %>
    ${name }<!--默认从pageContext域中取数据-->
    
 <%request.setAttribute("name","request");
    pageContext.setAttribute("name", "pageContext");
    session.setAttribute("name", "session");
    application.setAttribute("name", "application"); %>
    ${name }<!--访问jsp输出pageContext-->

<!--指定域范围查找-->
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}

//获取javabean的属性
${bean.name}//实际上bean.getName(

8. jsp标签

jsp标签用于替换掉jsp脚本,jsp中就可以不用出现大量的java代码了!!分为:

  1. 内置标签(动作标签):不需要导入
  2. jstl标签库:需要导入标签
  3. 自定义标签:需要导入
8.1 动作标签
<!--forward转发标签配合param参数标签使用-->
    <jsp:forward page="/FooterJsp.jsp">
      <jsp:param  value="zhangsan" name="name" />
    </jsp:forward>

8.2 jstl ——jsp standard tag library

开发中主要使用到核心标签库core和国际化标签fmt

8.2.1 core标签

set标签
out标签
remove标签

<!--使用taglib指令,uri代表tld文件中的URI,prefix表示简写-->
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!--相当于request.setAttribute("name","xiao")-->
<c:set var="name" value="${ 'xiao'}" scope="request"></c:set>

<!--相当于request.getAttribute("name")-->
	<c:out value="${ name}"></c:out> 

<!--相当于request.remove("name")-->	   
	<c:remove var="name" scope="request"/>

if 单条件选择标签,没有else标签,可以使用empty判断对象是否为空,字符串长度是否为0,集合长度是否为0

<c:set var="hp" value="${88 }" scope="request"></c:set>
	
	<c:if test="${hp<5 }"><p>这个英雄快死了</p></c:if>
	<c:if test="${!(hp<5) }"><p>这个英雄还可以抢救</p></c:if>
	
	<%
	pageContext.setAttribute("weapon", null);
	pageContext.setAttribute("lastwords", "");
	pageContext.setAttribute("item",new ArrayList());
	 %>
	 <c:if test="${empty weapon }"><p>武器栏为空</p></c:if>
	 <c:if test="${empty lastwords }"><p>特种兵没有遗言</p></c:if>
	 <c:if test="${empty item }"> <p>穷鬼英雄,物品栏为空</p></c:if>

choose标签 多选择标签

<c:set var="ph" value="${80 }"></c:set>
	 <c:choose>
	 	<c:when test="${ph<60 }"><p>盖伦快撑不住了</p></c:when>
	 	<c:otherwise><p>盖伦:我觉得我还可以再抢救!!!</p></c:otherwise>
	 </c:choose>

foreach 循环标签

<%
  ArrayList<String> heros=new ArrayList<String>() ;
  heros.add("神枪手");
  heros.add("剑魂");
  heros.add("鬼泣");
  %>
  <table width="200px" align="center" border="1" cellspacing="0">
<tr>
    <td>编号</td>
    <td>英雄</td>
</tr>
   
<c:forEach items="${heros}" var="hero" varStatus="st"  >
    <tr>
        <td><c:out value="${st.count}" /></td>
        <td><c:out value="${hero}" /></td>
    </tr>
</c:forEach>
</table>

direct 重定向标签

<c:redirect url="FooterJsp.jsp"></c:redirect>

forTokens标签,用于拆分字符串,可使用多个分隔符

<c:forTokens items="google,baidui,taobao"  delims="," var="hero">
	<c:out value="${hero }"></c:out>
</c:forTokens>
8.3 开发自定义标签
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值