jsp——java服务页面

Posted lldsgj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp——java服务页面相关的知识,希望对你有一定的参考价值。

1 Jsp基础

1.1 什么是JSP?

JSPJava Server Page    Java服务页面

 

html页面: 用html语言写页面

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

 

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

1.2 Jsp的作用

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

1.3 Jsp的运行

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

Jspjsp页面交给tomcat服务器运行。

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

1.4 Jsp体验

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

1.5 Jsp的运行过程

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

 

1次访问jsp时:

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

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

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

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

n次访问jsp时:

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

只走第4

 

注意:

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

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

 

1.6 疑问

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

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

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

 

2Jspservlet是什么关系?

 

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方法中执行。

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

2.4 Jsp声明

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

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

注意

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

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

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

2.5 Jsp注释

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

注意:

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

2jsp注释是不会翻译到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文件时的编码(另存为)

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

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

 

注意:

1contentType属性如果不写,会参考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,不忽略,可以使用ELtrue,不 EL

 

%>

4 Jsp9大内置对象

4.1 什么是Jsp的内置对象?

Jsp的开发过程中,开发者会频繁地使用到一些对象,例如RequestSession对象,ServletConfigServletContext,如果每次要使用这些对象都要去创建或者调用方法去得到就比较麻烦。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("内容")

 

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

out.write(“内容”);

 

2JspWriter类: 相当于带缓存的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();

......

}

}

 

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

 

2PageContext作为域对象

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

方法:

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

 

2EL获取普通对象数据

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

3EL获取集合数据(ListMap集合)

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

4EL可以使用表达式

算术表达式 ${a+b}

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

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

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

以上是关于jsp——java服务页面的主要内容,如果未能解决你的问题,请参考以下文章

JSP Java服务器页面

JSP编写登录页面问题

项目中的小点_java项目某jsp页面报404

JSP

刷新 JSP 变量而不重新加载页面

java软件里面的跳转页面代码实现