最近也是一直在学习java的东西,有很多收获,先把这些东西记录下来,方便以后复习。
EL表达式
-
session
和cookie
-
css中hover
和js中的hover
form表单的target
JSTL
- 转发和重定向
EL表达式
(1)获取数据:EL主要用于替换JSP页面脚本表达式,从各种web域中获取数据。
(2)格式:${ 标识符},EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据下面贴出代码解释一下:
在Servlet中设置setAttribute
throws ServletException, IOException {
String code = req.getParameter("activationCode");
try {
userService.activation(code);
req.setAttribute("code", "success");//通知msg页面显示对号
req.setAttribute("msg", "恭喜你,注册成功,请马上登陆!");
} catch (UserException e) {
//说明service抛出异常
req.setAttribute("msg", e.getMessage());
req.setAttribute("code", "error");
}
return "f:/jsps/msg.jsp";
}
那么在JSP页面中就可通过${code}获取到"success"
,很神奇对不,这个和iOS中的是不一样的,刚开始总觉得很别扭,理解其中的道理便会很容易,当然我现在也是半吊子0.0。
session和cookie
session和cookie是web开发中必须用到的技术,用来跟踪用户的整个会话。session是保存在服务器端的,cookie是保存在客户端,也就是浏览器中。
以下内容摘抄自知乎,非商业用途
https://www.zhihu.com/question/19786827/answer/28752144
- 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
- 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
- Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。所以,总结一下:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
css中hover和JS中hover的区别
在css和js中都可以为图片设置鼠标移除、进入的图片,但是在css中国hover是一种伪类,在JS中hover是一种事件,这是区别。代码:
在regist.css
中
在这里要注意一定要设置image的宽高,不然即使设置图片也不会显示
在
regist.js
中
在这里hover是jquery的方法,这里直接用jquery了,js等以后在慢慢研究吧。
form表单中target
查了查资料,也明白了target和action的区别,action是将刷新进入另一个界面,而target是规定在哪里打开这个页面,可以在当前窗口,也可以是另开一个窗口,下面的都是target的属性。
JSTL
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已!
在MyEclipse中是不需要导包的,如果是其他编译器需要导入jstl-1.2.jar
JSTL一共包含四大标签库
core:核心标签库,我们学习的重点;
fmt:格式化标签库,只需要学习两个标签即可;
sql:数据库标签库,不需要学习了,它过时了;
xml:xml标签库,不需要学习了,它过时了。
在core中常用的标签,详情看这里
http://blog.csdn.net/qq_25827845/article/details/53311722
我在学习中只用到了forEach
<c:forEach items="${parent}" var="parent"> <c:forEach items="${parent.children}" var="child"> bar.add("${parent.cname}", "${child.cname}", "/BookStore/jsps/book/list.jsp", "body"); </c:forEach> </c:forEach>
转发和重定向
转发: 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来(这里通常是通过EL表达式获取),getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
重定向: 客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
转发在服务器端完成的;重定向是在客户端完成的
转发的速度快;重定向速度慢
转发的是同一次请求;重定向是两次不同请求
转发不会执行转发后的代码;重定向会执行重定向之后的代码
转发地址栏没有变化;重定向地址栏有变化
转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成