JSP

 Jsp 的执行过程:

 

1、访问到jsp页面,tomcat 扫描到jsp文件,把%tomcat%/workjsp文件翻译成java源文件

 

2tomcat 服务器把java源文件编译成class字节码文件

 

3tomcat 服务器构造jsp类对象,

 

4tomcat 服务器调用jsp里面的方法,返回内容显示到游览器里面

 

注意:

1jsp修改或者 被删除了,要走翻译和编译的过程

 

2、首次访问会编译,后面的访问不会编译

 

疑问:

为什么jsp就是servlet

jsp继承了HttpJspBaseHttpJspBase继承了 HttpServlet ,所以jsp就是一个servlet

 

Servlet 的生命周期:

 

1)构造方法

2init方法

3service方法

4destroy方法

Jsp的生命周期

1)翻译:jsp-java文件

2)编译:java文件-class文件(servlet程序)

3)构造方法

4init方法

5service方法

6destroy方法

 

JSP 语法:

 

模板:jsp页面中的html代码就是模板

 

语法:<%= "hello"%> <% 代码 %>

 

表达式:

表达式的原理就是翻译成out.write("变量");通过该方法向游览器写出内容;

表达式后不需要带分号

 

声明:

<%  String  a = "20"  %>     局部变量

<% ! String b = "30" %>     全局变量

 

JSP的声明不能重复定义已经存在的方法

 

变量翻译成成员变量,方法翻译成成员方法

 

注释:

 

<! --     html 注释  -->              会翻译到页面上并且执行

<%--     jsp注释 -- >                  不会翻译和执行

 

JSP 指令

 

Include 指令: 在当前页面包含其他页面

 

原理:把被包含的页面内容翻译到包含页面中,合并成翻译成一个java源文件,再编译运行,这种叫做静态包含

 

如果使用静态包含,被包含的页面中不需要出现全局的html标签了

 

page 指令

 

作用:告诉tomcat 如何去翻译jsp文件

 

<%@ page   language = ''java''     --告诉服务器使用什么动态语言来翻译jsp文件

import = "java.util.*"  -- 倒包

pageEncoding = "utf-8" --告诉服务器用什么编码翻译成java文件,同时编译成class文件

 

contentType="text/text charset=utf-8"

-- 服务器发送到游览器的编码方式,

相当于servlet 中的response.setContentType("text/html;charset=utf-8"):

 

errorPage:  指定当前页面的错误处理页面

isErrorPage:判断当前页面是不是错误处理页面 当值为true时,可以获取错误信息 <%=exception.getMessage%>

 

全局错误页面配置

< web-app>

<error-page>

<error-code>500</error-code>

<location>/common/500.jsp</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/common/404.jsp</location>

</error-page>

</web-app>

 

 

session: 是否可以使用sessin内置对象

 

bufferjsp页面的缓存区的大小

 

isElIgnore :是否忽略EL表达式

 

Jsp的内置对象:

 

定义:HttpSessionServletContextServletServletRequest类似的对象

已经创建好的,可以直接使用的对象,就是内置对象

 

共有9个:

 

内置对象名

类型

request

HttpServletRequest

response

HttpServletResponse

config

ServletConfig

application

ServletContext

session

HttpSession

exception

Throwable

out

JspWriter

page

Object(this)

pageContext

PageContext

 

out对象:

 

类型:JspWriter类,相当于带缓存的PrintWriter

 

PrintWriter 直接向游览器写出内容

 

JspWriter   向缓存区写内容,缓存区默认大小8kb  out.flush 刷新缓存区,out.getRemaining()剩余缓存区大小

 

pageContext对象:

 

pageContext jsp的上下文对象

 

1、可以获取其他八个内置对象

 

在自定义标签的时候,PageContext对象会频繁使用

 

2、本身是一个域对象

 

pageContext.setAttribute("message","request 'smessage",PageContext.REQUEST_SCOPE)

 

request.getAttribute("message");

 

1、取数据原则,在哪个域中保存数据,就必须从哪个域中取

 

2pageContext 作为域对象,可以往不同的域中保存对象

 

3pageContext.findAttribute("message");

 

自动搜索,page - request - session-contextapplication

 

 

EL表达式:

 

jsp开发原则:尽量少写甚至不写java代码。

 

作用:向游览器输出域对象中的变量值或者表达式计算的结果

 

 

语法:${ var }   等价于 findAttribute

 

 ${pageScope.name}  从指定的域中获取

 

 

输出对象的属性值:

 

${ student.name }   name指的是getName() 方法,而不是属性。

 

${ list[0].name }    等价于   ((List)pageContext.findAttribute("list")).get(0).getName()

 

${ map['100'].name } 等价于 pageContext.findAttribute("map").get("100").getName();

 

${10 + 5}  算数运算

 

${ name == null  || name == "" }  等价于 ${emptyname}

 

 

标签:

作用:替换掉jsp的脚本

 

1、内置标签(动作标签):不需要在jsp页面的导入标签

 

2jstl标签:需要在jsp页面中导入标签

 

3、自定义标签:开发者自定义

 

 

转发: <jsp:forward page = "/07.e12.jsp?name=eric" >

<jsp:param value="jacky" name="name"/>

</jsp:forward>

 

等价于  request.getRequestDispatcher("/09.action.jsp?name=eric").forward(request,response);

 

 

包含 :包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起

 

<jsp:include page =''/common/header.jsp''></jsp:include>

 

 

静态包含和动态包含的区别:

 

语法:

静态:<%@include file = ''被包含的页面''%>

动态:<jsp:include page=''common.jsp'' >

<jsp:param value =''lucy'' name = ''name''/>

</jsp:include>

 

区别:

 

静态包含不能向被包含页面传递参数,向合并再翻译

动态包含可以向被包含页面传递参数,先翻译再合并

 

JSTL标签库:javestandard tag libarary

 

核心标签库(c标签库)

国际化标签(fmt标签库)

el标签库(fn函数库)

xml标签库(x标签库)

sql标签库(sql标签库)

 

使用步骤:

 

1、导入jstl支持的jar包,

 

2、使用taglib命令导入标签库

<%@taglib uri="tld文件的uri名称" prefix="简写"%>

 

3、在jsp中使用标签

 

4、重点语句

 

保存数据 <c:set var="name"value="rose"></c:set>

${ name }

 

获取数据:<c:out value="${ name }"default="<h3>标题</h3>" escapeXml ="true"><c:out>

out标签:获取数据从域中

default:当value的值为null时,使用默认值

escapeXml:是否对value的值进行转义,false 不转,true

 

单条件判断<c:if test = "${10 > 5}">

条件成立

</c:if>

 

多条件判断:<c:choose>

  <c:when test="${ score >=90 && score <= 100}">优秀</c:when>

              <c:otherwise>其他</c:otherwise>

   </c:choose>

 

循环数据:<c:forEach begin="0" end="2" step="1"items="${list}" var="stu" varStatus="varSta">

 

</c:forEach>

 

begin:开始元素

end:结束元素

step:步长

items:需要遍历的集合

var : 每个元素的名称

varStatus :当前正在遍历元素的状态元素 count属性:当前位置,1开始

 

特殊的字符串: str="java-php-net"

 

<c:forTokens item="${str}" delims="-"var="s">

${s}

</c:forTokens>

 

重定向: <c:redirecturl="http://www.baidu.com"></c:redirect>

 

 

 

JSP的缓存机制: 

 

编码问题解析:

 


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值