0
点赞
收藏
分享

微信扫一扫

Web3.0(Servlet3.0+JSP)

环境

JDK1.7 + JAVAEE6
Myeclipse10

maven坐标
如果不是用javaee6而是用maven项目的话,需要引入如下坐标。

<dependencies>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--jsp-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!--jsp-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>

代码编写

项目结构

Web3.0(Servlet3.0+JSP)_标签属性

web.xml

因为用的web3.0,servlet3.0提供了注解简化了开发,不再像javaee5的web2.5一样每个servlet都需要配置web.xml文件了

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name></display-name>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>

HelloServlet

servlet使用@WebServlet("/url")注解代替xml配置映射关系。

import java.io.IOException;
import java.text.*;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = dateFormat.format(new Date());
req.setAttribute("currentTime",currentTime);
req.getRequestDispatcher("/WEB-INF/JSP/hello.jsp").forward(req,resp); /*注意url大小写,不要写错,否则找不到,比较坑*/
}
}

hello.jsp

默认模板新建一个jsp,然后使用el表达式访问request中的内容。

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'hello.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>

<body>
${currentTime}
</body>
</html>

测试

浏览器访问http://localhost:8080/web3/hello

Web3.0(Servlet3.0+JSP)_xml_02

tld自定义标签

1.写一个标签对应的java类继承SimpleTagSupport类并覆盖doTag()方法。
2.在WEB-INF下面新建一个tld文件,名字随意,在文件中定义标签名并指定标签对应的java类。
body-content:

  • empty:这个是一个空标记.
  • scriptless:标记主体可以有内容, 并且jsp容器会去处理里面的jsp元素, 这些内容可以是文本, EL表达式, 标准动作甚至另一个自定义标记.(默认情况下是这个值)
  • tagdependent:标记主体可以有内容, 而jsp容器会把它们当作纯文件处理

3.使用时需要在jsp最上面引入tld文件。

<%@ taglib prefix="at" uri="/WEB-INF/autumn.tld"%>

Web3.0(Servlet3.0+JSP)_javaweb_03

输出标签

通过标签向jsp界面输出内容。

标签处理类

新建一个java类

package com.autumn.tag;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class HelloTag extends SimpleTagSupport{

@Override
public void doTag() throws JspException, IOException {
//获取向界面输出的对象
JspWriter out = getJspContext().getOut();
out.println("Hello autumn Tag!");
}

}

tld中定义tag

在tld文件中新增一个标签,并指定标签的处理类。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>at</short-name>

<!-- 通过标签向jsp输出内容 -->
<tag>
<name>Hello</name>
<tag-class>com.autumn.tag.HelloTag</tag-class>
<!-- body-content为empty时标签中间不能填写任何内容 -->
<body-content>empty</body-content>
</tag>

</taglib>

jsp中使用tag

先用taglib指令引用tld文件并指定前缀,然后再通过前缀去使用标签。

<%@ taglib prefix="at" uri="/WEB-INF/autumn.tld"%>

<!-- 通过标签向jsp输出内容 -->
<at:Hello></at:Hello>

Web3.0(Servlet3.0+JSP)_标签属性_04

访问标签体

标签处理类

新建一个java类

import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
* 标签处理类: 访问标签体
*/
public class BodyTag extends SimpleTagSupport{

StringWriter sw = new StringWriter();

@Override
public void doTag() throws JspException, IOException {
getJspBody().invoke(sw); //获取标签中间的内容
System.out.println(sw.toString());
getJspContext().getOut().println(sw.toString()); //把内容在向前端输出
}

}

tld中定义tag

在tld文件中新增一个标签,并指定标签的处理类。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>at</short-name>

<!-- 访问标签体:通过标签向java处理类传递标签中间的内容 -->
<tag>
<name>Hello2</name>
<tag-class>com.autumn.tag.BodyTag</tag-class>
<body-content>scriptless</body-content>
</tag>

</taglib>

jsp中使用tag

先用taglib指令引用tld文件并指定前缀,然后再通过前缀去使用标签。

<%@ taglib prefix="at" uri="/WEB-INF/autumn.tld"%>

<!-- 通过标签体向处理类传递参数 -->
<at:Hello2>this is message body</at:Hello2>

后台可以获取标签体的字符串

Web3.0(Servlet3.0+JSP)_标签属性_05

访问标签属性

标签处理类

新建一个java类

import java.io.IOException;
import java.io.StringWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
* 标签处理类: 自定义标签属性
*/
public class AttrTag extends SimpleTagSupport{
//标签属性与这里的变量一一对应
private String message;
// 通过set方法把标签的属性值放入变量,所以一定要实现变量的set方法
public void setMessage(String msg) {
this.message = msg;
}

StringWriter sw = new StringWriter();

@Override
public void doTag() throws JspException, IOException {
if (message != null) {
/* Use message from attribute */
JspWriter out = getJspContext().getOut();
out.println("this is attribute: "+message);
} else {
/* use message from the body */
getJspBody().invoke(sw);
getJspContext().getOut().println("this is tagbody:" + sw.toString());
}
}

}

tld中定义tag

在tld文件中新增一个标签,并指定标签的处理类。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>at</short-name>

<!-- 访问标签属性: 通过标签属性向java处理类传递变量 -->
<tag>
<name>Hello3</name>
<tag-class>com.autumn.tag.AttrTag</tag-class>
<body-content>scriptless</body-content>
<!-- 标签属性 -->
<attribute>
<name>message</name>
</attribute>
</tag>

</taglib>

jsp中使用tag

先用taglib指令引用tld文件并指定前缀,然后再通过前缀去使用标签。

<%@ taglib prefix="at" uri="/WEB-INF/autumn.tld"%>

<!-- 通过标签属性向处理类传递参数 -->
<at:Hello3 message="this is message3"/>

Web3.0(Servlet3.0+JSP)_标签属性_06

tag文件自定义标签

tag文件

在WEB-INF下面新建一个tag文件,内容如下

<%@ tag language="java" pageEncoding="UTF-8"%>
<p>
<% int size=1;
for(int i=1;i<=3;i++) {
size=size+1;
%>
<br>
<font size=<%=size%> style="background-color:#ff<%=size%>">
<!-- jsp:doBody代表标签的本体文字 -->
<jsp:doBody />
</font>
<%
}
%>
</p>

jsp中使用

首先像引入tld文件一样引入标签的文件夹tagdir,并定义前缀。

<%@ taglib prefix="tg" tagdir="/WEB-INF/tags" %>

<tg:show>
message for tag file
</tg:show>

Web3.0(Servlet3.0+JSP)_javaweb_07

​​demo源码​​

如果这篇文章对你有用,麻烦关注一下本人微信公众号~

Web3.0(Servlet3.0+JSP)_标签属性_08




举报

相关推荐

0 条评论