WEB开发(3) JSP

JSP概述

bc9f5c96af4436770c2cea28ecaaa1a81f7.jpg

* JSP不需要web.xml配置

** JSP是一种servlet 

JSP和HttpServlet都是servlet,但是通常说的Servlet都默认是HttpServle

 

bb39a234d9b34a06e72ae6fc21011beea0a.jpg

6590b1244f511c375446d07b30b61625185.jpg

HttpServlet是先编译为class文件,再部署在服务器

JSP先部署上去,后在服务器内编译。(第一次请求的时候编译出来,往后直接使用该编译出来的class文件)

 JSP生命周期

19f757d479c30abfb506452e27e047ad23c.jpg

和servlet一样,有初始化和销毁,此外调用方法也可以有_jspInit()和_jspDestroy()

JSP语法

JSP语法,分为HTML和Java两部分

JSP元素和模板数据

efdf7dc0bfd14b226afad336fff3b1a9e1b.jpg

319d34ae05bc7851247948d26356679cc4c.jpg

JSP脚本必须要使用<% %>括起来,否则被视为模板数据;中间部分必须遵循Java语法,否则发生编译错误。

JSP输出

c92c7534643955ad90617ac655fde1a4d62.jpg

f4efbc380edb1e60b8b55de13d2f9c5444d.jpg

JSP注释

43b7f6548765b028b436fbde5f283903873.jpg

java:// and /* */                                 JSP: <%--   --%>

 JSP方法和声明

76df2252438f435b0044d674ef07015c2ea.jpg

<%!   %> 中声明变量和方法,注意叹号!

JSP中的if语句

0a2e8d4d9d3db68ccec6c48e7150dde21b8.jpg

3d8c18f7c17d180910bc5b11d3f2be3827f.jpg

JSP中的for/while语句

a41ae25f7b232c1ba2f2c347fda1e7c9aca.jpg

JSP中的return/break

23f61b3dfa62e485a66ffff67f3447822b1.jpg

带参数param=return时,程序会执行return语句,因此其后的html都不会显示出来。

break和return差不多,但是return是直接返回,break是跳出一个代码块(for,while或switch)

JSP指令

5935f029ba47cc9525fe39dff552954b51b.jpg

用<%@ directive %>来包含,directive位置可以取值为page、taglib、include

page指令

a7e2caace821dddfb268efe1fe674ef5234.jpg

无论在哪个page指令里的属性,任何page允许的属性都只能出现一次(import除外),否则会编译错误

1f027a3d8cc7cc9f5feff3baccaf82fb85c.jpg

import、autoFlush、session、errorPage、info、contenType、trimDirectiveWhitespaces等都很常用

5909a979da2d4e11414917ea1b230ace83c.jpg

trimDirectiveWhitespaces="false"能够让输出有空白格,可是对html来说都是一样的。

include

fffee7db6fc1e70398ba1cab75c70646e59.jpg

include指令实现

<%@ include file="head.jsp" %>

include行为实现

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

c83533cd8e948b3114c7a242d6c87248de9.jpg

taglib指令

ee9392c618ba1cba017beca633d3f78b705.jpg

JSP行为

c421eb923dde3833a9018c7b0db8f60a1f6.jpg

“包含”行为

<jsp:include flush="true" page="/head.jsp"></jsp:include>
<!-- page属性:是必须的,被包含的文件所在路径 -->
<!-- flush属性:读入被保存文件内容前,是否清空缓存 -->

需要区别的是,include指令和include行为执行的时刻,前者是编译时包含的,包含的是源代码;后者是运行时才包含的,而且只包含运行结果。

* 采用forward来包含的:request.getRequestDispatcher("relativeURI").forward(request,response);

“使用bean”行为

409c70483576c70e0258a1e90bd7e721a4d.jpg

public class Person{
private String name;
private int age;

public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}

public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}

dc653501dee872eaa242ba78a9068000d60.jpg

id:java bean的名称(可以和类名不同),class:java bean的类名(URI),scope:java bean的可用范围

8db5337eb4f16928069d9f9faa6e33431e8.jpg 

9207816b76eca311f545784fea85ad95a6a.jpg

合理地使用作用域(page、request、session、application),可以很轻松实现丰富的效果。

”转向“行为

<jsp:forward page="/somepage.jsp">
    <jsp:param name="param1" value="value1"/>
    <jsp:param name="param2" value="value2"/>
</jsp:forward>

相当于是把dispatcher的forward方法封装了,只需要jsp标签就可以实现跳转页面的功能。还能捎带指定参数。

”JSP指令“行为

4741d720268b316bb7f4734b0f0962b04dc.jpg

JSP隐藏对象

b8d49ed46512144a7438e85aa3703bd60a2.jpg

记住了,out\request\response\config\session\application\page\pageContext\exception

out输出流

 8f0436aeae24c6a1b7f8c0341e0c27b2779.jpg

b50eb3032e09157fcd384d7868a220f87a4.jpg

request请求对象

cd96b7eb346388b174036997e3ce24ca68e.jpg

ServletRequest直接可以拿来用

response相应对象

3d6b9a8df99b37ea8519da5bcf1390aa607.jpg 

760b877cac20f80f9f94d897bca34dacd98.jpg

Config配置对象

4b24ab4ad745492a4b235870bc868390327.jpg

Session会话对象

8655b22346f0ff058cad3a588e1150f6752.jpg

Session再服务端保存用户数据,Cookie在客户端保存用户信息

application应用程序对象

f8b4fedb27ee946c0724e3440da2774a203.jpg

关于web应用程序的所有信息,因此在context上下文中取得

page页面对象

2bcb11d8fcdb6d74a27eec8a0bc79c8139d.jpg

this,即当前jsp页面

pageContext页面上下文对象

3994d46f151771c73359f10da8b508f4794.jpg

context代表一些全局的属性,代表jsp编译后的内容,能够获取很多页面内部的属性和之前提到的隐藏对象

 exception异常对象

8472fb85aaa10927205d583b2fd3b345757.jpg

就是用来处理异常的机制。但实际上经常失效。

04f55aa432691db8dbbbee45f63a7d5b314.jpg 

JSP配置

虽然JSP文件不必像Servlet一样在web.xml中配置,但是要配置也是可以的。

<jsp-file>标签

3374bec3957e9aaa56cdb59707787c351c3.jpg

和servlet基本一样,把servlet-class换成jsp-file即可。如果有init-param,在JSP中使用隐藏对象config的getInitParameter(String name)获取

<jsp-config>标签

3b8880def59d66d3c172fab90a919889428.jpg

c25cbb6b8aa5390c4956f82ddd0f2434ade.jpg

 EL表达式

6ef938347bf2449fe1a76b29e6c0f737723.jpg

用${}括起来的,只能出现在html代码中。

* 目的是为了简化短的JSP脚本(scriptlet)<% %>代码的书写

<jsp:useBean id="person" class="Person"></jsp:useBean> <!-- 先用useBean行为将Person对象放到request(如request没有,session找)中,再用EL表达式读取该对象 -->
Welcome, ${person}.  <!-- 相当于request.getAttribute("person"); -->
Your name is ${person.name}, 
your age is ${person.age}  <!-- 相当于person.getAge(); 或者 <jsp:getProperty name="person" property="age"/> -->

EL读隐藏对象

4d62746b89de8317f5f9ef9ca0bcc20c2bc.jpg

用EL表达式可以像访问Bean一样访问隐藏对象的各种参数

 00f8134f1f6fb8232b9e36851a877127793.jpg

b9210aa9cd983522d473d158d4b85119c08.jpg

标识符(前缀)表明了EL表达式读取对象的范围。不带前缀的查找会先在request中查找,再到session中查找。

EL表达式的运算

4d4b308d892c8fac1ca016e05d7ae66b71e.jpgbbd9c198caf96905bfa4b86652f2fe2a46d.jpg

基本的运算符,除法div、取余mod比较特别

726960604b452c29e38baa711928a3c0714.jpg 

注意英文缩写也能成立,gt/lt/eq/ne/ge/le

 c8d4bbeec1cda74aa35d6a8361cdad1be74.jpg

一些并列运算的连接符,字符比较时,EL表达式会调用int compare(char ss)来判断

 769814e15e0c3723d03d284298e9edad9ef.jpg

可以对数组取值,以及一个新的方法empty来判断"is empty?"

小结

JSP是简化的Servlet,最总也会被编译成servlet。JSP中java代码和html代码放在一起,能够方便地输出html。

JSP中能生面个变量和方法,初始化时调用_jspInit(),销毁时调用_jspDestroy()。JSP种内置out、request、response、session等常用隐藏对象。

JSP=>html,Servlet=>java

JSP=>显示结果,Servlet=>处理业务逻辑

转载于:https://my.oschina.net/swanf/blog/3064464

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值