JSP介绍

  • JSP全称是Java Server Pages,它和Servlet都是Sun公司定义的用于开发动态Web资源的技术,它解决了Servlet输出流排版复杂和难以维护的问题。JSP完美融合了HTML模版元素和Java代码,通过JSP写服务端输出变得和写HTML网页一样容易。
  • JSP通过涵盖HTML模版元素来简化输出排版,还提供不同的JSP标签管理不同类型的Java代码,除此之外,它还默认封装了9大隐式对象,帮助提高开发的效率。
  • JSP本质上是Servlet,当用户请求JSP时,JSP引擎(Tomcat内嵌)会自动把JSP代码转化为Servlet,并把HTML模版元素和JSP标签内容填充到Servlet中的Service方法,通过Service方法输出响应流给客户。在进行转换时,Servlet引擎也会默认的将JSP的9大隐式对象封装到service方法当中。
  • JSP页面组成:HTML,JavaScript, JSP指令,JSP脚本,JSP动作标示,JSP九大内置对象,JSTL等第三方标签库...
  • 由于JSP良好的布局性,实际开发Web应用通常采用JSP+Servlet的形式,JSP主要负责数据的展示,Servlet负责业务逻辑和数据计算。此种方式可以实现良好的代码解耦合和分层管理,也利于UI人员和后端人员并行开发。

JSP工作原理

JSP的本质是Java Servlet,它通过Tomcat JSP引擎将 JSP  翻译为相应的Servlet,并通过service方法来接受和响应客户请求。

示例:tomcat容器自带的index.jsp 对应的servlet

  • 默认生成Servlet,并将JSP的内容自动填充到_jspService方法中

    • Java代码直接填充到方法中
    • HTML模版通过out.write("HTML 模版  /n") 填充到方法中,形成输出流
  • JSP引擎还自动的在_jspService方法里面生成其他对象的引用并对他们初始化,这些对象结合起来称为JSP的默认9大隐式对象,在JSP页面可以直接通过对象名进行引用.

JSP九大隐式对象

常用JSP对象

内置对象

说明

request

HttpRequest

封装所有的请求信息,有以下几种做法:

Ø  获取请求参数: request.getParameter(paraName);

Ø  保存属性到请求域:request.setAttribute(String attrName,Object property);

Ø  获取请求域中的属性:request.getAttribute(attrName),此时返回的类型是object,要在界面上显示,需要做一个类型转换

Ø  获取cookies: request.getCookies();

Ø  解决request中文编码乱码的问题

session

Session

会话请求域

Ø  获取session对象:Session s=request.getSession(); 在JSP中不用实例化session,可以直接调用session对象的各种方法。

Ø  向session域添加内容:s.addAttribute(String, Object);

Ø  从session域取内容:s.getAttribute(attrName), 返回的也是object对象,通常转化为string对象在页面显示。

Ø  从session域中移除属性:s.removeAttribute(attrName)

Ø  使得session域过期:s.invalidate();

session的生命周期开始于request请求,当发起request请求以后服务器自动的创建或者获取关联的session, 当浏览器关闭,session对象会被销毁。 session在Tomcat服务器下的默认生命周期是30分钟,即使不关闭浏览器,超过了session的时长,session也会被销毁。可以在web.xml中配置session的超时时间。除了以上两种方式,也可以认为的通过session.invalidate方法把session置为无效。

Ø  session.getLastAccessTime();获取最后一次session的获取时间

Ø  session.getMaxInactiveInterval(); 返回session的最大间隔

Ø  session.setMaxInactiveInterval();设置session的最大间隔(即超时时间)

application

ServletContext

保存全局信息,在Web应用启动时创建,在Web应用销毁时销毁。

Ø  访问应用程序的初始化属性:application.getInitialParameter(String name)

Ø  管理应用程序的环境属性:application.setAttribute(s.object); application.getAttribute(s);

response

HttpResponse

封装http响应,向页面输出结果,指定各种输出的响应。

Ø  重定向: response.sendRedirect(url);

Ø  禁止缓存:(对于安全性和实时性要求较高的页面,可以禁止缓存)response.setDateHeader(“Expires”,0); response.setHeader(‘Cache-Control’’,’no-store’);

Ø  定时刷新:response.setHeader(‘refersh’,’10’);

Ø  定时跳转:response.setHeader(‘referesh’,’10;URL=login.jsp’);

Ø  输出非文本内容(下载文件):response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));

Ø  输出非文本内容(图片):  response.setContentType("image/jpeg");

Ø  设置缓冲区大小:response.setBufferSize(32);

out

OutputWriter

OutputStream

out主要用于输出和管理缓冲流

Ø  out.println(string), out.print(string)

Ø  缓冲:out.clear(), out.clearBuffer(),out.flush();

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

 

非常用JSP对象

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

内置对象

说明

config

ServletConfig,可以获取Servlet的初始化参数

page

代表JSP本身,等同于this,可以通过它获取当前JSP页面的一些属性。

pageContext

page运行的上下文,可以通过它获取当前页面的各种内置对象,包括request,response,session….因为JSP的内置对象可以直接使用,通过此方法来间接调用在实际开发中使用不多。

exception

只能用于errorPage当中(设置JSP Page指令中的isErrorPage=true),否则会抛异常,通常用于捕获最终的错误消息。

1.       设置页面A的Page指令,errorPage=”pageB.jsp”

2.       设置页面B的Page指令,isErrorPage=”true”,并在B中对错误进行捕获和处理。

3.       页面A出现了没有捕获的异常以后会跳转到页面B进行相应的处理和显示。

JSP页面示例

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个JSP</title>
</head>
<body>
<%!//定义一个类方法,只能通过JSP申明定义方法,全局变量和静态代码块
public void testJSPDeclarition() {
System.out.println("这是一个JSP申明");
}%> <%--JSP注释,该注释并不会做为输出输出给浏览器,在JSP中应当用此注释替代Html注释<!--XXX-->,避免输出垃圾数据给客户端造成流量浪费 --%>
当前系统时间是:
<%--脚本表达式,可以书写遵循java规范的代码,可以在JSP中多次出现,并且会被翻译为相应Servlet中的Service方法的代码片段 --%>
<%
testJSPDeclarition();
Date d = new Date();
out.write(d.toLocaleString());
String jspDefindedVar = "hello,i am a var generated by JSP";
for (int i = 0; i < 2; i++) {
%>
<br>测试脚本片段语法和多个脚本片段组合作用
<%
}
%>
<br>
<br> 查看前面JSP脚本片段定义的变量值:
<%-- 脚本表达式,用于向浏览器输出数据,不以;结尾,仅用做数据输出 --%>
<%=jspDefindedVar%>
<br>
<br> 查看Servlet传递过来的参数变量:
<%=request.getAttribute("servletTransferVar")%>
</body>
</html>

JSP脚本

  1. <%       %>   JSP脚本片段,即Java代码块( Java代码直译)
  2. <%!     %>   JSP申明
  3. <%=     %>   JSP表达式(直接翻译成out.print)
  4. <%--    --%>  JSP 注释,此注释不在浏览器展示

JSP脚本片段

用于在JSP中编写和运行多行代码, 这些代码被“翻译到” service方法中,因此不能嵌套方法
  • <%  %> 只能出现严格遵循Java语法的代码,每行必须以;结束。
  • 在一个JSP页面中可以有多个脚本片段,不同的脚本片段之间可以嵌入文本,HTML标记或者其他JSP元素, 并且同一个页面之间的脚本片段可以相互访问。本质上这些脚本片段都被翻译为同一个jspService方法里的代码,方法里的变量是可以相互访问的, 但一样要遵循先定义后访问的原则。
  • 单个脚本片段在JSP中可以是不完整的,但是多个顺序结合的脚本片段必须是完整的Java代码。

JSP申明

  • <%!   %> JSP页面中编写的所有代码,默认都会翻译到servlet的Service方法当中,除了JSP申明。
  • JSP申明中的Java代码会被翻译到Servlet的service方法外,常常用来定义JSP转化为Servlet程序的静态代码块,成员变量或者是方法。JSP脚本片段不能用来定义方法,只有JSP申明能够用来定义方法。
  • JSP 申明必须满足Java代码规范
  • JSP默认的九大隐式对象都是Servlet Service方法里申明的方法变量,在JSP申明中不能使用这些隐式对象。

JSP脚本表达式

用于将程序数据输出到客户端
<%= 变量或表达式 %>, 表达式后面不能有;。

JSP 注释

  • <%— —%>, 需要和HTML注释区别开,实践中应该多用JSP注释少用html注释。
  • <!— —>, HTML 注释会被解析到浏览器当中,造成不必要的垃圾数据输出。

JSP 指令

JSP指令是为JSP引擎设计的,它不直接产生可见输出,只是用于告诉JSP引擎如何处理JSP,JSP指令基本语法:<%@ 指令 属性名=“值” %> 。

JSP指令

说明

Page指令

<%@Page attr1=”value1” attr2=”value2” %>

 

最常用的JSP指令,作用域是整个页面,通常用于设置JSP的全局属性,实际开发中常常放在JSP页面顶部,重点包括以下几项:

  • language=“java”, 编程语言是java
  • contentType="text/html; charset=UTF-8”, 输出给浏览器的字符编码
  • pageEnconding=“UTF-8”, JSP 页面的编码
  • import=“”,引入的Java包,JSP默认引入的Java包只有java.lang和javax.servlet.*,其余的包需要在JSP页面中用到,则需要在page指令中导入, 否则都编译不过。
  • session="true/false", 是否自动获取session。即使这里设置为false,仍然可以通过request.getSession()获取session对象
  • buffer=“none/kbSize”,
  • isThreadSafe="true/false"
  • autoFlush="true/false"
  • errorPage="relative_url", 定位页面失败后的自动跳转页面,避免抛500带来的差用户体验。

include指令

<%@include file=”url” %>

静态包含,通过url(相对地址或者是绝对地址)来包含相关的页面,include指令采用的是静态包含的方式,被包含的页面内容会直接输出到包含页面中,然后再进行统一的编译执行,因此要注意被包含页面和包含页面中不要有变量名的冲突,实际开发中,常常用来包含网站的页眉和页脚。

taglib指令

<%@taglib prefix=”” url=”url”%>

引入第三方标签库,比如JSTL标签库,page指定第三方url,prefix指定在jsp页面中的前缀,通过<前缀:标签>的方式使用。

JSP动作标示

JSP动作标示

说明

<jsp:include/>

<jsp:include page=”url”></jsp:include>

动态包含,可以包含其他JSP页面,此包含是动态包含,当调用被包含页面时会先将被包含页面进行动态编译输出结果,然后把输出结果嵌入到包含页面中,和JSP指令中的<%@include %>不一样。

<jsp:forward/>

<jsp:forward page=“url”/> 请求转发

<jsp:param/>

<jsp:param name=“”value=“”/> 可以内嵌在jsp:forward和jsp:include中使用,用于参数传递。

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
table.MsoTableGrid
{mso-style-name:网格型;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-priority:39;
mso-style-unhide:no;
border:solid windowtext 1.0pt;
mso-border-alt:solid windowtext .5pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-border-insideh:.5pt solid windowtext;
mso-border-insidev:.5pt solid windowtext;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

Java Web基础:JSP基础概念的更多相关文章

  1. 重拾Java Web应用的基础体系结构

    目录 一.背景 二.Web应用 2.1 HTML 2.2 HTTP 2.3 URL 2.4 Servlet 2.4.1 编写第一个Servlet程序 2.5 JSP 2.6 容器 2.7 URL映射到 ...

  2. java web构建学习(概念基础)

    1.什么是Java Web Application 一个Java web应用程序生成交互式web页面包含各种类型的标记语言(HTML.XML等)和动态内容.它通常由web组件例如JavaServer ...

  3. java web filter 之一 基础实现

    本文主要对filter的基本使用进行了讲解,其中涉及到了 filter是什么 一个filter处理一个jsp 多个filter处理一个jsp filter是什么 Filter 是java下的一种过滤器 ...

  4. java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  5. 初学Java Web(6)——JSP学习总结

    为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题. 虽然这样做目的能达到,但是存在一些缺陷: 在 Servlet 输出网页片段非常恶心 (可读性差, ...

  6. Java Web之JSP

    什么是JSP? JSP就是一个可以写Java代码的HTML页面 JSP是什么? JSP是Servlet,JSP的本质就是Servlet Tomcat的web.xml文件下有这样几段代码: 看到下面的通 ...

  7. 复习java web之jsp入门_El表达式_JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  8. JavaWeb基础-Jsp基础语法

    jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...

  9. Java Web之JSP技术

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

  10. Java Web(五) JSP详解(四大作用域九大内置对象等)

    前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...

随机推荐

  1. EBS R12.2应用层关闭脚本的执行过程

    $ pwd /app/oracle/apps/VIS/fs1/inst/apps/VIS_erptest/admin/scripts $ ./adstpall.sh apps/apps You are ...

  2. PRML读书笔记——Mathematical notation

    x, a vector, and all vectors are assumed to be column vectors. M, denote matrices. xT, a row vcetor, ...

  3. opencv实现图像邻域均值滤波、中值滤波、高斯滤波

    void CCVMFCView::OnBlurSmooth()//邻域均值滤波 { IplImage* in; in = workImg; IplImage* out = cvCreateImage( ...

  4. .net mvc onexception capture; redirectresult;

    need to set filtercontext.result=new redirectresult('linkcustompage'); done. so... ASP.NET MVC异常处理模块 ...

  5. sdutoj 2610 Boring Counting

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2610 Boring Counting Time ...

  6. SQL Server数据库性能优化(三)之 硬件瓶颈分析

    参考文献 http://isky000.com/database/mysql-performance-tuning-hardware 由于对DBA 工作了解不多    所以只从网上简单的看了下  硬件 ...

  7. selenium处理Ajax浮动框方法

    package com.allin.pc;import java.util.List;import org.openqa.selenium.WebElement;import org.openqa.s ...

  8. WP8没有开发者账号升级GDR3预览版的方法

    很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...

  9. NRF52832学习笔记

    一.打印函数 printf("");用于在调试串口时在电脑端的串口调试工具上打印: 宏定义时每行后面的斜杠,在最后一行不加斜杠.

  10. redhat6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpm

    redhat6.3安装MySQL-server-5.6.13-1.el6.x86_64.rpm   首先下载下面三个文件:   [plain]  MySQL-client-5.6.13-1.el6.x ...