ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Web3.0(Servlet3.0+JSP)

2022-07-07 17:03:03  阅读:161  来源: 互联网

标签:Servlet3.0 Web3.0 标签 tag jsp import JSP servlet javax


环境

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:

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有