• 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:

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

    3.使用时需要在jsp最上面引入tld文件,可以写tld的文件路径,也可以写tld文件中定义的uri。

    <%@ 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源码

  • 相关阅读:
    struts2工作流程
    单播,多播(组播),广播,详细讲解呀
    UDP和TCP两种协议的传输数据长度分析
    内置方法 call enter exit
    内置方法 new-del
    内置方法 str-repr
    疏忽知识点记忆(待补充)
    判断一个数据类型的属性的多种方法与判断是否是继承
    反射
    初始化,实例化
  • 原文地址:https://www.cnblogs.com/aeolian/p/16450004.html
Copyright © 2020-2023  润新知