web之jsp精华

介绍

jsp (java server page),用于动态开发web资源。
相比HTML,jsp可以嵌套java代码,为用户提供动态的数据。
相比servlet,jsp会很容易的对页面进行排版。
servlet回传html页面是一件非常麻烦的事情,主要是为了解决这个问题。
web服务器调用并执行jsp
第一次访问jsp文件,web服务器会把它翻译成一个servlet,再将其编译成一个class文件,然后再把class文件加载到内存,以后访问就直接访问内存中的实例。我们去查看jsp执行后的文件,不难发现,jsp的实质就是一个servlet

jsp九大内置对象

它们都一一对应servlet的相关类,jsp本质就是servlet。

  • out 向客户端输出数据,字节流
  • request 接受客户端的http请求
  • response 封装jsp产生的回应
  • session 用于保存用户的信息,跟踪用户的行为
  • application 多个用户共享该对象,可以做计数器
  • pageContext jsp页面的上下文,也是一个域对象,存放的数据只能在当前页面使用
  • exception 运行时的异常
  • page 代表这个jsp的实例本身
  • config jsp对应的servlet的配置,可以得到web.xml的参数

当jsp页面中所有代码执行完成后会做一下两个操作:
1.执行out.flush()操作,会把out缓冲区的数据追加到response缓冲区的末尾。
2.然后才response的刷新操作,把全部数据写给客户端。

<%
out.write("out输出1<br>");
out.flush();
out.write("out输出2<br>");
response.getWriter().write("response输出1<br>");
response.getWriter().write("response输出2<br>");
%>

执行这段代码,会得到以上结果,上面很好的解释了这个现象。
在这里插入图片描述
我们查看jsp翻译后的class文件,都是使用out来进行输出,所以一般用out输出,避免输出内容的顺序被打乱。
但是out有两个输出方法:
out.write();
out.print();

out.write()输出字符串没有任何问题,输出整型会出错。
out.print()输出任意数据都没有问题,它会将其他数据类型都转化成字符串类型后,再调用write方法输出。
所以,我们输出要用out.print()

四大域对象

pageContext (当前jsp页面范围内有效)
application (整个web工程运行时都有效)
session (一个会话范围内有效)
request ( 一次请求内有效)
域对象可以存取数据
四个域对象的功能基本一样,不同的是数据的存取范围。

jsp语法

  • 指令元素

用于jsp发送一个信息到容器,设置全局变量,文字编码,引入包了

page指令:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

属性:
language 表示jsp翻译后是什么语言,暂时只支持java
contentType 表示jsp返回的数据类型。response.setcontentType()参数值
pageEncoding 当前jsp文件的字符集
import 和java一样,用于导包导类

session=true/false
是否在jsp页面给你获取session对象,默认是true

errorPage=" "
当页面出错时,跳转到指定jsp页面
以下属性为out输出流使用
autoFlash buffer满后,是否自动刷新浏览器,默认是true

buffer=none/8k/指定大小
给out对象使用的缓冲区是多大,默认8k

contentType="text/html ;charset= utf-8"和 pageEncoding="UTF-8区别
前者只能指定网页以什么形式显示页面
后者指定servlet引擎用什么方式翻译jsp,并指定网页以什么形式显示页面

include指令:

<%@ include file="文件路径" %>

该指令用于引入一个文件

  • 脚本元素

声明脚本:<%! %>
可以声明类属性,类方法,内部类

java代码脚本

<% java片段 %>

翻译后java文件中jspservice()内的代码都可以写
和表达式脚本一起用,输出数据到页面。
表达式脚本:在jsp页面上输出数据

<%=表达式 %>

表达式可以是整型,浮点型,字符串,对象,最后不要写分号
所有表达式脚本都会翻译到 jspservice()方法中
表达式脚本最后都会被翻译成为out.print()输出
jspservice()方法中的对象都可以直接使用(request,response,session)
一个小案例:

<%! int i=10; %>
out.println();
<%
	int j=20;//局部变量
	out.println("i="+(++i)+"j="+(++j));
%>

第一次访问结果i=11 j=21
第二次访问结果i=12 j=21
第三次访问结果i=13 j=21

  • 动作元素
    请求转发
<jsp:forward page=" "></jsp:forward>

<jsp:forward file= >
在开发jsp中,我们通常把jsp放入web-inf目录,可以增强安全性,设置入口,跳转进来。

<jsp:include file= “文件路径”> 和 <%@ include file=“文件路径” %>区别
前者时候动态引入,后者是静态引入,这两个常常用来解决很多页面共同的部分的内容。
静态引入把两个jsp翻译成一个servlet,动态引入把两个jsp分别翻译。
动态引入可以传递参数

<jsp:include page="">
<jsp:param value="" name=""/>
</jsp:include>

不过,现在一般使用静态包含。
jsp文件注释

  1. <!-内容–>
  2. <%–内容–%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值