JSP基本使用

JSP简述

  • JSP全称Java Server Pages,是一种动态网页开发技术。标签通常以<%开头以%>结束。
  • JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
  • JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
  • JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
  • 和Servlet一样,是SUN公司定义的一种动态网页开发技术。
  • 特点:基于HTML模版,可以在HTML模版嵌入Java代码和JSP中的标签。
  • 注意:通过查看生成源码,发现所有的jsp页面都变成类, (文件名_jsp.java),类继承HttpJspBase, HttpJsbBase又继承HttpServlet,所有的jsp页面都是Servlet。

为什么使用JSP

  • JSP性能好,可以在HTML页面中动态嵌入元素
  • 服务器调用的是已经编译好的JSP文件
  • JSP基于Java Servlet API有很多强大企业的支持。
  • JSP可以与处理业务逻辑的Servlet一起使用,该模式被Java Servlet模版引擎所支持。

JSP优势

  • 与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
  • 与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
  • 与静态HTML相比:静态HTML不包含动态信息

JSP生命周期

  • JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
  • 以下是JSP生命周期中所走过的几个阶段:
    1. 编译阶段:
    • servlet容器编译servlet源文件,生成servlet类 2. 初始化阶段:
    • 加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法 3. 执行阶段:
    • 调用与JSP对应的servlet实例的服务方法 4. 销毁阶段:
    • 调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

JSP语法

JSP语法格式

  • JSP页面中可以包含指令,Java语句、变量、方法或表达式、静态内容(html、css、javascript)
  • 指令:
    • <%@ page language=”java” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8”%>
  • 脚本:
    • <% java代码 %>
  • 脚本表达式:
    • 输出变量:<%=2+3%>等价于输出语句 (注意:不能使用分号来结束表达式)
  • 声明:
    • <%! 定义方法 %>
  • 静态资源:HTML、CSS、JS

JSP注释

  • 格式:<%-- 网页注释 --%> 安全,省流量,用户看不到
  • 网页注释:<!-- 网页注释 --> 不安全,耗流量 ,用户可以看到

JSP指令

  • 告诉JSP引擎如何解析jsp文件中的内容
    • 语法:<%@ 指令名称 属性名称1=”属性值1” 属性名称2=”属性值2” …%>
  • page指令
    • 作用:用于定义JSP页面的各种属性。
    • import:和java代码的含义一样
    • session:是否会自动创建session对象,默认值为true
    • buffer:JSP中有java.servlet.jsp.JspWriter输出字符流。设置输出数据的缓存大小。默认8kb.
    • errorPage:如果页面中有错误,跳转到指定的资源 errorPage=”/uri” 如果写“/”则代表当前应用的目录下绝对路径。如果不写“/”则代表相对路径。(这个一般不用,基本都在web.xml下写错误拦截页面)
    • isErrorPage:是否创建throwable对象。默认是false
    • contentType:等同于response.setContentType(“text/html;charset=utf-8”);服务器发送客户端的内容编码
    • pageEncoding:Jsp文件本身的编码
    • isELIgnored:是否支持EL表达式。默认是false,支持表达式;是true表示不支持表达式
  • include指令
    • 静态包含:把其它资源包含到当前页面中 <%@ include file=”header.jsp” %>
    • 动态包含:<jsp:include page="header.jsp"></jsp:include>
    • 两者的区别:翻译的时间段不同(可在tomcat工作目录下查看)
    • 静态包含:在翻译时就把两个文件进行合并,运行时效率高。属于同一个页面。
    • 动态包含:不会合并文件,当代码执行到include时,才包含另一个文件的内容。不属于同一个页面
  • taglib指令
    • 作用:在JSP页面中导入JSTL标签库。JSTL替换jsp中的java代码片段。
    • <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>

JSP的6个动作标签

  • jsp:include 动态包含
  • jsp:forward 请求转发
  • jsp:param 请求设置参数
    • 注意:主页面中设置编码类型utf-8,jsp:param的value属性才可以使用中文,不然会乱码
  • jsp:useBean 创建一个对象
  • jsp:setProperty 给指定的对象属性赋值
  • jsp:getProperty 取出指定的对象属值

JSP 九个内置对象

对象名 类型 说明
request javax.servlet.http.HttpServletRequest  
response javax.servlet.http.HttpServletResponse  
session javax.servlet.http.HttpSession 由session=“true”开关
application javax.servlet.ServletContext  
config javax.servlet.ServletConfig  
exception java.lang.Throwable 由isErrorPage=“false”开关
out javax.servlet.jsp.JspWriter javax.servlet.jsp.JspWriter
pageContext javax.servlet.jsp.PageContext  
page java.lang.Object当前对象this 当前servlet实例

jsp的out和getWriter()方法的区别

  • out是JspWriter类型,getWriter()是PrintWriter类型
  • out输出到缓冲区中,没有写到response中,getWriter()直接写到response中。
  • out一般用在jsp中,getWriter()用在Servlet中

pageContext对象

pageContext作用:

  • 代表页面上下文,可以获取其他八个内置对象 (下面详细介绍)
  • 作用容器使用

域对象

  • jsp中共包含四个域对象分别是request、session、application、pageContext
  • request域的使用场景:本次请求之后,数据就不再使用了,根据学号查询学生,根据新闻id查询新闻。
  • session域的使用场景:同一个会话中共享的数据,使用session,用户登录信息
  • application域的使用场景:所有用户共享的数据。整个程序的配置信息
  • pageContext域的使用场景:当前页面(使用域最小,但是权限大)
  • 其中pageContext可以操作其他三个域对象(request,session,application)的数据
  void setAttribute(String name,Object o);>   Object getAttribute(String name);
  void removeAttribute(String name);

  操作其它域对象的方法
  void setAttribute(String name,Objecto,int Scope);
  Object getAttribute(String name,intScope);
  void removeAttribute(String name,intScope);
  Scope作用域,值如下:
  PageContext.PAGE_SCOPE
  PageContext.REQUEST_SCOPE
  PageContext.SESSION_SCOPE
  PageContext.APPLICATION_SCOPE

  findAttribute(Stringname)
  自动从pageContext,request ,session ,application依次查找,找到了就取值,结束查找  (作用域的范围由小到大)

它可以访问其它的8个内置对象

  • 普通类中可以通过PageContext获取其它JSP隐式对象,具体如下:
    • getException方法返回exception隐式对象
    • getPage方法返回page隐式对象
    • getRequest方法返回request隐式对象
    • getResponse方法返回response隐式对象
    • getServletConfig方法返回config隐式对象
    • getServletContext方法返回application隐式对象
    • getSession方法返回session隐式对象
    • getOut方法返回out隐式对象

提供了简易方法

  • pageContext.forward(“xxx.jsp”);//转发
  • request.getRequestDispatcher().forward();
  • pageContext.include(“xxx.jsp”);//动态包含

参考


转载请注明:Memory的博客 » 点击阅读原文

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦