首页 > 代码库 > java-web复习阶段
java-web复习阶段
JSP中的重点知识
1、经典面试题!!!:
<%! int a = 0;%>
<% int b= 0; %>
<%
a++;
b++;
out.write(a+"<br/>");
out.write(b+"<br/>");
%>
第一次访问时,a,b的值分别是多少
第二次访问时,a,b的值分别是多少
2、静态引入和动态引入的区别
3、九大隐式对象~~~
4、四个作用域~~~
page域:参考(3)
request域:一次请求响应
session域:一次会话
application域:从web项目启动之后,一直到项目关闭。
5、pageContext对象
(1)作为入口对象获取其他八个对象
(2)作为入口对象获取其他域中的数据
6、EL表达式~~~
获取数据、执行运算、获取常用的开发对象、调用java的方法
获取数组中的数据:可以通过 ${数组名[下标]}获取数组中的内容。
~~~获取集合中的数据:可以通过 ${集合名[下标]}获取集合中的内容
c:forEach items="${list}" var = "obj"
${obj.属性名}
~~~获取Map集合中的数据:可以通过 [键] 或 .键 来获取Map中数据
c:forEach items="${map}" var="entry"
${entry.key.属性} ${entry.value}
~~~获取javaBean对象的属性值:${对象名.属性名}
EL表达式调用javaBean中的方法~
6、JSTL
重点掌握 c 和fmt处理日期
核心标签 c
1、c:out ~~
输出,可以指定默认值,可以设置是否转义
2、c:set ~~
标签用于把某一个对象(基本数据类型或String)存在指定的域范围内;
或设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性值
3、c:remove~
标签用于删除各种Web域中的属性
<c:remove var="varName" [scope="{page|request|session|application}"] />
如果没有指定哪个域,则全部删除。
4、c:if~~~ if 或 if --else
test=“boolean表达式” 如果为true,显示<c:if>内容</c:if>
如果为false,不显示<c:if>内容</c:if>
5、<c:catch>~~
标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:
<c:catch var="e">
<%=1/0 %>
</c:catch>
${e.message}
6、<c:choose>,<c:when>和<c:otherwise> if-else if -...-else
7、c:forEach~~~~
标签用于对一个集合对象中的元素进行循环迭代操作,
或者按指定的次数重复迭代执行标签体中的内容。
~~~varStatus:实现单双行变色
index,count
自定义标签的执行过程~:
1、当jsp页面执行到自定义标签时,首先创建出自定义标签处理类对象,创建出来后
会立即调用setJspContext方法将当前页面的PageContext传入
2、如果当前标签有父标签,则将调用setParent()方法,将父标签传入。如果没有父标签,这该方法不执行。
3、如果当前标签有标签体,则调用setJspBody方法,将封装了标签体信息的JspFragment jspBody传入,
如果没有标签体,则该方法不调用。
4、如果具有属性,则调用属性的setXxx()方法将属性值传入。
5、最后调用doTag方法执行自定义标签的处理逻辑。
6、MVC~~~ 版本管理器—(SVN、CVS) EasyMall
Servlet+JSP+JavaBean(模式:Model-2,也被称为MVC设计模式)
C(Control)---Servlet:接收参数,控制跳转
V(View)---JSP:负责显示
M(Model)--JavaBean:处理业务逻辑,操作数据库
7、耦合与解耦
改造EasyMall--软件分层--耦合->解耦
工厂类+接口+配置文件 管理不能避免的耦合。
耦合:在软件分层中我们希望各个层应该是对立的,修改替换某一个层应该不影响到其他层,
但是如果乱传递属于某一个层特有的对象,造成层与层之间关系过于紧密,当修改某一个层的时候,
不得不修改其他的关联层,这和最初的设计思想违背。这种有害的过于紧密的层与层之间的关系被
称为耦合。
解耦:解除耦合的过程
首先要保证只属于某一个层的对象不乱传递。
对于无法比较的耦合,可以通过“工厂类+接口+配置文件的方式”将耦合提取到配置文件中
进行管理。
8、泛型~~~
Java5开始提供的新特性,表示不确定类型
注意:泛型是提供给编译器(javac)使用的,它用于限定集合的输入类型,让编译器在源代码级别上,
挡住向集合中加入非法数据。
但在编译器编译完带有泛型的java程序后,生成.class文件中将不在带有泛型,使程序的运行效率不收到
影响。这个过程被称为"擦除"
自定义泛型
3.2.1、方法上的泛型~~~
泛型需要先定义再使用,方法上的泛型需要定义在方法返回值类型的前面,通常是使用一个大写的英文
字母(sun公司推荐T),也可以是任意的字符;但是不要使用java中的关键字或常用类(eg:String)
定义在方法上泛型的作用范围是当前方法的内部。
3.2.2、类上的泛型~~~
定义在类型的泛型的作用范围是当前类的内部。
泛型需要先定义再使用,类上泛型需要定义在类名之后,通常使用大写字母。
类型定义的泛型,需要在创建对象/引用时需要明确指定泛型的具体类型。
如果在创建对象时,没有明确的指定泛型的具体类型,则默认为泛型的“上边界”。
在类上定义的泛型不能在静态方法上使用;如果想在静态方法上使用,需要自己定义。
public interface List<E> extends Collection<E>
List上的泛型也是定义在类上的泛型。
8、过滤器Filter~~~
8.1、过滤器概述
Servlet的技术规范中定义了Servlet、Filter、Listener三门技术。
过滤器可以拦截对资源的访问,一个资源可以被多个过滤器所拦截,一个过滤器也可以拦截多个资源。
拦截下来后控制是否允许访问资源(权限控制),
或者在访问资源执行之前或之后做一些其他的操作(全站处理乱码、禁止jsp页面缓存、权限控制)。
8.2、过滤器的开发
9、MD5加密
10、监听器~~~
java-web复习阶段