jsp知识

jsp知识

JSP基础知识

JSP全称Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。

  • 什么是jsp

从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Servlet.

  • 为什么会有jsp?

html 多数情况下用来显示静态内容 , 一成不变的。 但是有时候我们需要在网页上显示一些动态数据, 比如: 查询所有的学生信息, 根据姓名去查询具体某个学生。 这些动作都需要去查询数据库,然后在网页上显示。 html是不支持写java代码 , jsp里面可以写java代码。

  • 动态网页

所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。

不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。

jsp注释

语法描述
<%-- 注释 --%>JSP注释,注释内容不会被发送至浏览器甚至不会被编译
< !-- 注释 -->HTML注释,通过浏览器查看网页源代码时可以看见注释内容

总结
jsp的注释不会显示在源码上,更加安全 , 所以在jsp页面中推荐使用jsp的注释。

JSP生命周期

在这里插入图片描述

  • 编译阶段
    当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

    • 解析JSP文件
    • 将JSP文件转为Servlet
    • 编译Servlet文件
  • 初始化阶段
    加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

// 可以重写此方法,添加初始化逻辑
public void _jspInit() {
}
  • 执行阶段
    调用与JSP对应的servlet实例的服务方法
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {
  // 分发请求
  // doGet
  // doPost
}
  • 销毁阶段
// 可以重写此方法,添加销毁操作
public void _jspDestroy() {
}

从一个JSP页面到用户能够在浏览器上看到页面效果需要经历几个阶段: JSP ->(Tomcat容器负责) JAVA -> class -> 浏览器(HTML)

jsp书写java代码的三种方式

Java代码片段

① 脚本片段格式
格式:<% Java代码片段 %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> <head><title>书写java代码的三种方式</title> </head> 
<body>
<% int x = 10; %> 
</body> 
</html>

②脚本片段作用

在jsp翻译后的_jspService方法中,嵌入java代码

③ 脚本片段使用注意事项
脚本片段可以分开书写,最终是组合在一起的,示例:
脚本片段内容

<% for(int j = 0 ; j < 5 ;j++){%> 
Hello World!!!<br> 
<%}%>
JSP声明变量、方法
<%! 

  private int age = 0;
	
	public void sayHello() {
     out.println("Hello World!");
  }
  
%>

注:这种使用频率非常低

JSP表达式
<%=age %>

三大JSP指令

  • page
  • include
  • taglib

指令写法

<%@ 指令名字 属性名=“属性值” %>

page指令
  • language
    表明jsp页面中可以写java代码
  • contentType
    其实是说这个文件是什么类型,告诉浏览器我是什么内容类型,以及使用什么编码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
  • pageEncoding jsp内容编码
  • extends 用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改。

注意:如果指定了此属性, 要继承的这个父类必须继承默认的HttpJspBase(因为Java只能继承一个类),否则JSP页面无法运行

  • import 导包使用的,一般不用手写。
  • session

值可选的有true or false .
用于控制在这个jsp页面里面,能够直接使用session对象。
具体的区别是,请看翻译后的java文件 如果该值是true , 那么在代码里面会有getSession()的调用,如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。

  • errorPage
    指的是错误的页面, 值需要给错误的页面路径
  • isErrorPage
    上面的errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。
include指令

包含另外一个jsp的内容进来。
<%@ include file=“other02.jsp”%>
:把另外一个页面的所有内容拿过来一起输出。 所有的标签元素都包含进来。

taglib

作用:用于引入标签库
语法:<%@ taglib prefix="" uri=""%>
uri: 标签库路径
prefix : 标签库的别名

JSP 动作标签

使用语法:

<jsp:动作标签名称 属性1="属性值"  [属性2="属性值" 属性2="属性值"... ] />

七大动作标签

jsp:include
<jsp:include page="other02.jsp"></jsp:include>

包含指定的页面, 这里是动态包含。 也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。

jsp:forward
<!-- 不带参数跳转 -->
<jsp:forward page="test.jsp"></jsp:forward>
<jsp:forward page="test.jsp" />

<!-- 带参数跳转 -->
<!-- 中文参数会出现乱码,因为底层是通过URIEncoding来编码的,默认取的是request.getCharsetEncoding() , 要解决此乱码问题,我们需要再跳转前设置 request.setCharsetEncoding("UTF-8");
-->
<% request.setCharsetEncoding("UTF-8"); %>
<jsp:forward page="test.jsp">
	<jsp:param name="sname" value="zhangsan" />
</jsp:forward>

<!-- 如果这样写,中间必须加上param子标签 -->
<jsp:forward page="test.jsp">
</jsp:forward>

前往哪一个页面。

jsp:param

意思是: 在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数。

<jsp:forward page="other02.jsp">
  <jsp:param value="beijing" name="address"/>
</jsp:forward>

在other02.jsp中获取参数

<br>收到的参数是:<br>

<%= request.getParameter("address")%>
jsp:useBean&jsp:setProperty&jsp:getProperty

这组动作标签用于实例化JavaBean,并且设置、获取属性
这三个标签当成bean包中setterXX和getterXX来理解

<jsp:useBean id="stu" class="com.lanou3g.demo.bean.Student" />
<jsp:setProperty name="stu" property="sname" value="张三" />
<jsp:getProperty property="sname" name="stu"/>

JSP九大内置对象

所谓内置对象,就是我们可以直接在jsp页面中使用这些对象。 不用创建。
九大内置对象

request【javax.servlet.http.HttpServletRequest】

作用:向服务端请求数据

方法名说明
isUserInRole判断认证后的用户是否属于某一成员组
getAttribute获取指定属性的值,如该属性值不存在返回Null
getAttributeNames获取所有属性名的集合
getCookies获取所有Cookie对象
getCharacterEncoding获取请求的字符编码方式
getContentLength返回请求正文的长度,如不确定返回-1
getHeader获取指定名字报头值
getHeaders获取指定名字报头的所有值,一个枚举
getHeaderNames获取所有报头的名字,一个枚举
getInputStream返回请求输入流,获取请求中的数据
getMethod获取客户端向服务器端传送数据的方法
getParameter获取指定名字参数值
getParameterNames获取所有参数的名字,一个枚举
getParameterValues获取指定名字参数的所有值
getProtocol获取客户端向服务器端传送数据的协议名称
getQueryString获取以get方法向服务器传送的查询字符串
getRequestURI获取发出请求字符串的客户端地址
getRemoteAddr获取客户端的IP地址
getRemoteHost获取客户端的名字
getSession获取和请求相关的会话
getServerName获取服务器的名字
getServerPath获取客户端请求文件的路径
getServerPort获取服务器的端口号
removeAttribute删除请求中的一个属性
setAttribute设置指定名字参数值
response 【javax.servlet.http.HttpServletResponse】

作用:封装了jsp产生的响应,然后被发送到客户端以响应客户的请求

方法名说明
addCookie添加一个Cookie对象
addHeader添加Http文件指定名字头信息
containsHeader判断指定名字Http文件头信息是否存在
encodeURL使用sessionid封装URL
flushBuffer强制把当前缓冲区内容发送到客户端
getBufferSize返回缓冲区大小
getOutputStream返回到客户端的输出流对象
sendError向客户端发送错误信息
sendRedirect把响应发送到另一个位置进行处理
setContentType设置响应的MIME类型
setHeader设置指定名字的Http文件头信息
pageContext 【javax.servlet.jsp.PageContext】

主要作用有两个:

  1. 获取其他内置对象
  2. 作为作用域,范围:当前页面
方法名说明
forward重定向到另一页面或Servlet组件
getAttribute获取某范围中指定名字的属性值
findAttribute按范围搜索指定名字的属性
removeAttribute删除某范围中指定名字的属性
setAttribute设定某范围中指定名字的属性值
getException返回当前异常对象
getRequest返回当前请求对象
getResponse返回当前响应对象
getServletConfig返回当前页面的ServletConfig对象
getServletContext返回所有页面共享的ServletContext对象
getSession返回当前页面的会话对象
session 【javax.servlet.http.HttpSession】

作用:用来保存每个用户的信息,以便跟踪每个用户的操作状态

方法名说明
getAttribute获取指定名字的属性
getAttributeNames获取session中全部属性名字,一个枚举
getCreationTime返回session的创建时间
getId获取会话标识符
getLastAccessedTime返回最后发送请求的时间
getMaxInactiveInterval返回session对象的生存时间单位千分之一秒
invalidate销毁session对象
isNew每个请求是否会产生新的session对象
removeAttribute删除指定名字的属性
setAttribute设定指定名字的属性值
application 【javax.servlet.ServletContext】

作用:对应ServletContext对象, 在整个应用的生命周期内共享数据

方法名说明
getAttribute获取应用对象中指定名字的属性值
getAttributeNames获取应用对象中所有属性的名字,一个枚举
getInitParameter返回应用对象中指定名字的初始参数值
getServletInfo返回Servlet编译器中当前版本信息
setAttribute设置应用对象中指定名字的属性值
out 【javax.servlet.jsp.JspWriter】

作用:向客户端输出数据

方法名说明
print或println输出数据
newLine输出换行字符
flush输出缓冲区数据
close关闭输出流
clear清除缓冲区中数据,但不输出到客户端
clearBuffer清除缓冲区中数据,输出到客户端
getBufferSize获得缓冲区大小
getRemaining获得缓冲区中没有被占用的空间
isAutoFlush是否为自动输出

config 【javax.servlet.ServletConfig】

作用:表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet

方法名说明
getServletContext返回所执行的Servlet的环境对象
getServletName返回所执行的Servlet的名字
getInitParameter返回指定名字的初始参数值
getInitParameterNames返回该JSP中所有的初始参数名,一个枚举
page 【java.lang.Object】

它代表JSP被编译成Servlet,可以使用它来调用Servlet类中所定义的方法

exception 【java.lang.Throwable】

被调用的错误页面的结果,只有在错误页面中才可使用,

即在页面指令中设置:<%@page isErrorPage=“true”%>

四个作用域

表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute
jsp四大作用域

使用作用域来存储数据
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
取出四个作用域中的值
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>

作用域范围大小:

pageContext – request — session – application

四个作用域的区别

  • pageContext 【PageContext】

作用域仅限于当前的页面。

除了可以存储数据, 还可以获取其他8个内置对象

  • request 【HttpServletRequest】

作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。

  • session 【HttpSession】

作用域限于一次会话(多次请求与响应) 当中。

  • application 【ServletContext】

整个工程都可以访问, 服务器关闭后就不能访问了。
在java程序中叫ServletContext;在jsp中叫application。一个意思两种叫法

常与el和jstl表达式一起使用见下篇el和jstl表达式

HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
JSP技术所开发的Web应用程序是基于Java的,本质上就是一个Servlet , 它可以用一种简捷而快速的方
法从Java程序生成Web页面,其使用上具有如下几点特征:

  • 跨平台:由于JSP是基于Java语言的,它可以使用Java API,所以它也是跨平台的,可以应用于不同的系统中,如Windows、Linux等。当从一个平台移植到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码是与平台无关的,这也应验了Java语言“一次编译,到处
    运行”的特点
  • 业务代码相分离:在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容。在服务器端,JSP引擎(或容器,本书中指Tomcat)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结
    果以HTML页面的形式返回到浏览器。
  • 组件重用:JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean类封装业务处理代码
    或者作为一个数据存储模型,在JSP页面中,甚至在整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中。
  • 预编译:预编译就是在用户第一次通过浏览器访问JSP页面时,服务器将对JSP页面代码进行编译,
    并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。
    这样不仅节约了服务器的CPU资源,还大大的提升了客户端的访问速度。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值