jsp简介

  • JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。
  • jsp: 作为请求发起页面,例如显示表单、超链接。 
    : 作为请求结束页面,例如显示数据。
  • Servlet: 
    作为请求中处理数据的环节。
  • jsp的组成 
    • jsp = html + java脚本 + jsp标签(指令)
    • jsp中可直接使用的对象一共有9个,被称之为9大内置对象
  • 3种java脚本: 
    <%…%>:写java代码片段,(类似方法) 
    <%=…%>:用于输出,用于输出一条表达式(或变量)的结果。 
    <%!…%>:声明,用来创建类的成员变量和成员方法(类似与类)
  • jsp注释:<%– … –%> 
    当服务器把jsp编译成java文件时已经忽略了注释部分!

jsp原理(看源码)

  • jsp其实是一种特殊的Servlet

    • 当jsp页面第一次被访问时,服务器会把jsp编译成java文件
    • 然后再把java编译成.class
    • 然后创建该类对象
    • 最后调用它的service()方法
    • 第二次请求同一jsp时,直接调用service()方法。

jsp三大指令

page

<%@page language=”java” info=”xxx”…%>**

  • pageEncoding和contentType: 
    pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! 
    contentType:它表示添加一个响应头:Content-Type!等同与response.setContentType(“text/html;charset=utf-8”); 
    如果两个属性只提供一个,那么另一个的默认值为设置那一个。 
    如果两个属性都没有设置,那么默认为iso
  • import:导包!可以出现多次
  • errorPage和isErrorPage 
    errorPage:当前页面如果抛出异常,那么要转发到哪一个页面,由errorPage来指定 
    isErrorPage:它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!
  1. <error-page>有两种使用方式:
  2. <error-code><location>子元素;
  3. <exception-type><location>子元素;
  4. 其中<error-code>是指定响应码;<location>指定转发的页面;<exception-type>是指定抛出的异常类型。
  1. <error-page>
  2. <error-code>404</error-code>
  3. <location>/error/errorPage.jsp</location>
  4. </error-page>
  5. <error-page>
  6. <exception-type>java.lang.RuntimeException</exception-type>
  7. <location>/index.jsp</location>
  8. </error-page>
  • autoFlush和buffer

    autoFlush:指定jsp的输出流缓冲区满时,是否自动刷新!默认为true,如果为false,那么在缓冲区满时抛出异常! 
    buffer:指定缓冲区大小,默认为8kb,通常不需要修改!

  • isELIgnored:是否忽略el表达式,默认值为false,不忽略,即支持!
  • (以下了解即可): 
    language:指定当前jsp编译后的语言类型,默认值为java。 
    info:信息! 
    isThreadSafe:当前的jsp是否支持并发访问! 
    session:当前页面是否支持session,如果为false,那么当前页面就没有session这个内置对象! 
    extends:让jsp生成的servlet去继承该属性指定的类!

include –> 静态包含

  • 与RequestDispatcher的include()方法的功能相似!
  • <%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!
  • RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!
  • 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。

taglib –> 导入标签库

  • 两个属性:

    prefix:指定标签库在本页面中的前缀!由我们自己来起名称! 
    uri: 指定标签库的位置! 
    <%@taglib prefix=”s” uri=”/struts-tags”%> 前缀的用法<s:text>

九大内置对象

  • 在jsp中无需声明即可直接使用的9个对象

    • out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
    • config(ServletConfig):对应“真身”中的ServletConfig;
    • page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象,引用为Object类型;
    • pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
    • exception(Throwable):只有在错误页面中可以使用这个对象;
    • request(HttpServletRequest):即HttpServletRequest类的对象;
    • response(HttpServletResponse):即HttpServletResponse类的对象;
    • application(ServletContext):即ServletContext类的对象;
    • session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
  • pageContext(一个顶9个!) 
    • Servlet中有三大域,而JSP中有四大域! 
      ServletContext:整个应用程序 
      session:整个会话(一个会话中只有一个用户) 
      request:一个请求链! 
      pageContext:一个jsp页面!这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据! 
      域对象 
      代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE); 
      全域查找:pageContext.findAttribute(“xxx”);从小到大,依赖查找! 
      获取其他8个内置对象:

JSP动作标签

动作标签是由tomcat(服务器)来解释执行!而html标签由浏览器来执行!

  • <jsp:include> 
    例如:<jsp:include page="xxx"/>,用来包含指定的页面。假如有两个jsp. 分别为a.jsp和b.jsp,他们分别编码成Servlet,然后在执行Servlet时才会执行包含过程。这也是include指令与include标签的区别。

    • 注意:<jsp:include page="<%=myfile%>">,这是可以的!因为include指令是在执行时才完成的包含,在执行时已经可以确定myfile这个变量的值。
    • 该标签内部使用的是RequestDispatcher#include()方法完成的包含
  • <jsp:forward> 
    例如:<jsp:forward page="xxx"/>,用来转发到指定页面 
    例如在a.jsp中存在如下内容:<jsp:fowrad page="b.jsp"/> 
    a.jsp中的内容不会显示在浏览器上,而只是显示b.jsp的内容。而且在<jsp:forwad>标签下面的内容不会被执行。
  • <jsp:param> 
    该标签是和的子标签,用来向其他页面传递参数。
  1. <jsp:include page="/b.jsp">
  2. <jsp:param value="zhangSan" name="username"/>
  3. </jsp:include>

在b.jsp中可以使用request.getParameter(“username”)来获取参数值。

javaBean

  • 必须有public的无参的构造器
  • 如果成员变量提供了getter/setter方法,那么称之为javabean属性。

JavaBean主要是用来通过反射操作的类! 
因为需要通过Class的newInstance()方法来创建类的实例,所以要求类必须提供public的无参构造器

  1.  

JSP中与JavaBean相关的标签

  • <jsp:useBean>
  • <jsp:setProperty>
  • <jsp:getProperty>
  1. <jsp:useBean id="user1" class="cn.domain.User" />

查看page域中是否存在user1这个域属性,如果存在,那么直接获取。 
如果不存在,那么创建之! 
等同与: 
User user1 = pageContext.getAttribute(“user1”); 
if(user1 == null) { 
user1 = new User();//创建user1对象 
pageContext.setAttribute(“user1”, user1);//保存到page域 
}

  • 可以通过scope属性来指定操作

    设置属性值:

  1. <jsp:setProperty property="username" name="user1" value="admin"/>
  • name:指定名为user1的JavaBean
  • property:指定要设置的属性名称
  • value:指定要设置的属性值 
    等同与 
    User user1 = (User)pageContext.getAttribute(“user1”); 
    user1.setUsername(“admin”);
  1. **<jsp:getProperty>**

获取属性值

  1. <jsp:getProperty property="username" name="user1"/>

输出user1这个javaBean的username属性值

等同与 
User user1 = (User)pageContext.getAttribute(“user1”); 
out.print(user1.getUsername());

#学习笔记#jsp的更多相关文章

  1. #学习笔记#JSP数据交互

    #学习笔记#JSP数据交互 数据库的使用方式:   当用户在第一个页面的查询框输入查询语句点提交的时候我们是用什么样的方式完成这个查询的? 答:我们通过在第一个页面提交表单的形式,真正的数据库查询时在 ...

  2. 学习笔记|JSP教程|菜鸟教程

    学习笔记|JSP教程|菜鸟教程 ------------------------------------------------------------------------------------ ...

  3. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

  4. JavaWeb学习笔记——jsp基础语法

    1.JSP注释 显式注释 <!-- 注释内容 --> 隐式注释,隐式注释在客户端无法看见 // /* */ <% 注释内容 %> 2.Scriptlet(小脚本程序) 所有嵌入 ...

  5. Struts2学习笔记-jsp中引用struts2框架

    如果在jsp中需要引用struts2 框架,需在前面加上以下内容 <%@taglib prefix="s" uri="/struts-tags" %> ...

  6. Java Web学习笔记--JSP for循环

    JSP for循环 <%@ page language="java" contentType="text/html; charset=UTF-8" %&g ...

  7. java web 学习笔记 jsp内置对象

    jsp2 表达式语言的内置对象 使用方式${object.attributename} 或者${object["attributename"]} pageContext pageS ...

  8. java web学习笔记-jsp篇

    1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,ja ...

  9. 1.4(学习笔记)JSP自定义标签

    一.JSP自定义标签 JSP自定义标签,可以通过实现Tag接口.继承TagSupport类来设置标签功能. 后续通过配置文件将标签和具体的实现类关联. 二.自定义第一个标签(实现Tag接口) 自定义标 ...

随机推荐

  1. Jupyter Notebook插入图片的4种方法

    来自:https://blog.csdn.net/qq_33039859/article/details/78507316 方法1: ![title](img/python.png) Markdown ...

  2. Linux下设置svn开机自启动

    方式一:centos 7 设置svn开机自启动 使用新的systemctl 服务命令  (笔者成功验证过,该方式可行) [root@iZjvr37lpviqbkZ init.d]# vi /lib/s ...

  3. kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries. 最无语的配置

    注意: 本文不谈废话,低级问题请自行检查. 我使用Java版本的Kafka Producer生产数据,但是抛出了这个异常.百思不得其解,明明防火墙配置,ZooKeeper,Kafka配置都是没问题的啊 ...

  4. 手机端页面可以左右轻微拖动的bug

    在做项目的时候,必须要适应各种屏幕,移动端是必须的. 但是在移动端中,网站是左右可以动,怎么办呢? 这是只要在样式表中写入 html,body{overfow-x:hidden;} bug产生在H5的 ...

  5. Java-Mail邮件开发

    Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务. 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互 ...

  6. 使用nginx实现负载均衡的配置

    #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...

  7. react-thunk的使用流程

    react-thunk作用:使我们可以在action中返回函数,而不是只能返回一个对象.然后我们可以在函数中做很多事情,比如发送异步的ajax请求. 这就是react-thunk的使用方法.接受一个d ...

  8. react-router解决锚点跳转问题

    添加一个onClick方法.onClick方法传入一个锚点的id,然后用下面的函数来找到锚点并跳转到锚点. scrollToAnchor = (anchorName) => { if (anch ...

  9. springmvc文件上传示例

    首先要导包,用的的包是: commons-fileupload-*.*.*.jar commons-io-*.*.jar *号代表版本号 这里给大家分享一下下载链接:https://files.cnb ...

  10. Python之路-文件操作(py3)

    文件操作的基本步骤: 1.打开文件:f=open('filename'),with open('filename') as f 2.操作文件:增,删,改,查 3.关闭文件:f.close 打开文件 p ...