其他分享
首页 > 其他分享> > Web3.0(Servlet3.0+JSP)

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>

代码编写

项目结构

image

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
image

tld自定义标签

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

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

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

image

输出标签

通过标签向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>

image

访问标签体

标签处理类

新建一个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>

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

访问标签属性

标签处理类

新建一个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"/>

image

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>

image

demo源码

标签:Servlet3.0,Web3.0,标签,tag,jsp,import,JSP,servlet,javax
来源: https://www.cnblogs.com/aeolian/p/16450004.html