Jsp基础1:基本语法和使用

1. Servlet 的作用: 用 j ava语言开发动态资源 的技术!!!

   Jsp的作用:用java语言+html语言)开发动态资源的技术!!! 


2.问题: 为什么Jsp就是servlet!!!

jsp翻译的java文件:

<span style="font-size:18px;">public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

				HttpJspBase类:
			public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {</span>

结论: Jsp就是一个servlet程序!!!

servlet的技术可以用在jsp程序中

jsp的技术并不是全部适用于servlet程序!


Jsp的生命周期:

1)翻译: jsp->java文件

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

3)构造方法(第1次访问)

4)init方法(第1次访问):_jspInit()

5)service方法:_jspService()

6)destroy方法:_jspDestroy()


3.jsp语法:

⒈jsp脚本表达式:<%=变量或表达式%>

作用: 向浏览器输出变量的值或表达式计算的结果

注意:

1)表达式的原理就是翻译成out.print(“变量” );通过该方法向浏览器写出内容

2)表达式后面不需要带分号结束。


⒉jsp脚本片段<%java代码 %>

作用: 执行java代码

注意:

1)原理把脚本中java代码原封不动拷贝到_jspService方法中执行。

2)单个脚本片段可以不完整,但整个jsp页面所有的脚本片段必须是完整的,遵循java语法。


⒊jsp声明:<%! 变量或方法 %>

作用: 声明jsp的变量或方法

注意:

1)变量翻译成成员变量,方法翻译成成员方法。

2)jsp声明不能使用九大隐式对象,九大隐式对象的作用域只在JspService()中。

⒋jsp注释:<%!--  jsp注释  --%>

注意

1)html的注释会被翻译和执行。而jsp的注释不能被翻译和执行。

4.jsp的三大指令: page include taglib(jsp指令不会做任何输出)

jsp指令基本的语法格式: <%@ page 属性名="值" %>

⒈page指令用于定义jsp页面的各种属性,无论page指令在jsp的任何位置,都作用于整个jsp页面。

<%@pagelanguage="java"告诉服务器使用什么动态语言来翻译jsp文件%>

extends="package.class"指定该jsp继承哪个类

import="java.util.*"导入jsp页面中所需的java包,默认导入lang包和javax.servlet包

session="true|false"默认为true,访问jsp页面时获取或创建session,若为false,则不自动创建session

并且手动创建session时需要导入session所有java包。

buffer="none|8kb|sieze kb" 设置jsp输出流缓冲区的大小,默认为8kb,使用out对象输出是先写到该缓冲区中,

设为none则直接输出给浏览器。

autoFlush="true|false"设置缓冲区满自动刷新,这个设置的是response.getWriter()输出流的缓冲区。

isThreadSafe="true|false" 设置线程安全问题,默认为false指线程不安全,设为true则表示线程安全,其实是

实现了SingleThreadModel接口。

info="text"

errorPage="uri|url"设置错误处理页面。

isErrorPage="true|false" 用来标记错误处理页面,默认为false指不是错误处理页面,若设为true则表示

该jsp是错误处理页面,调用时才会传入Exception对象,才能在jsp中调用这个对象。

contentType="text/html; charset=utf-8" 服务器发送浏览器的数据类型和内容编码

注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题

pageEncoding="utf-8"  告诉服务器使用什么编码翻译jsp文件(成java文件)

isELIgnored="true|false" 默认为false指将EL表达式按EL格式处理,设为true则表示EL表达式按字符串处理。


⒉include指令:用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,

那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:
<%@ include file="relativeURL"%>
其中的file属性用于指定被引入文件的相对路径。  file属性的设置值必须使用相对路径,如果以“/”开头,

表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。
细节:被引入的文件必须遵循JSP语法。
被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。 
由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,

所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。 


动态导入:request.getRequestDispatcher("").include(request,response);这个是动态导入,

当使用到时,才会将另一个资源导入,并且会翻译成2个Servlet,效率低。


⒊taglib指令:用于导入标签库。

<%@ taglib uri="" prefix="" %>


5.jsp运行原理:1.每个jsp页面在第一次被访问时,web容器会将请求交给jsp引擎去处理,

jsp引擎先将jsp页面翻译成java源文件,2.再将源文件编译成class字节码文件,

3.构造该jsp页面类对象,4.调用其-jspService(),返回内容显示到服务器,

当第二次访问时,若服务器发现jsp页面没有改动,则直接调用其-jspService(),

返回内容显示到服务器,若发现jsp页面经过改动,则按第一步重新运行。


6.九大隐式对象:

内置对象名          类型

   request   HttpServletRequest

  response      HttpServletResponse

   config        ServletConfig

application        ServletContext

 session         HttpSession

exception        Throwable

page            Object(this)

out             JspWriter

pageContext     PageContext 


 Exception(要设置isErrorPage属性,才会将这个对象传入到jsp页面中)

注:JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令

的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。 

只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法

返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

设置page指令的buffer属性关闭了out对象的缓存功能
out对象的缓冲区已满
整个JSP页面结束


7.pageContext对象:

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

2)本身是一个域对象

保存数据

1)默认情况下,保存到page

pageContext.setAttribute("name");

2)可以向四个域对象保存数据

pageContext.setAttribute("name",域范围常量)

 

#获取数据

1)默认情况下,从page域获取

pageContext.getAttribute("name")

2)可以从四个域中获取数据

pageContext.getAttribute("name",域范围常量)

 

域范围常量:

PageContext.PAGE_SCOPE

PageContext.REQUEST_SCOPE

PageContext..SESSION_SCOPE

PageContext.APPLICATION_SCOPE

3)自动在四个域中搜索数据

pageContext.findAttribute("name");(EL表达式默认使用的就是这个方法)

顺序: page域 -> request域 -> session- > context域(application域)

4)引入和跳转到其他资源

pageContext中有forward 和include方法。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值