JSP简明教程(五):高级特性
2014-08-18 20:34
288 查看
JSP过滤器
过滤器的作用是给web请求增加额外的逻辑,每个页面可以被多个过滤器进行处理。过滤器需要在web.xml文件中进行定义,语法如下。过滤器的执行顺序与filter-mapping的定义顺序相同。<filter> <filter-name>FilterName</filter-name> <filter-class>TestFilter</filter-name> <init-param> <param-name>test-param</param-name> <param-value>test-value</param-name> </init-param> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
文件上传
浏览器上传文件的时候,HTTP请求中的MIME类型必须为multipart/form-data。文件上传的处理需要使用commons-fileupload库和commons-io库。
在服务端,为了获取文件列表,你需要一个ServletFileUpload对象,这样就可以调用它的parseRequest(request)方法来获得文件列表。为了创建ServletFileUpload,你需要一个DiskFileItemFactory,这个类的作用就是将文件保存到内存中,如果保存不下,就保存到磁盘中。因此需要设置内存的使用量和临时文件的存放路径,分别可以通过setSizeThreshold和setRepository方法。下面是完整的例子。
DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存中存储文件的最大值 factory.setSizeThreshold(maxMemSize); // 本地存储的数据大于 maxMemSize. factory.setRepository(new File("c:\\temp")); // 创建一个新的文件上传处理程序 ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大上传的文件大小 upload.setSizeMax( maxFileSize ); // 解析上传的文件 List fileItems = upload.parseRequest(request);
JSTL
在使用JSTL之前首先要下载jakarta-taglibs-standard-x.x.x.zip,并将压缩包中的standard.jar和jstl.jar加入到WEB-INF/lib下。JSTL的所有标签见下图:
变量要用$符号括起来,$是EL表达式的写法,通过EL表达式转换成对应的字符串。下面这个例子展示了变量的用法。
<fmt:formatNumber value="${balance}" type="currency"/>
JSTL函数的用法。下面这个例子中,将函数与if标签结合使用。
<c:if test="${fn:contains(theString, 'test')}"> <p>Found test string<p> </c:if>
数据库操作
下面的代码实现了JSP中数据库的连接,并且创建了一个名为snapshot的数据源。<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123456"/>
下面的代码实现了数据库的请求。
<sql:query dataSource="${snapshot}" var="result"> SELECT * FROM users; </sql:query>
下面的代码展示了参数替换的用法。
<sql:query dataSource="${snapshot}" var="result"> SELECT * FROM users WHERE id = ?; <sql:param value="${userId}"/> </sql:query>
自定义标签
自定义标签需要完成两件事,一件是定义标签的规则,有哪些属性,哪些属性是必填的,格式是怎样的,可以包含哪些子标签。另外一件事就是实现标签的功能。定义标签规则。新建一个tld文件,对于这个例子,文件的内容可以这样写:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Test TLD</short-name> <tag> <name>hello</name> <tag-class>com.pc.HelloTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
实现标签的功能。这个例子里面就是简单地将标签替换成Hello World字符串。代码可以写成这样:
public class HelloTag extends SimpleTagSupport { public void doTag() { JspWriter out = getJspContext().getOut(); out.println("Hello world!"); } }
获取标签里面的内容。首先要修改TLD,使其允许在标签里面存放文本。其次是通过invoke函数获取标签里面的内容。
<body-content>scriptless</body-content>
StringWriter writer = new StringWriter(); getJspBody().invoke(writer);
获取标签上的属性。首先要修改TLD,允许标签设置哪些属性。其次,JSP引擎会调用setXXX函数传递属性值。
<tag> <attribute> <name>message</name> </attribute> </tag>
// 由系统自动调用。 public void setMessage(String message) { this.message = message; }
相关文章推荐
- JSP简明教程(三):JSP隐含对象
- PostgreSQL教程 -part2高级特性
- javascript面向对象程序设计高级特性经典教程(值得收藏)
- JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session
- JSP简明教程:令人兴奋的脚本编程
- Java 8 简明教程——领略Java 8的全新特性
- JSP简明教程
- java 8简明教程(新特性)
- javascript面向对象程序设计高级特性经典教程(值得收藏)
- JSP简明教程:对比与总结
- [译]GLUT教程 - 键盘高级特性
- 用 Dojo 的 Ajax 应用开发进阶教程,第 1 部分:JavaScript 技巧与高级特性
- Quartz 框架 教程(中文版)2.2.x 之第十一课:高级(企业级)特性
- java 8简明教程(新特性)
- JSP简明教程
- JSP简明教程
- BIND 高级特性-- 动态更新域名服务器教程
- JSP 简明教程(二):JSP基本语法
- JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session
- JSP简明教程:对比与总结