-
Notifications
You must be signed in to change notification settings - Fork 2.9k
JSP
#JSP/JSTL/Servlet
##JSP/JSTL/Servlet Tips 现在的project一般选Servlet2.5, JSP 2.1 和 JSTL1.2.
1. 尽量使用JSP2.0的EL而不是JSTL,使页面看起来更像普通html页面。 比如:
<input type="text" id="loginName" name="loginName" size="25" value="${user.loginName}"/>
vs
<s:input path="loginName" id="loginName" size="25"/>
只有像 form, checkbox, radiobox这些不得不用的地方才会使用。
2. web.xml里的头换成如下,就不会在Eclipse里一更改web.xml就被卡死一阵了。
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
**3. http://java.sun.com/jsp/jstl/core 找不到的讨厌错误 首先,注意是否需要jstl-1.2.jar,如果web容器里没有自带,则需要打包,否则最好把它设为provided级别,避免撞车。
然后,在Eclipse里通过自己写的Start.java运行Jetty时,需要
webContext.setClassLoader(Thread.currentThread().getContextClassLoader());
这样,就会用Eclipse那个带着项目classpath的Laucher$ClassLoader代替jetty的WebAppClassLoader运行应用,否则jetty会自己创一个WebAppClassLoader,然后把Eclipse的Loader设为parent。这时候悲剧来了,jetty用的那个Jasper,只会扫描当前classloader里的jar,不会扫描parent的classloader里的,除非你像[Jetty文档](http://wiki.eclipse.org/Jetty/Howto/Configure_JSP)教的那样设置org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern去扫描某些jar。感觉还是直接设classloader简单点。
在Maven运行的Test里,则需要如下设置,原因懒得深究了。
<useSystemClassLoader>false</useSystemClassLoader>,
4.JSP2.1新版的TagLib好像容易写了很多.
只要写一些JSP片段之类的东西,然后放到特定目录下就可以了。不像以前写一个Taglib要学一天还不一定学会某些高深的用法。
##SpringSide Core的Servlets SpringSide Core的Servlets工具类,封装了Http与Servlet中的很多常用函数。
1. 设置缓存的函数 高性能的Web编程中,设置内容在客户端浏览器的缓存是无比重要的一环。
Servlets封装了setExpiresHeader(),setNoCacheHeader(),setLastModifiedHeader(),setEtag(),checkIfModifiedSince(),checkIfNoneMatchEtag()等函数。
简单的说,Expires/Cache Control是服务端告诉客户端浏览器如何控制本内容的缓存的,在缓存过期前,不要再发送请求。 Expires 是 Http 1.0的header,只能设置某个固定时间。Cache Control是Http1.1的header,可以设置从现在开始多少时间,并有对代理服务器缓存的控制。
LastModified和Etag是服务端告诉客户端浏览器的本内容的修改标识。 当本地内容过期时,客户端会拿着这个标识发一个checkIfModifiedSince的询问给服务端,是否有新的内容。服务端如果认为其实内容依然没有过期,会只返回一个304的状态码而不是把内容重新发送。LastModified和Etag的区别是,LastModified只能是时间,而Etag可以是任何服务端能识别的字符串。
**2.setFileDownloadHeader ** 设置弹出下载文件对话框,并设定下载后的文件名的实用函数。
3.getParametersStartingWith
从Spring copy来的函数,比如有两个Request参数,search_name和search_loginName, 会返回一个key为name和loginName为的Map.
**4.encodeHttpBasic ** 将明文的用户名密码编码为Http Basic的Header。
##SpringSide Showcase的Servlets使用演示
在Web演示页面,演示了:
-
显示静态内容Servlet, 演示高效读取静态内容, 控制客户端缓存, 压缩传输, 弹出下载对话框,见StaticContentServlet
-
CacheControlHeaderFilter为静态内容添加缓存控制 Header.