JSP
layout: post
title: JSP
subtitle: 用法
date: 2018-04-22
author: ZL
header-img: img/20180422.jpg
catalog: true
tags:
- JSP
JSP和Servlet
Jsp就像是html文件,但是不同的是,在jsp中可以写java的代码。
就像这样:
servlet是java代码,但是可以在里面写html代码,但是非常麻烦。
就像这样:
image
jsp的本质就是servlet。jsp在第一次被访问时会被Web容器翻译成servlet
第一次访问---->helloServlet.jsp---->helloServlet_jsp.java---->编译运行
jsp脚本和注释
-
jsp脚本:
- <%java代码%> ----- 内部的java代码翻译到servlet的service方法的内部
- <%=java变量或表达式> ----- 会被翻译成servlet的service方法内部out.print(java变量或表达式)
- <%!java代码%> ---- 会被翻译成servlet的成员的内容
-
jsp注释:
- Html注释: ---可见范围 jsp源码、翻译后的servlet、页面 显示html源码
- java注释://单行注释 /多行注释/ --可见范围 jsp源码 翻译后的servlet
- jsp注释:<%--注释内容--%> ----- 可见范围 jsp源码可见
jsp指令
-
page指令
这个指令就是在jsp的头部的一些信息。- 就像这样:
image - 常用属性说明
language:jsp脚本中可以嵌入的语言种类
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session对象
import:导入java的包
errorPage:当 当前页面出错后跳转到哪个页面
isErrorPage:当前页面是否是一个处理错误的页面
- 就像这样:
-
include指令
页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中。就像Android的xml里面的include,把别的的内容包含到本页面中去。
格式:<%@ include file="被包含的文件地址"%>
-
taglib指令
在jsp页面中引入标签库(jstl标签库、struts2标签库)
格式:<%@ taglib uri="标签库地址" prefix="前缀"%>
jsp内置/隐式对象(9个)
jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp 脚本中可以不用获取,直接使用这9个对象。
-
内容
名称 类型 描述 out javax.servlet.jsp.JspWriter 用于页面输出 request javax.servlet.http.HttpServletRequest 得到用户请求信息 response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息 config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数 session javax.servlet.http.HttpSession 用来保存用户的信息 application javax.servlet.ServletContext 所有用户的共享信息 page java.lang.Object 指当前页面转换后的Servlet类的实例 pageContext javax.servlet.jsp.PageContext JSP的页面容器 exception java.lang.Throwable 表示JSP页面所发生的异常,在错误页中才起作用
- 部分内容附加说明
-
out
out作用就是想客户端输出内容----out.write()
通过out.write()写内容就是先把内容写到out缓冲区,然后再放到response缓冲区。
out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲器。 -
pageContext
pageContext对象和page对象并不是一回事。
-
通过pageContext可以获取到其他8个隐式对象。
比如:pageContext.getRequest() pageContext.getSession() pageContext.getRequest(); pageContext.getOut();
-
pageContext是一个域对象
setAttribute(String name,Object obj) getAttribute(String name) removeAttrbute(String name) pageContext可以向指定的其他域中存和取数据 setAttribute(String name,Object obj,int scope) getAttribute(String name,int scope) removeAttrbute(String name,int scope) findAttribute(String name) ---依次从pageContext域,request域,session域,application域中获 取属性,在某个域中获取后将不在向后寻找
-
-
四大作用域
- page域:当前jsp页面范围
- request域:一次请求
- session域:一次会话
- application域:整个web应用
page<request<session<application
jsp标签
-
请求转发:
<jsp:forward page="要转发的资源" />
-
页面包含:
<jsp:include page="被包含的页面"/>
前面的include是静态包含,这里的是动态包含。
image
部分代码实例
-
利用pageContext向page域、request域、session域、application域存数据
pageContext.setAttribute("name", "sunba"); pageContext.setAttribute("name", "lisi", PageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "wangwu", PageContext.SESSION_SCOPE); pageContext.setAttribute("name", "tianqi", PageContext.APPLICATION_SCOPE);
-
引入jstl核心库
<!-- 引入jstl核心库 --> <%@ taglib uri="http://" prefix="c"%> <%@ taglib uri="http://" prefix="fmt"%>
-
静态包含
<%@ include file="/demo.jsp" %>
-
动态包含
<jsp:include page="/include2.jsp"></jsp:include>
-
请求转发(和request的请求转发功能一样)
<jsp:forward page="/forward2.jsp"></jsp:forward>