- Introduction
- Quick Start
- Design
- Tutorial
- Spring MVC
- JSP/JSTL/Servlet
- JQuery and plugins
- Ajax
- Twitter Bootstrap CSS
- SiteMesh
- YUICompressor
- Spring Restful Service
- JAX-WS/CXF
- Spring Data JPA
- JPA/Hibernate
- MyBatis
- Database
- H2 Database
- Datasource
- Transaction
- Redis
- Cache Overview
- Guava Cache
- Ehcache
- Memcached
- Shiro Security
- Crypto
- Schedule/Quartz
- Jmx
- System Protection
- Hystrix
- Rate Limiter
- Monitoring and Metrics
- Metrics-library
- Graphite
- Logging/Slf4j/Logback
- Logstash
- Spring
- Validation Overview
- JQuery Validation
- Hibernate Validator
- General Utilizes
- JSON/JAXB
- Date
- Test Overview
- Unit Test/Mockito/AssertJ
- Selenium2
- BDD
- Performace-test
- JMeter
- Profiler
- Simulator Overview
- Nodejs
- Eclipse
- Maven
- Sonar
- git
- Travis CI
- Jetty
- Micro-Service Architecture/Executable War
- AssertJ
- CreateNewProject
- Dozer
- Graphite-Windows
- Hello-Everybody
- Jaxb
- Json
- Mock
JSP/JSTL/Servlet
JSP/JSTL/Servlet
1. JSP/JSTL/Servlet Tips
现在的project一般选Servlet2.5, JSP 2.1 和 JSTL1.2.
1.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"/>
只有像 checkboxes, radiobuttons这些贪图它自动列出所有checkbox,而且将以选值打勾,这种taglib超方便的的地方才会使用。
1.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">
1.3 tld文件 http://java.sun.com/jsp/jstl/core 找不到的讨厌错误。
首先,注意是否需要jstl-1.2.jar,如果web容器里没有自带,则需要打包,否则最好把它设为provided级别,避免撞车。
然后,主要就是https://www.wenjiangs.com/doc/ofnxibvk自己的特殊规则了,见https://www.wenjiangs.com/doc/ofnxibvk章节.
只要写一些JSP片段之类的东西,不像以前写Java版的一个Taglib要学一天还不一定学会某些高深的用法。
在quickstart中,封装了分页和排序两个tag。
首先在WEB-INF/tags目录下放一个hello.tag文件,内容如下,先声明了编码,和传入的变量,剩下就是普通的JSP内容了:
<%@tag pageEncoding="UTF-8"%>
<%@ attribute name="user" type="java.lang.String" required="true"%>
Hello, <%==user%>
然后在jsp中指向之前的目录,以tag文件名作为tag名称进行调用:
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<tags:hello user="foo"/>
2.SpringSide Core的Servlets
SpringSide Core的Servlets工具类,封装了Http与Servlet中的很多常用函数。
2.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.2 setFileDownloadHeader 设置弹出下载文件对话框,并设定下载后的文件名的实用函数。
2.3 getParametersStartingWith
从Spring copy来的函数,比如有两个Request参数,search_name和search_loginName, 会返回一个key为name和loginName为的Map.
2.4 encodeHttpBasic 将明文的用户名密码编码为Http Basic的Header。
SpringSide Showcase的Servlets使用演示
在Web演示页面,演示了:
显示静态内容Servlet, 演示高效读取静态内容, 控制客户端缓存, 压缩传输, 弹出下载对话框,见StaticContentServlet
CacheControlHeaderFilter为静态内容添加缓存控制 Header.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论