JavaWeb系列之九(jsp,javabean,el表达式)



1.jsp:java server pages,java服务器端的页面

sun公司提供开发动态网站的技术servlet jsp

jsp会编译成servlet,会放到tomcata的work目录

jsp的包含:html+java代码+jsp自身指令

有三种方式:

<%! %>

<% %>

<%= %>

题目

<%=x %>//把成员变量x的值输出

<% x=5; %>//把成员x变量赋值为5

<% int x = 10; %>//在service方法里面定义一个x值为10;

<% this.x = 20; %>//把成员变量x的值赋值20

<%=x %>//把方法里面定义的变量x输出

<%! int x = 0; %> //定义一个成员变量x值是0

A.0 10  B.10 20  C.0 20  D.20 0

最终的结果是 0 10

2.jsp的注释

jsp:java server pages,java服务器端的页面

在jsp里面可以写html注释,可以写java注释,可以写jsp自身的注释

三类注释在jsp执行过程中,都会有

<!-- --><%-- jsp的注释--%>java的三只注释

jsp编译成seervlet之后,html存在,java注释存在,但是jsp注释就不存在

servlet显示在页面上,html注释存在,java注释和jsp注释都没有了

<!-- html注释 -->

<!-- java的注释 -->

<%

//单行注释

/*多行注释

*/

/**文档注释

*/

%>

<!-- jsp的注释 -->

<%--jsp的注释 --%>

3.jsp的指令

语法:<%@ 指令的名称 属性="属性值" %>

jsp的质量包含三个指令:

page:设置jsp页面的信息,<%@ page 属性="属性值" %>

page指令里面的属性:

language:支持的语言类型,现在只有java,

extends:jsp编译成的servlet会继承哪个类:默认HttpJspBase

session:在jsp里面是否可以直接使用session对象,session属性值true | false

import:倒入一个包,可以写在一起用逗号隔开

可以分开导入包

<%@ page import="java.util.Date"%>

<%@ page import="java.util.ArrayList"%>

<%@ page import="java.util.List"%>

可以写在一起

<%@ page import="java.util.List,java.util.ArrayList"%>

buffer:输出的缓冲区大小 8kb;

autoFulsh:超出缓冲区是否正常使用

erroPage:如果当前的jsp页面出现异常,到错误页        errorPage="错误页面"

isErroPage:在错误页面中,是否可以显示错误信息。这个属性一般是程序员调试程序时候使用,把程序给客户时候,

这个属性一定设置成false

值 true和false,默认值是false,不会生成下面的代码

当在错误页面中,设置这个属性的值true之后,生成的servlet里面,多出几行代码

java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

if (exception != null) {

response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

}

contentType:jsp最终编译成servlet,最终使用浏览器编码

pageEncoding:jsp编译成servlet,设置使用的编码

isElIgnored:jsp里面死否忽略el表达式,改成true,写el表达式,把它当成表达式

include:jsp包含其他的jsp页面,

jsp包含其他的jsp页面写法:<%@ include file="包含的页面">被包含的页面不需要写其他的内容,只要写包含的内容,最终只编译成一个servlet

静态包含的过程,相当于代码复制:

包含不能传递参数,不能是变量,只需要写文件内容

taglib:引入标签库

替代掉<%%>写法:<%@ tagilb="标签库" prefix="标签名称"%>

4.jsp的内置对象

在jsp里面的可以直接使用的对象

resquest:HttpServletRequest里面代表请求,获取提交的参数,是一个域对象,设置值和取值

response:相当于HttpServletResponse,代表响应,向页面输出内容

session:相当于servlet里面的HttpSession,也是域对象,范围会话

congfig:相当于ServletConfig,获取servlet名称,获取初始化参数

application:相当于 servlet里面servletContext,域对象,范围整个web项目,获取全局初始化参数

exception:获取异常欣喜,getMessage方法,需要把isErrorPage设置成true

page:当成运行的servlet对象

out:向页面输出内容,out.write()代码,out使用的是Jspwrite对象,使用reaponse.getwrite()使用printWrite对象,也可以向页面输出

输出机制:首先产生两个缓冲区,一个是out缓冲区,一个是response缓冲区,out不会直接输出,首先把内容放到out缓冲区,然后再放到response的缓冲区,最终通过缓冲区想页面输出

pageContext:

父类 JspContext

pageContext:只能在jsp里面使用,servlet里面没有页面的概念

作用范围:当前的jsp页面

设置值 setAttribute(java.lang.String name, java.lang.Object value)

获取值 getAttribute(java.lang.String name)

代码

<!-- 向pageContext域里面设置值 -->

<%

pageContext.setAttribute("page1", "itcastpage1");

%>

<!-- 使用传统方式获取 -->

<%=pageContext.getAttribute("page1") %>

<hr/>

<!-- 使用el表达式获取 -->

${page1 }

pageContext:可以向其他域对象里面设置值

setAttribute(name,value,scope)第一个参数:名称 第二个参数:值 第三个参数:域名称

pageContext:可以向其他域对象里面获取值 1.${名称}就可以获取值 2.两个参数:第一个参数是域对象的名称,第二个参数是哪个域对象

findAttribute():表示得到域对象里面最小的值

pageContext:可以获取其他的八个内置对象  :pageContext.getSeesion

四个域对象

pageContext : 范围是jsp页面,这个对象只能在jsp里面使用

request :范围一次请求,经常和转发一起使用

session  :范围一次会话

application:范围整个web项目

四个域对象都使用setAttribute设置值,使用getAttribute获取值

5.jsp的动作标签

在jsp里面有6个动作标签:

<jsp:动态标签名称 属性="属性值"></jsp:动态标签名>

<jsp:forward>:表示转发的操作

- jsp:forward page="转发到路径 不要带项目名称"></jsp:forward>

- <!-- 使用jsp里面的forward的动作标签 -->

<jsp:forward page="/jsp/hello.jsp"></jsp:forward>

<jsp:include>:表示包含

<jsp:param>:表示页面传递参数

* 代码   <!-- 使用jsp里面的forward的动作标签 -->

<!-- 相当于在hello.jsp?id11=itcast200 -->

<jsp:forward page="/jsp/hello.jsp">

<jsp:param value="itcast200" name="id11"/>

</jsp:forward>

第二个类:操作javabean的动作标签

<jsp:useBean>:操作哪个javabean

<jsp:setProperty>设置javabean的属性

<jsp:getProperty>得到javabean的属性

6.JavaBean的简介

javabean就是一个java类,但是要遵循一定的书写规范。

遵循的规范:必须有一个公开的没有参数的构造方法。javabean里面私有的,属性必须是通过公共方法暴露出来

javabean的作用:存值和取值,封装数据

使用传统方式来存取数据,

使用jsp动作标签封装数据时候,表单输入项的name值要一样

7.javabean的内省(完成javabean的封装)

完成javabean数据的封装

使用到类

Introspector:

方法

BeanInfo getBeanInfo(Class<?> beanClass) :得到javabean里面的内容

参数 Class类,javabean字节码文件,

三种方式可以得到Class类 类名.class   对象.getClass()  Class.forName("包类路径")

BeanInfo

PropertyDescriptor[] getPropertyDescriptors()  :得到属性描述,返回数组

PropertyDescriptor

Method getReadMethod()  :表示读的方法,javabean里面的getXX方法

Method getWriteMethod()  :表示写的方法,javabean里面的setXX方法

Method

invoke(Object obj, Object... args) :让方法去执行

8.BeanUtil框架的使用

作用:封装数据到javabean

是apache组织开发的一个小型操作javabean的api

如果想要使用beanUtils,必须要导入支持的jar包(导入两个jar包)

web项目里面如何导入jar包

把需要导入的jar包,复制到webroot--WEB-INF--lib目录下面,自动把jar包导入到项目中

注意:表单输入项name的值必须要和javabean里面的属性名称要相同

使用到的类 org.apache.commons.beanutils 下面

BeanUtils

populate(Object bean, Map properties):完成数据的封装

两个参数:第一个参数是javabean对象,第二个参数表单输入的值和输入的值,map集合

创建jsp页面,写提交表单,表单提交到servlet里面,在servlet里面使用框架实现封装数据到                javabean操作

代码

//得到表单提交的数据

//创建javabe对象

//使用框架实现封装

Person p12 = new Person();

try {

BeanUtils.populate(p12, request.getParameterMap());

} catch (Exception e) {

e.printStackTrace();

}

使用框架,如果属性的类型是基本数据类型和String类型完成封装,但是如果不是这些类型出现转换的异常

ConvertUtils

register(Converter converter, Class clazz)

两个参数:第一个参数是转换器,第二个参数是转换类型Class

String d1 = (String) o;

//把字符串的日期类型转换成Date类型

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

Date date = null;

try {

date = format.parse(d1);

} catch (ParseException e) {

e.printStackTrace();

}

return date;

9.el表达式

用途:获取域对象里面的值

语法: ${域对象的名称}

(1)使用el表达式获取域对象的值

代码

<!-- 向四个域对象里面设置值 -->

<%

pageContext.setAttribute("itcast", "pagevalue");

request.setAttribute("itcast", "requestvalue");

session.setAttribute("itcast", "sessionvalue");

application.setAttribute("itcast", "applicationvalue");

%>

<!-- 使用el表达式获取值 -->

${pageScope.itcast }

${requestScope.itcast }

${sessionScope.itcast }

${applicationScope.itcast }

(2)使用el表达式获取域对象里面的数组的值

使用数组的下标获取,如果数组的下标不存在,返回空字符串""

代码

<!-- 使用el表达式获取域对象里面的数组的值 -->

<%

String[] arr = {"tom","jack","lucy"};

//把这个数组放到域对象里面

request.setAttribute("arr", arr);

%>

<!-- 使用el表达式获取数组里面的值 -->

${arr[1] }

(3)使用el表达式获取域对象里面集合里面的值

向域对象里面放list集合

使用集合下标获取值

代码

<!-- 使用el表达式获取域对象里面list的值 -->

<%

List list = new ArrayList();

list.add("AAAA");

list.add("TTTT");

list.add("wwww");

request.setAttribute("list", list);

%>

${list[10] }

向域对象里面map集合

<%

Map map = new HashMap();

map.put("aaa", "AAAA");

map.put("bbb", "BBBB");

map.put("ccc", "CCCC");

request.setAttribute("map", map);

%>

${map.aaa }

(4)使用el表达式获取域对象里面的对象的属性的值

代码

<!--  使用el表达式获取域对象里面对象的属性的值-->

<%

Person1 p11 = new Person1();

p11.setId("404");

p11.setUsername("mary");

p11.setAge("500");

request.setAttribute("p11", p11);

%>

${p11.id }

${p11.username }

${p11.age }

(5)执行运算

算数运算 + -

代码

<!-- 执行算术的操作 -->

<%

pageContext.setAttribute("aa", "11");

pageContext.setAttribute("bb", "22");

%>

${aa+bb }

关系运算 > < <= >=

逻辑运算 &&  ||

三元运算符(三目运算)

${ user != null ? user.name : "" }

${ empty user ? user.name : "" }: empty表示空

${not empty user  ? user.name : "" }: not empty不是空

10、使用EL表达式操作web开发常用的对象

el表达式里面提供了11个隐含对象

param:得到提交的参数,相当于request.getParameter();

paramValues: 得到多个值,相当于request.getParameterValues();

header: 得到头信息,相当于request.getHeader();

initParam: 得到全局的初始化参数

pageContext:得到内置对象

<!-- pageContext对象 -->

${pageContext.request }

${pageContext.response }

时间: 2024-10-08 02:21:42

JavaWeb系列之九(jsp,javabean,el表达式)的相关文章

jsp JavaBean el表达式

JSP三大指令 一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! > contentType:它表示添加一个响应头:Co

JSP系列:(4)JSP进阶-EL表达式和JSP标签

jsp的核心语法: jsp表达式 <%=表达式%>和 jsp脚本<%>. 以后开发jsp的原则: 尽量在jsp页面中少写,甚至不写java代码. 目标: 1)使用EL表达式代替jsp表达式. 2)使用JSP标签代替jsp脚本. 1.EL表达式 1.1.EL作用 使用EL表达式替换掉jsp表达式 EL表达式作用: 向浏览器输出域对象中的变量值或表达式计算的结果!!! 语法: ${变量或表达式} <%@ page language="java" import=

JSP的EL表达式语言

以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html: JSP表达式语言(EL)可以方便地访问存储在JavaBean组件中的应用程序的数据.JSP EL允许创建表达式(a)算术和(b)逻辑.在一个JSP EL表达式中,可以使用整数.浮点型数字.字符串.内置的布尔常量值为true和false和null. 一.简单的语法 通常,当给JSP标签指定一个属性值时,只需使用一个字符串.例如: <jsp:setProp

jsp中el表达式遇见的问题

概述: 之前在jsp页面展示中就遇见过几次这样的问题,今天来说一下我遇到的 org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/list.jsp at line 58 异常: 首先这个错误出现在访问controller层的list.action方法: 在输入http://localhost:8080/Smil/list.action 后就出现了如下的错误: 错误原因是:

JSP:使用EL表达式调用java函数

JSP:使用EL表达式调用java函数 使用一个例子 编写一个使用JSP表达式语言的JSP程序,输入一个数字,提交后输出该数字的九九乘法表. java代码实现打印9*9乘法表 Solution.java package method; public class Solution { public static String Mul99(int n){ String result=""; for(int i=1;i<=9;i++){ int temp=i*n; result=res

JSP、EL表达式的入门(要用)

2018-08-12   22:55:23 * JSP.EL表达式的入门(要用)    * Servlet/JSP  是两种动态的WEB资源的两种技术.   * 使用Servlet 生成HTML的页面    response.getWriter("<form action='' method='post'>");    response.getWriter("<input type='text' name='username'>");  *

JSP 中EL表达式用法

JSP 中EL表达式用法详解 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =u

深入分析JavaWeb Item19 -- 基于Servlet+JSP+JavaBean开发模式的用户登录注册

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat

javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JSP+JavaBean开发模式,通过这个用户登录注册程序综合案例,把之前的学过的XML.Xpat