jsp——java服务页面

1 Jsp基础

1.1 什么是JSP?

JSP,Java Server Page    Java服务页面。

html页面: 用html语言写页面

Jsp页面: 用html语言写页面,用java语言写业务逻辑

Jsp的特点; 既可以写html代码,也可以写java代码。

1.2 Jsp的作用

Jsp的主要作用是用java语言来开发动态资源的技术。

1.3 Jsp的运行

servlet: servet程序交给tomcat服务器运行

Jsp:jsp页面交给tomcat服务器运行。

jsp在%tomcat%/work目录下产生临时文件。

1.4 Jsp体验

需求: 在浏览器中输出当前时间

1.5 Jsp的运行过程

浏览器: http://localhost:8080/day12/01.hello.jsp

第1次访问jsp时:

1)tomcat服务器把jsp文件翻译成java源文件(work目录下)_01_hello_jsp.java

2)tomcat服务器把java源文件编译成class字节码 _01_hello_jsp.class

3)tomcat服务器构造类对象(_01_hello_jsp)

4)tomcat服务器调用类对象的方法(_01_hello_jsp中的方法)

第n次访问jsp时:

1)tomcat服务器调用类对象的方法(_01_hello_jsp中的方法)

只走第4步

注意:

1)当jsp文件内容发送变化,那么会重新翻译和编译jsp文件。

2)如果java源文件和class字节码删除了,第一次访问jsp时,也会重新翻译和编译。

1.6 疑问

1)jsp文件中的html代码和java代码是如何被执行的?

html代码: 通过out.write("内容"); 方法输出到浏览器

java代码: 原封不动拷贝到java源文件中被执行

2)Jsp和servlet是什么关系?

public final class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBase

public abstract class org.apache.jasper.runtime.HttpJspBase extends javax.servlet.http.HttpServlet implements javax.servlet.jsp.HttpJspPage {

结论: Jsp就是一个servlet文件!!!

(servlet的知识点在jsp中全部适用,但jsp的部分知识点未必在servlet都能适用!!!)

Servlet的生命周期:

1)构造方法(第一次访问时)

2)init方法(第一次访问时)

3)service方法(第n次访问时)

4)destroy方法

Jsp的生命周期:

1)翻译成java源文件(第一次访问时)

2)java源文件编译成class字节码(已经是servlet类)(第一次访问时)

3)构造方法(第一次访问时)

4)_jspInit()方法(第一次访问时)

5)_jspService方法(第n次访问时)

6)_jspDestroy()方法

2 Jsp语法

2.1 Jsp模板

Jsp文件中html代码部分就是模板(模块)

2.2 Jsp表达式

语法: <%=变量或表达式%>

作用: 向浏览器输出变量的值或表达式计算的结果

注意:

1)其原理是使用out.print(name );方法向浏览器写出内容

2)结尾不能使用分号

2.3 Jsp脚本

语法: <% java代码 %>

作用: 执行java代码

注意:

1)其原理是直接把java脚本代码翻译到java文件的_jspService方法中执行。

2)Jsp脚本可以穿插html代码混合使用

2.4 Jsp声明

语法: <%! 变量或方法%>

作用: 用于声明jsp文件的变量和方法

注意

1)声明的是成员变量和成员方法。

2)方法不能在脚本中定义,而只能在声明中定义。

3)不能声明和翻译成的java文件中原有方法重复!!!

2.5 Jsp注释

语法: <%-- jsp注释--%>

注意:

1)html注释是会被翻译到java源文件中,也会被执行

2)jsp注释是不会翻译到java源文件中,不会被执行。

3 Jsp的三大指令

2.1 taglib指令

taglib指令主要是用于导入jsp的标签库。

2.2 include指令

include指令用于导入其他页面文件。

语法: <%@include file="导入的页面路径"%>

注意:

1)包含与被包含的页面先合并内容翻译到一个java源文件中,再编译执行一个java文件。(先合 并再翻译),叫静态包含(源码包含)

2)被包含的页面不要使用全局的html标签。(html/head/title/body)

2.3 page指令

page指令主要是用于告诉tomcat服务器如何翻译jsp文件。(jsp->java文件)

<%@ page

language="java"   --告诉服务器以什么语言来翻译jsp文件

import="java.util.*" --导包。多个包用逗号分隔

java.util.Date,java.text.SimleDateFromat

jsp编码相关的

pageEncoding="utf-8"  --jsp翻译成java文件时使用的编码

contentType="text/html; charset=utf-8" --服务器返回给浏览器的数据类型和编码

jsp中涉及中文编码问题:

1)保存jsp文件时的编码(另存为)

2)jsp翻译成java文件时的编码(pageEncoding)

3)服务器输出到浏览器的数据编码(contentType)

注意:

1)contentType属性如果不写,会参考pageEncoding的编码

2)在ecplise中开发jsp,保存文件时的编码会参考pageEncoding编码

结论:

在ecplise中开发jsp文件,只需要在page指令中设置pageEncoding的属性即可解决中 文乱码问题!!

错误页面相关的

errorPage="error.jsp"  --指定错误页面

isErrorPage="false"    --指定当前页面是否为错误页面。如果是true,那么就可以是exception内置对象,如果false,则不能使用exception内置对象。exception用于得到错误信息。

全局错误页面配置:

在web.xml文件中设置

通常配置两种错误: 404   500


<!--  配置全局的错误处理页面 -->

<error-page>

<error-code>404</error-code>

<location>/common/404.html</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/common/500.jsp</location>

</error-page>

buffer="8kb"   --jsp页面的缓存区大小

session="true"  --是否打开session功能。是否可以使用session内置对象

isELIgnored="false"  --是否忽略EL表达式。false,不忽略,可以使用EL;true,不 能EL

 

%>

4 Jsp的9大内置对象

4.1 什么是Jsp的内置对象?

在Jsp的开发过程中,开发者会频繁地使用到一些对象,例如Request,Session对象,ServletConfig,ServletContext,如果每次要使用这些对象都要去创建或者调用方法去得到就比较麻烦。Sun公司为了更加方便开发者在jsp文件中直接得到这些对象,直接就帮我们创建或得到好了这些对象,开发者直接使用这些对象即可,这些直接可以使用的对象就叫内置对象!!!!

<%

//使用请求对象HttpServletRequest

request.getContentPath();

//使用HttpSession对象

HttpSession session = request.getSesion();  --之前的servlet做法

session.setAttribute(name,object);

%>

4.2 9个内置对象

对象名          对应的类型                 备注

request         HttpServletRequest  请求对象,封装请求信息

response      HttpServletResponse  响应对象,封装响应信息

config           ServletConfig        servlet配置对象,封装servlet配置信息

application      ServletContext      servlet的上下文对象,代表整个web应用环境

session         HttpSession               会话对象。用于保存会话数据

exception     Throwable             异常对象,用于封装异常信息

page             Object                  代表当前jsp翻译成java类对象

out               JspWriter                  jsp页面缓存对象,相当于带缓存功能的PrintWriter

pageContext    PageContext             jsp的上下文件对象,代表当前jsp的环境

4.3 out对象

out对象,类型JspWriter

out.wirter("内容")

1) PrintWrite类: 直接往浏览器写出内容

out.write(“内容”);

2)JspWriter类: 相当于带缓存的PrintWriter

out.write("内容"): 把内容写入缓存区

注意:

当JspWriter缓存区满足以下条件,缓存区内容会写入到PrintWriter中。

1)缓冲区满了。

2)刷新缓冲区(JspWriet.flush())

3)关闭缓冲区 (<%@page buffer="0kb"%>  buffer属性用于设置Jsp‘Writer缓存区大小,默认8KB)

4)执行完Jsp页面

得到当前缓冲区大小: out.getBufferSize()

得到当前缓冲区剩余大小: out.getRemaining()

4.4 pageContext对象

pageContext对象,类型PageContext类。

1)包含了其他8个内置对象的引用

Jsp文件翻译的java类

public class _02_out_jsp{

public void _jspService(HttpServletRequest rquest, HttpServetResponse response){

HttpSession session;

ServletConfig config;

......

//Sun设计了一个PageContext对象,用于存放其他8个内置对象

PageContext pageContext;

//调用method1

method1(pageContext)

}

public void method1(PageContext pageContext){

//要使用8个内置对象

pageContext.getSession();

pageContext.getRequest();

pageContext.getResponse();

......

}

}

以上情况,在自定义标签中频繁使用到!!!

2)PageContext作为域对象

    作用: 保存数据和获取数据,清除数据

方法:

getAttribute()

setAttribute()

removeAttribute();

保存数据:

默认情况,保存到page域中

pageContext.setAttribute(name,object);

可以指定域保存

pageContext.setAttribute(name,object, int 域范围)

域范围:PAGE_SCOPE, REQUET_SCOPE, SESSION_SCOPE , APPLICATION_SCOPE

取出数据:

默认情况,从page域取出

pageContext.getAttribute(name);

可以指定域取出

pageContext.getAttribute(name, int 域范围)

域范围:PAGE_SCOPE, REQUET_SCOPE, SESSION_SCOPE , APPLICATION_SCOPE

从四个域中搜索:

pageContext.findAttribute(name);

搜索顺序: page域-> request域 -> sesion域-> application域

5 Jsp的四个域对象

5.1 域对象的作用:

用于保存数据,获取数据,在不同资源之间共享数据

5.2 域对象的方法:

setAttribute(name,object) ; 保存数据方法

getAttribute(name)  获取数据

romveAttribute(name) 清除数据

5.3 域对象作用范围

page域: 处于同一个jsp页面中数据共享是有效的!!

request域:处于同一个请求中数据共享是有效的!!(使用转发)

session域:处于同一个会话中数据共享是有效的!!(同一个session对象)

application域:处于同一个web应用中数据共享是有效的!!

6 Jsp的最佳实战

Jsp就是一个servlet!!!

Servlet的作用:使用java代码开发动态资源。可以写java代码,输出html代码

Jsp的作用: 使用java代码开发动作资源。可以写java代码,也可以输出html代码。

项目中可以会涉及的工作:

1)接收参数

2)处理业务逻辑

3)跳转其他资源

4)显示数据

Servlet:擅长写java代码

Jsp:擅长显示数据

最佳实践:

利用servlet来处理java相关的逻辑事务,把需要显示的数据发送给jsp,然后在jsp中显示数据。

servlet+jsp

7 EL表达式

7.1 EL表达式的作用

在jsp显示数据,可以使用jsp表达式向浏览器输出数据。可以使用java脚本来执行业务逻辑。

建议: 开发者在jsp页面中要尽量减少java代码,甚至不用java代码

EL表达式用于替代jsp页面中的jsp表达式。

Jsp标签用于替代jsp页面中的jsp脚本。

EL表达式的作用: 用于向浏览器输出域对象中的变量和表达式计算的结果

(EL表达式必须要求数据放在域对象中的!!!!)

语法: ${变量或表达式}

7.2 EL语法

1)获取数据

a)在四个域中获取

${变量}

b)指定域获取数据

${域范围.变量}

域范围: pageScope -> requestScope -> sessionScope -> applicationScope

2)EL获取普通对象数据

${student.name}  注意name表示调用getName()方法

3)EL获取集合数据(List和Map集合)

${map[key].name}  注意:map[key] 表示调用map对象的get(key)方法获取map的值对象

4)EL可以使用表达式

算术表达式 : ${a+b}

比较表达式:   ${a>b}

逻辑表达式 :  ${true && true}

判空表达式:   ${empty name} 表示判断name为null或者空字符

原文地址:https://www.cnblogs.com/lldsgj/p/10801257.html

时间: 2024-07-31 14:33:34

jsp——java服务页面的相关文章

JSP Java服务器页面

大家好!好久不见!今日我们开始学习JSP了,一些记录基础性的知识在这里与大家分享. 先说下URL(Uniform Resource Locator 同意资源定位符). URL包括传输协议(http://),ip地址,端口(端口如果是80可以省略,其他不能省略),项目资源地址. 再来说下B/S,C/S架构. B/S是浏览器/服务器: 浏览器和服务器端采用请求/相应模式进行交互: B/S结构是对C/S结构的一种改进: 当应用成武为B/S结构时,程序部署在应用服务器上,并通过应用服务器同数据库服务器进

jsp(Java的服务网页)$javabean

JSP:Java Server Page(Java的服务网页),也是Java的动态网页. JSP的本质:其实就是一个Servlet. JSP---->翻译成Servlet类---->编译成字节码文件--->解释执行了.   1.jsp的基本语法: 1.JSP的注释: 作用:注释Java脚本代码 语法:<%--这是注释--%>,JSP的注释不会被翻译到Servlet代码中去. 2.JSP的Java脚本表达式: 作用:输出数据到页面上 语法:<%=表达式%>(实际上就

ajax跨域请求,页面和java服务端的写法

页面ajax请求的写法: $.ajax({ type : "get", async : false, cache : false, url : "http://localhost:8081/a/b", data : { produ_id: 111, sub_id: 0, produ_quantity: 1, produ_price: 0.0 }, dataType : "jsonp", jsonp: "jsonpCallback&quo

新手详解JAVA+数据库+JSP完成简单页面

本篇以数据库添加为例(本例中数据库名为"xinxi"表单名字为"stud") 准备---实体层: package entity; public class Student { private String name; private String adress; private String qq; public void setName(String name) { this.name=name; } public String getName() { retur

servlet+jsp update修改页面的实现,整整搞了两个小时才搞定

package DAO; public class books { private int bid; private String bname; private int booksl; private double price; public int getBid() { return bid; } public void setBid(int bid) { this.bid = bid; } public String getBname() { return bname; } public v

jsp作为服务端,ajax请求回应

刚学ajax,想以jsp作为服务端,来回应ajax的请求: 代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src="../js/jquery.min.js" ></script> <script type=&

Flex通信-Java服务端通信实例

Flex与Java通信的方式有很多种,比较常用的有以下方式: WebService:一种跨语言的在线服务,只要用特定语言写好并部署到服务器,其它语言就可以调用 HttpService:通过http请求的形式访问服务器 RmoteObject:通过AMF协议,以二进制的形式交互数据 Socket:套接字协议,服务器和客户端以IO的形式交互数据 上面几种各有个的优势:WebService常用于跨语言调用,不过解析协议需要花不少时间,运行速度不快:HttpService类似于Ajax:通常RmoteO

jsp,velocity,freemark页面引擎的比较

在java领域,表现层技术主要有三种:jsp.freemarker.velocity. jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支持表达式语言(el) 4.官方标准,用户群广,丰富的第三方jsp标签库 5.性能良好.jsp编译成class文件执行,有很好的性能表现 缺点: jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构. velocity是较早出现的用于代替jsp的模板语言 优点

servlet+jsp+java实现Web应用

servlet+jsp+java实现Web应用 环境: 1,eclipse 2,tomcat3,eclipse tomcat 插件 开发过程: 1,建立一个Dynamic Web Project 2,创建一个欢迎页面 页面可以是jsp/html,我们选择一个jsp页面(放在WebContent内) <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding=