jsp java server page做动态页面
是j2ee的一套规范
jsp=java+jsp+html+css
JSP的作用是来替换servlet显示信息的功能
jsp本质上讲就是servlet只不过jsp擅长控制跳转 业务处理
jsp擅长前台展示
javaBean、jsp组成
jsp除了做界面还要做控制层
MVC模式:将控制层与视图层分离
1、M(Model模型)---JavaBean,java类包含三层架构
2、V View 视图层 jsp,html显示
3、C Controller控制器 servlet控制和转发请求
first.jsp---显示当前时间
1、翻译阶段 jsp--.java
当容器接受客户端的第一次对jsp请求后 先判断jsp是否存在,不存在则返回404,存在则先编译为一个servlet
2、编译阶段
将编译后的servlet的源文件编译成一个字节码文件 然后由容器将其装载进虚拟机并实例化
3、执行阶段
调用翻译后的servlet的对应init()、service方法、destory()
补充:
①如果被请请求的jsp源文件内容发生变化,那么要重新将jsp翻译成servlet,再编译,再装载和实例化,最后运行servlet
②如果第二次请求jsp时 此时若被请求的jsp已经有对应的servlet实例,那么久直接运行该servlet
script.jsp
jsp中的元素:脚本元素、指令元素、动作元素
1、脚本元素:嵌套java代码
a、声明、语法:<%声明中的内容%>
作用:在servlet中声明一些成员变量、成员方法和内部类
注意:不能使用表达式和隐含对象
b、表达式
<%=expression%>
作用:将pression输出到out流中
expression可以是算数逻辑 常量 关系表达式 变量 有返回值的方法。
注意expression都一律被转换为字符串后再写到out输出流中
expression中不能有分号
jsp中的9种隐含对象
page当前的jsp页面,
pageContext 当前jsp页面的上下文
request 封装请求的信息
response 封装响应
session 会话
application 指web应用就是servletContext
out 输出流
config 配置信息
exception 异常信息
当isErrorPage=true 时 才可以使用该对象
特点:表达式翻译进servlet后变成了out.print(exception)
该代码处于-jspservice方法中
脚本(Scriptlet)
语法<%java code%>
作用:在jsp中嵌入任何java代码 不能嵌入成员变量 成员方法 所以在此模块声明的变量为局部变量
任何逻辑的代码都可以放在脚本标签中
如for循环、匿名内部类 连接数据库 创建对象等
特点:脚本被编译进servlet的jspservice方法中
指令元素:指令用来提供整个jsp网页相关的信息
并且用来设定jsp页面的相关属性
page指令
可以写多个page标签 多个import
语法<%@page attributeName=""%>
作用:利用page指令中的属性可以和容器进行通信,这些属性的设置,对整个jsp都有影响。
page指令中的属性:
language=java 定义编程语言 目前只能是java
contentType="text/html,charset=UTF-8"
定义response中的内容类型和编码格式 和jsp页面的编码格式
isErrorPage="true|false" 默认为false
import=""导包
session="true|false"规定是否可以使用session
默认为false
buffer="none|8kb|sizekb"默认8kb
指定到客户端输出流的缓冲模式
如果是none则不缓冲,如果指定数值
那么输出就用不小于这个值得缓冲区进行缓冲
autoflush=“true|false” 默认为true true:当缓冲区满时到客户端的输出被刷新false
false:当缓冲区满时出现异常 表示缓冲溢出
isThreadSafe="true|false"
用来设置jsp文件是否能支持多线程的使用
如果为true 那么一个jsp能够处理多个用户的请求
反之则一次只能处理一个请求
info=“text”
关于jsp页面的信息 定义一个字符串 可以使用getServletinfo获得
extends=“。。。。”
继承某个父类
isELIgnored="true|false"
指定EL表达式语言是否可以忽略 如果true则忽略 反之可以使用EL
include指令
<%@include file="url"%>称之为静态导入(静态包含)
作用在一个页面中导入另一个页面的内容
特点:jsp翻译为servlet后就将被导入的页面内容嵌入到servlet中 导入时间发生在翻译阶段
被导入的资源 html xml jsp等
优点执行效率高 之翻译一次
缺点 如果导入多个页面 当其中一个页面内容发生变化 就需要将所有页面都翻译一次
teglib指令
<%@ taglib uri="" prefix=""%>
指定在jsp中要使用的标签库描述文件 *.tld 的路径
动作元素 jsp自带的标准标签
语法<jsp:tagName/>
动态导入 动态包含
语法<jsp:include page="url" fluse="true|false"/>或者<jsp:include page="url" flush="true|false">{<jsp:param,,/>}
</jsp:include>
特点:动态导入发生在执行阶段
也就是运行servlet的时候才动态生成被导入的页面内容,然后嵌入到调用页面,最后将两个页面一起,返回给客户端
注意:在翻译阶段并没有生成被导入的页面的内容。没有跳转 请求还是同一个
缺点:执行效率没有静态导入高
优点:如果没有导入页面内容发生变化 调用页面不必重新编译
foward(服务器内部跳转)
语法<jsp:foward page="url"/>或者
<jsp:foward page="url">{<jsp:param\\\>}*
</jsp:forward>
jsp中的注释
<!---->
只能注释html和xml中的静态内容 不能注释脚本元素 指令元素 和动作元素 如果注释 他们还是会被编译执行
隐藏注释
<%-- --%>
可以注释jsp中的所有内容
脚本注释
<%
//
/**/
/**
*/
%>
三种注释的区别
servlet源文件 客户端页面源文件 浏览器显示
html/xml 出现 出现 不显示
隐藏注释 不出现 不出现 不显示
脚本注释 出现 不出现 不显示
EL:通过el标签来取数据和输出数据
简化代码,尽量在jsp中不适用java代码
语法:${输出数据或对象 }
webContent/WebRoot
文件夹:el
jsp:el.jsp
一、el中的表达式
a、算数表达式
+、-、*、/
b、关系运算符
==或eq、!=或ne、<或lt、> 或gt、<=或le、>= ge
c、逻辑运算符
&&或and、||或or、!或not
d、判空运算符
empty
<%empty name>
二、表达式可以使用的隐含对象
a、pageContext jsp页面的上下文,唯一一个jsp和el都有的隐含对象
${pageContext.servletContext/session/getrequest }
b、param 把请求中的参数和单个值 进行映射
${param.name }
c、paramValues把请求中的参数和一个array值进行映射 获取多选框的值
${paramValues.hobby }
d、cookie 把请求中的cookie和单个值进行映射
${cookie.name }
e、initParam把web应用上下文的初始化参数和单个值进行映射
${initParam.name }
f、pageScope把page范围中的key和value进行映射
${pageScope.name }
g、把request范围内的key和value映射
${requestScope.name}
h、sessionScope session范围内key、value映射
${sessionScope.name}
i、applicationScope application范围内key value映射
${applicationScope.name}
如果没有指出范围,默认从page request session application开始查找,若找不到就往更大的范围找
jsp中使用javabean 创建和使用javabean对象的时候尽量不使用java代码
javaBean 提供属性 构造器
set get方法 实现序列化
1、语法
jsp中获得或者创建javaBean对象
<jsp:useBean id="user" class="包名+类名" scope="page|request|session|application"/>
id user的对象引用
class 包+类名
scope scope默认为page
user对象的存放范围
作为该对象放置在scope中的属性名
scope.setAttribute("",);
2、执行流程
user!=null可以使用该对象 在页面上输出其属性值
简化jsp代码,且JAvaBean永远不会为null
设置javaBean对象中的属性值
(1) 方式一
语法: <jsp:setProperty name="对象引用"
property="propertyName" value="">
例如: <jsp:setProperty name="user"
property="name" value="jack"/>
执行流程: user.setName("jack");
(2) 方式二
语法: <jsp:setProperty name="对象引用"
property="propertyName"/>
例如: <jsp:setProperty name="user"
property="name"/>
name: 它的值和标签useBean中id的值对应,
表示User对象的引用。
property: 它的值和setName()有关。
执行流程:
a) String value =
request.getParameter("name");
b) 若value != null, user.setName(value);
c) 若value == null,不调用setName()。
用途: 将表单中提交的字段信息封装到
JavaBean对象的属性中。
(3) 方式三
语法: <jsp:setProperty name="对象引用"
property="propertyName"
param=""> param="paramName"/>
例如: <jsp:setProperty name="user"
property="name"
param="username"/>
执行流程:
a) String value =
request.getParameter("username");
b) 若value != null, user.setName(value);
c) 若value == null, 不调用user.setName();
(4) 方式四
语法: <jsp:setProperty name="对象引用"
property="propertyName"
value="<%=\"zhangsan\" %>">
或者value='<%="中国" %>'
例如: <jsp:setProperty name="user"
property="age" value="<%=30%>"/>
执行流程: user.setAge(30);
(5) 方式五
语法: <jsp:setProperty name="对象引用"
property="*"/>
例如: <jsp:setProperty name="user"
property="*"/>
"*"匹配了id name password age gender address
(根据User中所有set方法的property进行匹配)
(6) 方式六
语法: <jsp:setProperty name="对象引用"
property="name" value="${}"/>
例如: <jsp:setProperty name="user"
property="address"
value="${address}"/>
使用el表达式来获取address的值,从四大范围中
查找address对象,如果找到调用user.setAddress(address);
输出javaBean对象中的属性值
<jsp:getProperty name="对象引用" property=“propertyName”/>
<jsp:getProperty name="user" property="name"/>
执行流程
1、Object o = user.getName();
2、将0全部换位s
3、out.print(s);
4、使用标签<jsp:useBean>的四种方式
1) <jsp:useBean id="对象引用"
class="包名+类名"
scope=""> scope="page|request|session|application"/>
特点: 通过new来创建一个对象
2) <jsp:useBean id="对象引用"
type="JavaBean实现的接口或继承的父类"
scope="page|request|session|application"/>
特点: 如果scope中所引用的对象不存在,
不会去自动构造一个对象
例如: List list = new ArrayList();
session.setAttribute("list",list);
<jsp:useBean id="list"
type="java.util.List" scope="session"/>或者
<jsp:useBean id="list"
class="java.util.ArrayList"
scope="session"/>
3) <jsp:useBean id="对象引用"
class="包名+类名"
type="JavaBean实现的接口或继承的父类"
scope="page|request|session|application"/>
特点: 通过new来创建一个对象
4) <jsp:useBean id="对象引用"
beanName="包名+类名" >
type="JavaBean实现的接口或继承的父类"
scope="page|request|session|application"/>
特点: 通过反射构造一个对象
jsp周末总结
最新推荐文章于 2024-07-12 15:51:39 发布