jsp jstl el ognl

jsp+servlet+el+jstl学习笔记2009-12-17 10:561.myeclipse中编译器不进行语法检查和智能提示,是因为项目中的.classpath和.mymetadata文件不存在

2.biz用于进行数据处理,而servlet也就是web用于进行页面传值的处理,它将具体的数据和业务处理联系起来。 它用于接受数据和显示结果,biz用于进行数据处理的抽象。注意不要架空 sevlet

3.新型学习模式,网络笔记法,这样只要访问相应的网络空间就能够知道相应人的学习进度,如果能开发出一种适应于学习的远程协助,就能够将这种学习模式扩大

4.使用servlet进行处理后,显示结果可以直接输出HTML文本响应,包括js代码!
PrintWriter out=response.getWriter();
out.println("<script type='text/javascript'>alert('adsf')</script>");

5.No suitable driver found for jdbc
表示Tomcat没有找到相应的jdbc,需要把jdbc放到Tomcat的Lib目录下(使用Properties需要把jdbc放到Tomcat的lib目录下)

6.out.close();这句造成响应终止的原因:response也不过是一个输出流而已,out.close()会关闭当前线程中的所有输出流,所以会关闭response。

7.会话超时问题是存在的,所以要预防用户在某个页面待的时间过长后造成的会话终止的情况,至少应该提示用户会话已经结束

8.servlet中的页面跳转要执行一次,就要在跳转后下面仍有代码的情况下, 在跳转代码后加return

9.路径问题总结:

首先,考虑 请求方式(考虑存储数据的方式)+给谁看+使用路径是相对还是绝对,再考虑根据资源的编码浏览器如何解析

请求方式:
a.html标签的链接路径如src,href,action(浏览器先获得HTML数据流,再根据资源的url进行请求)
b.请求转发
c.重定向

给谁看(将url解释执行的第一个人)
a.浏览器
b.容器

使用的路径:
a.相对
b.绝对

资源编码:
a.内置编码,用于交给浏览器继续请求
b.无内置编码,浏览器根据地址栏的资源目录和相对路径信息,来拼装绝对路径并请求资源

流程:

在编辑转发页面时:
对于要展示的页面路径,应根据是否需要在request中携带信息来决定使用 请求转发/重定向;
重定向,交给浏览器,通过"/"+request.getContextPath()+"/"+页面名称,来获得其资源URL绝对路径。因为考虑到应用程序名称硬编码会造成应用程序名称变动困难的影响,所以一般采用此种方式获得绝对路径;
请求转发,交给容器,可以使用相对路径,也可以使用绝对路径,一般用相对路径,所以就要求请求相应的页面在编码上要

给予浏览器,一个相对路径标准而不要用其默认的地址栏获取URL进行拼装的方法,通过在页面中编写:
<%
String path=request.getContextPath();//获取以项目名开头以此资源上级目录结尾的路径
String BasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

并在Head中编写
<base href="<%=basePath%>">
于是浏览器就能够正确定位的资源的位置 

在编写展示页面HTML标签时:
直接交给浏览器,使用/代表了容器的webapps目录,所以需要加上工程名(一定是工程名,不一定是项目名称)


10.include的运用
include表示的是在使用include指令的地方插入一部分代码,代码的来源就是src的指向的文件的所有内容
要注意使用include指令的作用是把include拼装页面,所以要满足HTML页面的标准,标签个数,位置一致的原则

11.iframe的运用
iframe多用于把一个页面放在一个叫做iframe的容器内,通过控制点击iframe所在页面的超链接的Target属性的值,来控制

iframe所盛放的页面内容,并且使用iframe盛放的页面是完全的页面,可以进行单独的编写


开发中经常通过iframe+include来实现框架的效果

如果要用按钮来控制iframe的连接,只要把按钮之外用超链接圈套就OK

js获得iframe的Target
var w=window.frames["IFRAME1"];

w.location="frmNextPage.aspx";


12.java组件的概念,如何在组件的层次上进行运用


13.编码的概念,page指令中的enConding指令的作用是指示Tomcat解释翻译在程序此文件采用的编码

14.项目运行中更改文件似乎有效?有效,tomcat5.x有效

15.以后开发尽可能使用include+iframe开发,而搭建include和iframe的页面 尽量使用Div+CSS布局、也可以用表格

16.命名ID,项目名缩写,

17.jsp页面在应用程序运行时可以查看,但不能查看创建的页面

18.获得当前日期
import java.text.SimpleDateFormat;

Date now=new Date();
SimpleDateFormat formater=new SimpleDateFormat("yyyy年MM月dd日");
String str=formater.format(now);

19.出现问题,先将问题归类,看以前解决类似的问题的方法能否用在此问题中,或者说是将现有问题用以前解决问题的方式解决,

看是否能成功,变形

20.使用iframe+include开发,要控制iframe的src,用jsp获得到servlet要显示的页面(存进了参数里),然后动态设置iframe的

src属性,就能完成页面的变化


21.jsp流程

用户请求资源URL通过浏览器发送到服务器——服务器受到请求进行资源解析,查看是否存在(包括在web.xml中查看是否请求的是

servlet),如果找到资源,将jsp,servlet文件编译成.java文件,再把.java解释成.class文件,容器再通过执行.class文件向浏

览器输出html的二进制数据流,浏览器收到开始解析——用户在资源上进行操作,执行相应的js代码,动态嵌入到浏览器的js脚本区

执行——发送第二次请求


所以:
jsp,servlet文件,虽然是用户请求的资源,但是其中写的动态程序 只有在生成html数据流的过程才存在;而javascript,也是html

文本,只不过这种html文本是动态的嵌入到浏览器中 并且能接受用户si的


22.使用iframe+include开发餐馆系统的流程是:
index.jsp页面的iframe指向login.jsp,
A.设置iframe的name,将要在iframe中显示的页面的链接源(如超链接,form)设置其Target属性指向此name

B.如果使用的是请求转发,直接转向到相应页面就OK,如果使用的是重定向,就要设置执行提交的源的Target,必须设置才能正确,

或者通过js代码实现,如果需要携带参数,就用请求转发,就可以不用Target属性,如果用重定向,就必须要有Target属性

C.在各个跳转到的页面通过javascript控制显示信息alert(),要有非空判断

D.在iframe的页面中执行的页面跳转 无论采取什么方式都会显示在iframe中;而在iframe外面的跳转无论什么方式都会显示在整个浏

览器中,所以对于外部的链接请求要用target来设置




总结:在设计的时候要从是否携带数据的方面考虑是否使用Target属性,如果需要携带数据,就必须用请求转发,就不需要使用

Target属性;如果不需要携带数据,就要设置Target属性!

试验成功!
结论是正确的,详见target项目


23.out对象,和request对象,response执行的页面跳转一样,属于同级别,不能输出out的同时又输出页面跳转

24.jsp语言以及以后要学的php,EL等都是为输出HTML文本的,所以<%=mess %>输出的是个值,字符串,如果要作为参数传入

javascript,只能传入基础数据类型,待检验

25.form的target要是设置的话,如果在servlet的处理中跳转到的页面将会显示在from的所在页面的位置,同样,超链接的target要

设置的话,也是一样

26.使用iframe 不同于include的预编译,可以存在HTML基本标签

27.小脚本的弊端在于 非模式化 或者说是相对于其改进方法而言的缺点,因为程序逻辑是程序员构建的,美工需要先了解结构和逻

辑才能掌握页面内容,而如果使用javaBean+EL+Jstl就能给美工一个功能端口,他只要知道这个规则,就能知道这里是做什么的而不

需要确切了解逻辑组织过程

28.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 使用Jstl固定这么写在文件头

29.反射:
原理:
通过反射获得Class对象,通过Class对象获得所传字符串表示的类的父类对象或者获得字符串表示的类的方法/字段,并且获得功能

!可以通过遍历方法来实现

Class对象是所有类的模版,他能真实的反映出类的结构

1.获得Class对象
Class c=Class.forName('完全限定类名');
或者 Class c=对象.getClass();

2.根据完全限定名获得字符串表示的类的父类对象
父类 f=(父类)c.newInstance();

3.使用完全限定名表示的类的功能

a.需要已知方法名和方法参数列表或者已知方法索引和方法参数列表

java.lang.Reflect.Method me=c.getMethods();
for(Method m:me){
if(me.getName().equals(''))
m.invoke(参数列表);
}

b.需要已知方法名和方法类型列表

java.lang.Reflect.Method m=c.getMethod("方法名",new Class[]{参数类型列表})
m.invoke(参数列表);

4.使用完全限定名表示的类的属性

待研


30.
使用EL
$(pageContext.request.requestURL)
是因为pageContext中存在request.getRequest方法,request又存在requestURL方法
所以在使用request中的方法的时候要注意使用的是get开头的方法,并且在访问的时候要去掉get并且将去掉后的大写字母改成小写

使用EL获取方法
要求:
1.使用<内置隐式对象>的方法,就必须要保证存在get隐式对象()的方法,其次调用隐式对象的方法必须是以get开头,并且是无参的

2.使用javaBean的方法,直接调用方法即可


31.javaBean
在数据封装上,和普通实体类效果一致

对于和jsp标准动作的衔接(被jsp翻译器通过反射衔接)上,javaBean必须满足:
1.存在无参构造函数
2.存在对jsp标准动作属性存取值的get/set方法,并且要满足命名规则(前2位不能是连续的大写字母)


32.使用标准动作,EL,JSTL要多注意查看生成的页面的class代码,上面有出错的原因~

33.jsp标准动作,EL,JSTL都是对javaBean的get,set方法以及无参构造函数有要求

34.学习CSS+DIV布局技术,全面掌握标准动作,因为设计模式不仅仅是MVC还有Model1的View+Model的开发

35.jsp标准动作,EL,JSTL的功效

jsp标准动作:创建对象,属性赋值,页面跳转,输出属性值到HTML

EL:获得内置对象中存储的对象,获得内置对象的无参get方法的返回值;获得javaBean的方法返回值;输出值到jsp标准动

作,jstl,HTML

jstl:创建对象,局部变量,输出变量值到HTML,删除变量,条件判断,迭代操作

36.
<c:set>标签用于保存数据。
  语法1:将value的值储存至范围为scope的varName变量之中:
  <c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
  语法2:将本体内容的数据储存至范围为scope的varName变量之中:
  <c:set var="varName" [scope="{ page|request|session|application }"]>
  … 本体内容
  </c:set>
  语法3:将value的值储存至target对象的属性中:
  c:set value="value" target="target" property="propertyName" />
  语法4:将本体内容的数据储存至target对象的属性中:
  <c:set target="target" property="propertyName">
  … 本体内容
  </c:set>


37.jstl用到索引的遍历方式:
第一种:使用内置索引
<c:forEach var="list" items="${list}" varStatus="status">
    <c:out value="${status.index+1}"/>
</c:forEach>

第二种:自定义索引
<c:set var="i" value="1"/>
<c:forEach var="beans" items="${list}">
    <tr bgcolor="#FFFFFF" class="font">
        <td class="font"><div align="center"><c:out value="${i}"/></div></td>
    </tr>
<c:set var="i" value="${i+1}"/>
</c:forEach>

第三种:迭代方式 获得总值
<c:set var="sum" value="0"/>
<c:forEach var="i" begin="1" end="100" step="1">
<c:set target="sum" value="${sum+i}"/>
</c:forEach>

其他遍历

List:
<c:forEach var="student" items="${sessionScope.list}"
varStatus="status">
<font size=5 color=blue> index:${status.index }<br>
ID:${student.id }<br> Name:${student.name }<br>
Country:${student.address.country }<br>
City:${student.address.city }<br>
Street:${student.address.street } <br></font>
</c:forEach>


Map:
<c:forEach var="entry" items="${sessionScope.map}"
begin="0" end="4" step="1" varStatus="status" >
<font size=5 color=red> index:${status.index }<br>
ID:${entry.key }<br> Name:${entry.value.name }<br>
Country:${entry.value.address.country }<br>
City:${entry.value.address.city }<br>
Street:${entry.value.address.street }<br> </font>
</c:forEach>


Array:
<c:forEach var="color" items="${sessionScope.colors}">
${color}<br>
</c:forEach>




你可能感兴趣的:(jstl)