JSP简明教程(五):高级特性

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简明教程(五):高级特性,布布扣,bubuko.com

时间: 2024-08-06 03:45:21

JSP简明教程(五):高级特性的相关文章

JSP简明教程:汇总

原创JSP教程,简洁明了,不含废话. JSP简明教程(一):JSP简介 JSP简明教程(二):JSP基本语法 JSP简明教程(三):JSP隐含对象 JSP简明教程(四):EL表达式语言.JavaBean.Cookie.Session JSP简明教程(五):高级特性 JSP简明教程:汇总,布布扣,bubuko.com

JSP 简明教程(二):JSP基本语法

基本语法 JSP只是在html的基础上嵌入一些动态的元素.下面是HelloWorld代码: <html> <% out.println("hello world"); %> </html> 以上代码中的<% %>就是动态元素.JSP中所有的特殊语法如下: <% %>:用于表示一段Java代码.这段代码在编译之后会放在_jspService()方法中. <%! %>:多了一个叹号,也用于表示一段Java代码,但是这段

JSP简明教程(四):EL表达式语言、JavaBean、Cookie、Session

EL表达式语言 EL就是Expression Language,目的是简化JSP的语法.来看几个例子就明白了. ${test} 会翻译成<%=test%> ${test.name} 会翻译成 <%=test.getName()%> ${sessionScope.username}} 会翻译成 <%=session.getAttribute("username")%> 只有sessionScope.requestScope等才会翻译成getAttrib

JSP简明教程(一):JSP简介

JSP的全称是Java Server Pages.它的本质其实就是Servlet,在运行的过程中会编译成Servlet代码.在JSP中可以访问数据库,记录用户的选择信息,访问JavaBean组件. JSP与CGI的差别.一.性能更加优越,JSP可以直接在HTML网页中嵌入动态的元素,而不需要单独引用CGI文件.二.JSP是已经编译好的,持续运行的程序,一次载入可以服务多次请求,而CGI每次都要载入程序再执行,执行完成之后程序就退出了.三.Java是拥有强大的企业级Java API,包括JDBC,

JSP简明教程(三):JSP隐含对象

所谓隐含对象就是已经被系统定义好的一些对象,可以直接使用.JSP中有以下几个隐含对象: request response out 可以使用out.flush来将缓冲区中的数据全都发送到客户端. session application 与整个应用的上下文有关. config pageContext 与JSP页面的上下文有关. page 在JSP页面中相当于this指针. exception 这个对象中包含了从先前页面中包含的异常信息. 下面请看一个使用隐含对象的例子: <% out.println

Python高级特性——学习笔记

Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码.请始终牢记,代码越少,开发效率越高. 1.切片slice.L = [1, 2, 3, 4, 5] L[0:3]=[1,2,3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素. 如果第一个索引是0,还可以省略 倒数切片L[-2:]=[4,5]从倒数第二个数 到 最后一个数 L = list(range(100))# 创建一个0-99的数列L L[:10:2]# 前10个数,每两个取一个

Linux Mint安装ibus五笔和拼音输入法简明教程

Linux Mint使用终端安装ibus五笔和拼音输入法 按Ctrl+Alt+T快捷键打开终端,然后运行下面的命令.ibus是输入法框架,ibus-table-wubi是五笔输入法引擎,ibus-pinyin是拼音输入法引擎. sudo apt-get install ibus ibus-table-wubi ibus-pinyin 设置Linux Mint的输入法框架 Linux Mint没有默认的输入法框架,我们可以在终端里用im-config工具来设置一个输入法框架.im-config的意

Zookeeper系列五:Master选举、ZK高级特性:基本模型

一.Master选举 1. master选举原理: 有多个master,每次只能有一个master负责主要的工作,其他的master作为备份,同时对负责工作的master进行监听,一旦负责工作的master挂掉了,其他的master就会收到监听的事件,从而去挣脱负责工作的权利,其他没有争夺到负责主要工作的master转而去监听负责工作的新master. 本质其实是利用zookeeper的临时节点的特性:临时节点随着会话的消亡二消亡,同一个临时节点只能创建一个,创建失败的节点(从master)对创

Lisp简明教程

此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:[