java Web jsp

作者: n油炸小朋友 | 来源:发表于2018-06-07 15:26 被阅读0次

jsp是java web 的动态网页开发技术,jsp可以嵌套java代码,Tomcat在获得jsp后会把它转为servlet。

tomcat在客户端第一次请求的时候编译jsp,tomcat可以自动检查jsp是否被改动,要是有改动,在下一次客户端请求页面的时候再次编译它。

jsp本质上是servlet,所以生命周期和servlet一样。不同的是jsp是先部署后编译,servlet是先编译后部署。

jsp被转为一个继承了org.apache.jasper.runtime.HttpJspBase类、实现了org.apache.jasper.runtime.JspSourceDependent接口的类。

HttpJspBase的源码:
HttpJspBase是HttpServlet的子类,

1 /*
 2  * Licensed to the Apache Software Foundation (ASF) under one or more
 3  * contributor license agreements.  See the NOTICE file distributed with
 4  * this work for additional information regarding copyright ownership.
 5  * The ASF licenses this file to You under the Apache License, Version 2.0
 6  * (the "License"); you may not use this file except in compliance with
 7  * the License.  You may obtain a copy of the License at
 8  * 
 9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package org.apache.jasper.runtime;
19 
20 import java.io.IOException;
21 
22 import javax.servlet.ServletConfig;
23 import javax.servlet.ServletException;
24 import javax.servlet.http.HttpServlet;
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27 import javax.servlet.jsp.HttpJspPage;
28 
29 import org.apache.jasper.compiler.Localizer;
30 
31 /**
32  * This is the super class of all JSP-generated servlets.
33  *
34  * @author Anil K. Vijendran
35  */
36 public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
37     
38     private static final long serialVersionUID = 1L;
39 
40     protected HttpJspBase() {
41     }
42 
43     @Override
44     public final void init(ServletConfig config) 
45         throws ServletException 
46     {
47         super.init(config);
48         jspInit();
49         _jspInit();
50     }
51     
52     @Override
53     public String getServletInfo() {
54         return Localizer.getMessage("jsp.engine.info");
55     }
56 
57     @Override
58     public final void destroy() {
59         jspDestroy();
60         _jspDestroy();
61     }
62 
63     /**
64      * Entry point into service.
65      */
66     @Override
67     public final void service(HttpServletRequest request, HttpServletResponse response) 
68         throws ServletException, IOException 
69     {
70         _jspService(request, response);
71     }
72     
73     @Override
74     public void jspInit() {
75     }
76 
77     public void _jspInit() {
78     }
79 
80     @Override
81     public void jspDestroy() {
82     }
83 
84     protected void _jspDestroy() {
85     }
86 
87     @Override
88     public abstract void _jspService(HttpServletRequest request, 
89                                      HttpServletResponse response) 
90         throws ServletException, IOException;
91 }

我们在jsp中写的html,都会在_jspService()方法中用out.write()方法写:


image.png

jsp的语法

包括脚本(javascript、java代码)、指令、标签。

jsp脚本
  1. javascript方式
    • <script></script>标签
    • 引入js的wenjian
  2. java代码方式
    • 在<% %>内部写java代码
    • 用<%= %>来输出结果
    • 在<%! %>中声明全局属性和全局方法
    • 注释:
<%-- --%>  :jsp注释,
//  :java单行注释
/*  */  :Java多行注释
<!-- -->   :这个注释,会发送到浏览器端的源码中显示
jsp指令

jsp指令是声明一些文档编码方式、文件类型等等。

  • JSP指令格式:
    <%@ directive {attribute=value}* %>
    derective:指令名称
    attribute=value:属性=值
    *:表示可以写多个
  1. directive :

    • page指令:
      用来声明JSP页面的属性等。
      (ps:page允许的指令在下面介绍)。

    • include指令
      <%@ include file="relativeURL"%>include指令会将包含页面的源代码添加到使用include指令的页面中来,然后编译成class文件,是静态包含。

    • taglib指令
      用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,uri为类库的地址,prefix为标签的前缀。
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  2. 当指令为page时,可支持的属性
    如<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>这样

    • language 
      解释该JSP文件时采用的语言,一般为java语言,默认为java

    • extends 
      该JSP文件继承哪个类,需要实现Servlet的init、destroy等方法

    • import
      引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属性,一个import可以引用多个类,中间用英文逗号隔开

    • session
      取值为TRUE或FALSE,默认为TRUE,如果为true,则内置Session对象,可直接使用,否则反之

    • autoFlush
      是否运行缓存,默认为true;如果为true,则用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满了或者程序执行完毕或者执行out.flush()操作时才到客户端

    • buffer
      取值为none或XXXkb,指定缓存大小,当autoFlush设为true时有效,例如<%@ page buffer=10kb%>

    • isThreadSafe
      是否线程安全,默认为false;如果为true,则运行多个线程同时运行该jsp程序,否则只运行一个线程,其余线程等待

    • isErrorPage 
      默认为false,指定该页面是否为错误显示页面;如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有

    • errorPage
      指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面。errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常

    • contentType
      客户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯文本格式为text/plain、JPG图像为image/jpeg、GIF图像为image/gif、WORD文档为application/msword,该属性常跟charset设置编码一起,作用是通知服务器和浏览器都使用同一个码表

    • pageEncoding
      指定一张码表来对该JSP页面进行编码

jsp行为

jsp的标签包括JSP自带内置的标签、通过taglib指令得到的JSP标签库的标签和自定义标签。其中jsp内置的标签就被称为jsp行为。

格式:
<jsp:elements {attribute="value"}* />

jsp:标签的前缀,说明是jsp内置的标签,

elements:行为的名称,

attribute=value:使用键值对来编写属性

*:能指定0个或多个属性对
  1. <jsp:include />行为
    这个行为将包含的jsp运行的结果包含进来,是动态包含。
    include指令是将包含的jsp代码包含进来一起编译,是静态包含。

  2. Java bean行为
    这是一组与Java Bean 相关的行为,包括useBean行为、setProperty行为、getProperty行为等。
    2.1 useBean行为
    <jsp:useBean id="beanObject" class="className" scope="Value">  作用:在jsp中定义一个java bean对象

id:指明Java Bean对象的名称,JSP中可以使用该名称引用该Java Bean对象,相当于给new出来的对象取一个变量名,

class:Java Bean类的全名

scope:该java bean对象的作用范围,可以写的就四个,也就是JSP的四大作用域,page、request、session、application

  page:只能在当前JSP页面使用,如果不在JSP页面,那么就会失效

  request:这个前面学过,A页面请求转发到B页面,那么使用的是同一个request,那么A,B页面都算是request的作用域,也就是通过请求转发的页面都是其作用域

  session:该作用域在一个web项目下任何位置应该读访问的到,只要cookie不关闭,并且cookie设置的访问路径为"/",

  application:其实就是Servlet中的servletContext,服务器下的所有项目都能访问到。

2.2 setProperty行为
<jsp:setProperty name="beanName" property="propertyName" value="">
作用:对bean对象的属性进行设置。
2.3 getProperty行为
<jsp:getProperty name="beanName" property="propertyName" />
作用:获取JavaBean对象的某个属性值

  1. <jsp:forward />行为
    作用:请求转发
    格式:

<jsp:forward page="someServlet">

   <jsp:param name="param1" value="value1"/>

   <jsp:param name="param2" value="value2"/>

</jsp:forward>

  1. <jsp:directive/>行为
    相当于JSP指令,比如<jsp:directive.page/>相当于<%@ page %>指令

jsp九大内置对象

jsp内置了九个隐藏的对象,可以直接用。

  1. page:
    表示当前JSP页面,是当前JSP编译后的Servlet类的对象,相当于this
  2. config:
    标识Servlet配置,跟Servlet中的ServletConfig对象是一样的,能获取该servlet的一些配置信息,能够获取ServletContext
  3. application:
    标识web应用上下文,有共享数据、初始化全局参数、获取资源路径、获得指定路径下的所有内容的作用,相当于ServletContext
  4. request:
    请求对象
  5. response:
    响应对象
  6. session:
    表示一次会话,在服务器端记录用户状信息的技术
  7. out:
    输出响应体 类型:JspWriter
  8. exception :
    表示发生异常对象,类型 Throwable,isErrorPage属性设为true才有exception对象
  9. pageContext:
    表示 jsp页面上下文(jsp管理者) 类型:PageContext
jsp四大作用域

page、request、session、application

pageContext对象的使用
  1. 获得其它八大内置对象 getXxx()
  2. 对作用域的属性进行操作(四大作用域)
pageContext.getAttribute(name);  //获得page作用域数据

pageContext.getAttribute(name,scope);  //获得 指定作用域中的数据

pageContext.setAttribute(name,value);  //给page作用域设置内容

pageContext.setAttribute(name,value, scope);//给指定作用域设置内容

pageContext.removeAttribute(name);  //给page作用域移除内容

pageContext.removeAttribute(name ,scope)  //移除指定作用域的内容
//(page/request/session/application)
  1. 提供作用域常量

PageContext.PAGE_SCOPE  page

PageContext.REQUEST_SCOPE  request

PageContext.SESSION_SCOPE  response

PageContext.APPLICATION_SCOPE  application

  1. 一次获得指定名称内容
findAttribute(name);  //依次从page、request、session、application 获得内容

el表达式底层用的就是 findAttribute(name);
如${user.username}就是依次从page、request、session、application作用域查找user对象,直到找到为止

相关文章

  • 2019-10-15 Java Web常见漏洞分析

    目录 Java vs PHP Java Web的常见概念 Java Web项目的目录结构 Servlet JSP(...

  • springMVC(1)

    web.xml jsp controller.java

  • JSP详解

    JSP的使用   JSP(Java Server Page)是基于Java Servlet的用于开发动态Web应用...

  • java Web jsp

    jsp是java web 的动态网页开发技术,jsp可以嵌套java代码,Tomcat在获得jsp后会把它转为se...

  • 2018-07-18

    jsp基础入门 动态页面 java的web开发 java web技术介绍 java技术来节约相应web互联网领域的...

  • JSP基础语法

    JSP简介 JSP: Java Server Page ,SUN公司提供的动态网页编程技术,是Java Web服务...

  • 7 jquery中ajax

    ajax.jsp MyServlet.java web.xml配置 ajax1.jsp ValidServlet ...

  • 《Java Web轻量级整合开发入门》学习笔记

    轻量级Java Web整合开发 第一章轻量级Java Web开发概述 1.2 java web开发概述 1.JSP...

  • JavaWeb - JSP

    JSP 什么是JSP Java Server Pages:Java服务器端页面,用于动态Web技术 最大的特点: ...

  • servlet统计在线人数

    CountServlet.java web.xml count.jsp

网友评论

    本文标题:java Web jsp

    本文链接:https://www.haomeiwen.com/subject/zjlgsftx.html