文档章节

JSP基础概要

sdksdk0
 sdksdk0
发布于 2016/11/13 22:17
字数 1628
阅读 7
收藏 0

[版权申明:本文系作者原创,转载请注明出处]
文章出处:http://blog.csdn.net/sdksdk0/article/details/51925232
作者:朱培 ID:sdksdk0


一、JSP简介

JSP全名为Java Server Pages,中文名叫java服务器页面。是一种用于开发动态web资源的技术。允许用户嵌套html和java代码。JSP实际上就是servlet。

JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

重点在于显示数据。

二、JSP的原理

jsp页面中的java代码服务器是如何执行的?

  • 1、从浏览器输入地址,
  • 2、浏览器拿到这个地址然后去Tomach中进行查找,找到demo1.jsp,
  • 3、到work/catalina/localhost/JSP中招demo1.class文件,
  • 4、如果没有找到,就把demo1.jsp翻译为demo1.java文件
  • 5、把demo1.java编译为demo1.class文件
  • 6、执行servlet。

web服务器在执行jsp页面时,是如何把jsp页面中的html标签发送到客户端的?
通过标签中的等部分。out.write方法写(如下图)。
jsp输出模板内容:把html内容翻译到对应servlet的service方法中,由一个JspWriter的对象进行输出。
在tomach中经过转换的demo1.java文件中的内容。
这里写图片描述

web服务器在调用jsp时,会提供jsp一些什么java对象?
pageContext、HttpSession、ServletContext、ServletConfig等

三、JSP基本语法

3.1 脚本表达式

3.2 JSP脚本

3.3 JSP声明

语法:
<%!
java代码

%>
作用:定义jsp对应类的成员。

3.4 JSP注释

语法:<%– 这是注释 –%>
作用:注释JSP中的代码

注意:它的作用和HTML注释的作用是完全不同的。JSP注释根本不会被翻译到servlet中,而HTML注释是把代码运行后的结果注释掉,运行效率低。

四、JSP的指令

4.1 page

<% @指令名称  属性1="值1"  属性2="值2"  %>

page指令无论出现在jsp页面中什么地方,它的作用都是整个jsp页面。

作用:
import:导入jsp中的java类,默认导入lang.*,servlet.*jar包。

<%@page import="java.util.Date,java.util.List" %>

buffer:jsp页面中有一个字符输出流java.servlet.jsp.JspWriter,它的缓存大小默认为8kb.

errorPage:当当前JSP页面发生异常时转向(转发)的一个地址,如果地址以”/”开头,/代表当前应用,绝对路径。不以/开头,表示相对路径。

 <error-page>
   <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

isErrorPage:是否产生Throwable对象,默认是false.
<%=exception.getMessage() %>

contentType:指示响应正文的MIME类型和编码.

pageEncoding:JSP引擎读取JSP文件时使用的编码。

isELIgnored:是否忽略EL表达式。默认值是false,不忽略.

4.2 include

静态包含:

<%@include  file="/index.jsp" %>

动态包含:

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

4.3 taglib

导入外部标签库,替换jsp中的java片段。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

五、JSP的九大隐式对象

5.1 分类

指在jsp的<%=%>和<% %>可以直接使用的对象。

request、response、session、exception、application、config、page、out、pageContext

这里写图片描述

5.2 pageContext

本身是一个域对象,还能操作其他三个域对象(ServletRequest、HttpServlet、ServletContext)中的数据。

操作其他三个域对象:

PageContext.PAGE_SCOPE|PageContext.REQUEST_SCOPE|PageContext.SESSION_SCOPE|PageContext.APPLICATION_SCOPE

  • void setAttribute(String name,Object v,int Scope);
  • Object getAttribute(String name,int Scope);
  • void removeAttribute(String name,int Scope);

pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。

六、JSP的四大域对象

  1. PageContext:存放的数据只能当前页面使用。
  2. ServletRequest:存放的数据可以通过转发传递给下一个转发目标。
  3. HttpServlet:存放的数据可以同一次会话中取出。例如:登陆,购物车信息等
  4. ServletContext:存放的数据被整个应用所共享。

七、内置标签

jsp:include:动态包含

jsp:forward:请求转发
jsp:param:结合以上标签使用。

    <jsp:forward page="pageContext/demo2.jsp"  >
    <jsp:param  value="abc"  name="username"   />
    <jsp:param  value="123"  name="pwd"   />
</jsp:forward>

八、JSP与JavaBean的使用

jsp中操作javabean

jsp:useBean

先查找再创建。

<jsp:useBean  id="student"  class="cn.tf.domain.Student"  scope="page" />

jsp:setProperty

    <jsp:setProperty property="name" name="student"  value="学生"/>
<jsp:getProperty property="name" name="student" />

这里写图片描述

九、EL表达式

不是单独的语言,而是jsp规范中获取数据的一种方式。可以获取数据、运算、访问普通静态方法等功能。
不支持字符串连接操作。

9.1 获取数据

只能获取存在于四个域对象中的数据。
EL对于null这样的数据,显示在页面上表现为一个空字符串。

${s} pageContext.findAttribute(“s”);
无空指针问题。

运算符:
.
[]

<!-- 获取javabean的属性 -->
<%
  Student student=new Student();
  student.setAddress(new Address());
    pageContext.setAttribute("s",student);
 %>

 ${s.name}==${s['name']}

${s.address.province }

<!-- 获取List集合中的元素 -->
<%

List  list=new ArrayList();
list.add("a");
list.add("b");
list.add("c");

pageContext.setAttribute("list",list);

 %>

${list[1] }


<!-- 获取map中的元素 -->
<%
    Map  map=new HashMap();
    map.put("a","1111");
    map.put("b","2222");
    map.put("c","3333");

    pageContext.setAttribute("map",map);
 %>
${map.b}

这里写图片描述

9.2 运算

empty:判断null、空字符串和没有元素的集合(

${empty p }

三元运算符:
${布尔表达式?true:false}

<%
        List list=new ArrayList();
        list.add("a");
        pageContext.setAttribute("list",list);
     %>
     ${empty list }  <!--  false-->

     ${empty list ?'您未购买任何东西':'您购买的物品如下'} 

     <%
        session.setAttribute("user","张三"); 

      %>

       ${empty user? '您还未登陆':'欢迎您' } ${user }

9.3 隐式对象(11个)

这里写图片描述

9.4 自定义EL表达式

1、编写一个类

public class Function {

public static String toUppercase(String data){
    return data.toUpperCase();  
}

}

2、在WEB-INF目录下建一个扩展名为tld的xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <uri>http://www.tianfang1314.cn/myfunctions</uri>
    <function>
<name>toUpperCase</name>
<function-class>cn.tf.functions.Function</function-class>
<function-signature>java.lang.String toUppercase( java.lang.String )</function-signature>
</function>
</taglib>

3、在jsp中使用
引入taglib文件:

<%@ taglib uri="http://www.tianfang1314.cn/functions"   prefix="my" %>

使用自定义的el表达式“data”,将小写的a转换为大写的A。

<%
            pageContext.setAttribute("data","aaaaaaa");
         %>
         ${my:toUpperCase(data) }

实际项目中很多都是使用JSTL来进行操作的。

源码地址:https://github.com/sdksdk0/JSP

© 著作权归作者所有

sdksdk0
粉丝 1
博文 105
码字总数 73456
作品 0
衡阳
程序员
私信 提问
web 基础巩固——JSP基础

本文按照官网文档总结,但是有可能会理解错误,学习时尽量和其他网站进行对比,同时也欢迎指出错误,好让我及时改正 什么是JSP页面? JSP页面是一个文本文档,包含两种类型的文本:静态数据,...

SXJR
2018/11/26
0
0
Servlet基础

Servlet简介:Servlet是sun公司提供的一门用于开发动态web资源的技术,sun公司在API中提供了一个Servlet接口,用户若想完成一个动态web资源,需要完成以下两个步骤: ----1、编写一个Java类,...

晨曦之光
2012/05/16
374
0
读书《Servlet与JSP核心编程》

读书《Servlet与JSP核心编程》 Servlet和JSP技术概述 HelloServlet HttpServlet Servlet逻辑,面向处理 JSP表示,面向表示 Servlet和JSP结合起来 服务器的安装和配置 Servlet基础 web.xml in...

放个屁
2015/05/04
141
0
如何成为一个优秀的JSP程序员

一个普通的错误是把JSP当作简化的Java,它不是,(事实上, JSP是简化的Servlet)程序员通常试着没有学习要求的支持技巧而直接学习JSP。JSP是一个衔接技术,并且成功地连接你需要理解的另外的...

五味格子
2011/05/11
31
0
tomcat源码分析-http请求在Container中的执行路线

在CoyoteAdapter的service方法中,主要干了2件事: 1. org.apache.coyote.Request -> org.apache.catalina.connector.Request extends HttpServletRequest org.apache.coyote.Response -> o......

javahongxi
2017/10/25
544
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部