JSP——基础语法和九大内置对象

24 篇文章 15 订阅
5 篇文章 1 订阅

一.JSP基础语法

1.1 JSP的指令元素

指令元素用于从jsp发送一个信息到容器,比如设置全局变量,文字编码,引入包等。

(1)page指令
<%@ page contentType="text/html;charset=gb2312"%>

page指令中常用的属性有:

lanuage=”XX” : jsp中嵌入的代码时XX,通常是java
import = “包.*.类名” : 在该jsp页面引入包或者某个具体的类
session = [true|false] : 是否在jsp页面给你获取session对象
buffer = [none|8k|指定大小] : 给out对象使用的缓冲区是多大,默认是8K
autoFlash = [true|false] : 当buffer满后,是否自动刷新到浏览器
isThreadSafe = [true|false] : 默认true,表示该jsp的线程安全由程序员控制。false则表示对应的Servlet将实现线程安全接口
errorPage = “相对jsp页面” : 当jsp页面出现错误时,自动跳转到指定jsp页面,要求使用相对路径,当”/”开始时,表示当前web应用的根目录。如果不以”/”开头,则表示相对本jsp页面
isErrorPage = [false|true] : 指定该jsp页面是否专门用于作为error页面,默认false,如果设为true,则可以在该页面直接使用exception内置对象
contentType = “text/html;charset=utf-8” : 指定网页以什么方式显示页面
pageEncoding = “utf-8” : 指定Servlet引擎以什么方法翻译jsp–>servlet,并指定网页以什么方式显示页面

要特别注意contentType和pageEncoding的区别,pageEncoding的功能更强大一些,使用这个即可。

(2)include指令

<%@ include file="filename" %>

1.该指令用于引入一个文件(通常是jsp文件),jsp引擎会把两个jsp文件翻译成一个servlet文件,因此也称为静态引入
2.被引入的jsp文件,只需保留page指令即可,<html>``<body>…均可省略

引入的时候以Web根目录为默认路径。第二点尤其要注意。它和下述将要介绍到的JSP动作元素中的<jsp:include file="">有很大不同,下文会介绍。

(3)taglib指令
这个指令允许在jsp页面使用自定义的标签
<myTag: yourTag num="123">
这个指令留作以后用到再介绍。

1.2 脚本元素

脚本元素可以理解就是java的片段script。

(1)script
<% java代码 %>

(2)表达式
<%= java表达式 %> ,比如:<%= rs.getString(1) %>
例子如下:

<%
    int i = 90;
 %>
 <h1>显示</h1>
 <%
    out.println("i="+i + "<br>");
 %>
 <%= i*9 %>

这个例子会在浏览器输出:

表达式运行结果

也就是说,jsp的表达式结果是直接可以输出的。

(3)declaration声明

<%! 变量声明 %> ,比如:<%! int count=10; %>

这里定义的变量是jsp对应的Servlet的成员变量,也就是全局变量,定义在类中的。而在(2)表达式中在<% %>中定义的变量是局部变量,也就是_jspService中的局部变量。两个变量的作用域是不同的。

可以看下述面试题,myJsp.jsp的body是这样写的:

<%! int i = 90; %>
<%
   int j = 90;
   out.println("i="+(++i)+"; j="+(++j));
%> 

那么第一次访问该页面输出什么?第二次和第三次访问该页面又输出什么?

第一次:i=91; j=91
第二次:i=92; j=91
第三次:i=93; j=91

为什么是这样的呢?到Tomcat的跟目录下找到jsp5_jsp.java这个文件就知道了。使用 <%! %>声明的变量是定义在类中的全局变量,而使用<% %>定义的变量是在_jspService方法中的局部变量。我们每一次访问该jsp页面,实际上调用的是_jspService这个方法,所以j每次都会初始化为90;而i只在第一次访问该jsp页面的时候初始化为90,之后都会随着调用_jspService方法而增加。


除此之外,声明中还可以声明函数:

<%! 函数声明 %> ,比如:

<%!
int jisuan(int num){
    int result = 0;
    for(int i = 0;i < num;i++){
        result = result + i;
    }
}
%>

1.3 JSP的动作元素

动作元素是使用xml语法写的,是jsp规定的一系列标准动作,在容器处理jsp时,当容器遇到动作元素时,就执行相关的操作。

(1)<jsp:userBean> //创建一个javaBean实例
(2)<jsp:setProperty> //给一个javaBean实例设置初始值
(3)<jsp:param> // 给一个jsp设置参数,常常与<jsp:include>结合使用。比如:
(4)<jsp:getProperty> //取得一个javaBean实例的成员变量
(5)<jsp:include> //引入另外一个文件
(6)<jsp:plugin> //使用插件
(7)<jsp:forward> //转发
(8)<jsp:fallback> //

这里重点介绍第5个include,和第7个forward.
那么这里的include和指令元素的include有何区别呢?这里的<jsp:include>指的是动态引入,这样会被翻译成两个不同的Servlet。

总结如下:

<%@ include file=""%>是静态引入
<jsp:include file=""></jsp:include>是动态引入

【相同点】:把一个文件引入到另一个文件
【不同点】:静态引入是把两个jsp翻译成一个Servlet,所以被引入的文件不要包含等等这些元素,不然肯定会报错;动态引入是把两个jsp文件分别翻译,所以被引入的jsp可以包含有等元素。


另外常用的就是第7个,实现转发,它的作用等同于我们在Servlet中使用的请求转发forward,实质上是一样的。

【jsp中的forward的作用】

我们在开发jsp的时候,如果直接把jsp放在Web应用的根目录下,会直接暴露给用户,这样就没有什么安全性可言了。那么通常的做法是什么呢?

【建议】:在开发jsp的过程中,通常要把jsp文件藏在WEB-INF文件夹中,因为Tomcat有这样的安全机制,这样就不能通过浏览器直接访问了。我们要在WebRoot下我们建立一个入口jsp页面,这个页面单纯负责转发,forward到WEB-INF中的jsp页面。像这样:

<jsp:forward page="/WEB-INF/myJsp.jsp"></jsp:forward>

1.4 JSP文件的注释

<!-- 注释的内容 -->是html注释方式,可以使用在jsp
<%-- 注释的内容 --%>是jsp专用注释方法

【区别】<!-- -->会在Servlet中对应生成out.write("<!-- -->"),这样在返回给浏览器的静态页面中也会有<!-- -->,用户看源代码可以看到。而<%-- --%>则在Servlet中没有任何输出,建议使用<%-- --%>

二.JSP九大内置对象

(1)out
向客户端输出数据,字节流

out.println("");

(2)request
接收客户端的http请求,其实也就是Servlet中的HttpServletRequest

getParameter(String name); //name表示表单的参数名
getParameterValues(String name); //得到的是String[],常用语复选框表单
setAttribute(String name,Object obj); //设置名字为name的obj,值为obj
getAttribute(String name); //返回由name指定的属性值,如果不存在就返回null
getCookie();

(3)response
封装jsp产生的回应,相当于Servlet中的HttpServletResponse

addCookie(Cookie cookie);
sendRedirect("/welcome.jsp");

(4)session
用于保存用户的信息,跟踪用户的行为。相当于Servlet中的HttpSession

setAttribute(String name, Object obj);
getAttribute(String name);

(5)application
多个用户共享该对象,可以做计数器。相当于Servlet中的ServletContext

(6)pageContext
代表jsp页面的上下文,也是一个域对象,可以setAttribute(),作用范围只是本页面。

(7)exception
代表运行时的一个异常

getMessage();

(8)page
代表jsp这个实例本身。相当于翻译成的Servlet文件中的this关键字(使用比较少)

(9)config
代表jsp对应的Servlet的配置,可以得到web.xml中的参数。相当于Servlet中的ServletConfig


总结几个域对象:
1.pageContext是域对象,存放的数据只能在当前页面使用
2.request是域对象,存放的数据在一次request请求有效
3.session是域对象,存放的数据在一次会话有效
4.application是域对象,存放的数据在整个Web应用运行期间有效

可以看出,jsp的内置对象基本可以Servlet中的对象一一对应起来,所以说jsp的基础还是Servlet,学会了Servlet,jsp基本上也就会了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值