javaweb自定义标签

 

描述

自定义jsp标签,实现注册页面跳转到欢迎页面

步骤

创建标签类处理文件WelcomeTag.java和RedStarTag.java

创建mytag.tld

创建welcome.jsp和register.jsp

问题

  1. 一开始按照书上的代码打,出现“unknown tag”的报错,发现没有将java文件放入包里,于是建包,没成功
  2. 发现自己没有classes文件,摸索了很久,在命令行下javac生成的class文件复制粘贴到web-inf下,没用
  3. 因为用的是eclipse走了一些弯路,发现web-inf下没有classes文件,去网上搜知道eclipse中生成的class文件在build下面,于是通过java build path改成classes
  4. 但是classes里仍然没有自动编译的class文件,通过javac编译生成的文件又没用,最后发现少加了jsp-api.jar这个文件,在环境变量里配置,还是失败
  5. 摸索中发现可以将jsp-api.jar文件放入jdk/jre/lib/ext下并且在java build path中libraries下添加改文件,还是没成功,但是有了正确的class文件
  6. 为什么jsp页面无法显示呢,我尝试将uri改成了/WEB-INF/mytag.lib,结果可以显示第一个界面,又把welcome.jsp中的uri和prefix颠倒让uri在前,两个界面都成功了
  7. 后来又尝试将uri换成http://www.mydomain.com/sample,依然成功,不知道为什么。。。

 

结果截图

代码

welcome.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib uri="http://www.mydomain.com/sample" prefix="demo"  %>

<html>

<head>

<title>Welcome Tag</title>

</head>

<body>

    <h3><demo:welcome /></h3>

    <h3><demo:welcome user="john" /></h3>

    <h3><demo:welcome user="${param.custName}" /></h3>

    <h3><demo:welcome user='<%= request.getParameter("custName") %>'/> </h3>

</body>

</html>

 

register.jsp

<%@ page contentType="text/html;charset=UTF-8" %>

<%@ taglib uri="http://www.mydomain.com/sample" prefix="demo" %>

<html><head><title>User Register</title></head>

<body>

请输入客户信息,带<demo:star />的域必须填写。

<form action="welcome.jsp" method="post" >

    <table>

        <tr> <td>客户名</td>

            <td><input type='text' name='custName'><demo:star /></td>

        </tr>

        <tr> <td> Email地址</td>

            <td><input type='text' name='email'><demo:star /></td>

        </tr>

        <tr> <td> 电话 </td>

            <td><input type='text' name='phone'><demo:star /></td>

        </tr>

    </table>

    <input type='submit' value="提交" >

</form>

</body></html>

mytag.tld

<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

        version="2.1">

    <description>TagExample</description>

    <display-name>TagExample</display-name>

    <tlib-version>1.1</tlib-version>

    <short-name>Tag</short-name>

  <uri>http://www.mydomain.com/sample</uri>

  <tag>

    <name>star</name>

    <tag-class>com.demo.RedStarTag</tag-class>

    <body-content>empty</body-content>

  </tag>

  <tag>

    <name>welcome</name>

    <tag-class>com.demo.WelcomeTag</tag-class>

    <body-content>empty</body-content>

    <attribute>

            <name>user</name>

            <required>false</required>

            <rtexprvalue>true</rtexprvalue>

        </attribute>

  </tag>

</taglib>

WelcomeTag.java

package com.demo;

import javax.servlet.jsp.JspException;

 

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.SimpleTagSupport;

import java.io.IOException;

public class WelcomeTag extends SimpleTagSupport {

    private String user;

 

    public void setUser(String user) {

        this.user = user;

    }

 

    @Override

    public void doTag() throws JspException, IOException {

        JspWriter out=getJspContext().getOut();

        try{

            if(user==null){

                out.print("welcome,guest<br>");

            }else{

                out.print("welcome, "+user+"!<br>");

            }

        }catch (Exception e){

            throw new JspException("Error doTag");

        }

    }

}}

RedStarTag.java

package com.demo;

 

import javax.servlet.jsp.JspWriter;

 

import javax.servlet.jsp.tagext.SimpleTagSupport;

import java.io.IOException;

public class RedStarTag extends SimpleTagSupport {

    @Override

    public void doTag() throws IOException {

        JspWriter out= getJspContext().getOut();

        out.print("<font color='#FF0000'>*</font>");

    }

}

标注一下对我有用的几篇文章:

https://blog.csdn.net/luman1991/article/details/52796980

http://my.oschina.net/u/852387/blog/393825

另外 jsp-version也是有很大影响的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值