11 jstl标签 JSP开发模式 注册案例

来源:互联网 发布:智能算法优化 编辑:程序博客网 时间:2024/06/07 23:25
1 JSTL标签库
     JSP标准标签库。
     作用:和EL表达式一起 取代<% %>
     版本:1.0  1.1和1.2(区别不大)
         1.0EL表达式没有纳入规范
         1.1和1.2EL表达式纳入规范

     下载jar包,导入到工程中
                  jstl.jar
                  standard.jar
            
     标签库
        c.tld     核心的标签库
        fn.tld      EL表达式标签库

        核心标签库 (core)  --- c(重点)
        XML(x:操作xml的标签库)
        SQL(sql标签库)
        FMT(fmt:国际化标签库)
        JSTL函数(EL函数) el

2 JSTL快速入门
    导入相应jar包。
    新建JSP的文件,引入标签库
          <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>   
    直接使用标签库

<h4>传统方式</h4>
<%
    int a = 10;
    if(a == 10){
%>
    <%= a = 10 %>
<%            
      }
%>

<h4>使用jstl的方式</h4>
<c:set var="i" value="10" scope="page" ></c:set>
<c:if test="${ i eq 10 }">
    <font>i = 10</font>
</c:if>

3 JSTL的标签
 (1) <c:out>      输出内容
            value :输出的内容(常量或者变量)
            default: 默认值
            escapeXml:默认是true,进行转义,设置成false,不转义。
            
            代码:
                <c:out value="Hello"></c:out>
                <c:out value="${name }"></c:out>
                <!-- "" -->
                <c:out value="${ city }" default="北京"></c:out>
                <c:out value="<a href='#'>超链接</a>" escapeXml="false"/>
                
 (2) <c:set>
            * 属性
                var     :定义属性
                value    :存入的值
                scope    :域范围
                
                target    :修改JavaBean对象
                property:修改的属性
                
            * 向4个web域对象存入值
                <c:set var="i" value="10" scope="request" ></c:set>
                
            * 修改JavaBean对象属性的值    
                <c:set target="${ user }" property="username"  value="小凤"></c:set>
                
 (3) <c:remove>
            * 属性
                var        :删除的属性
                scope    :在域的范围
                
            * 代码
                <c:set var="name" value="小凤" scope="page"></c:set>
                ${ name }

                <c:remove var="name" scope="page"/>
                ${name }
                
 (4) <c:catch>
            * 属性:var    把异常的信息保存变量中
            * 代码
                <c:catch var="e">
                    <%
                        int a = 10/0;
                    %>
                </c:catch>
                ${ e.message }
                
 (5) <c:if>    没有<c:else>标签
            * 属性
                * test    判断的条件
                * var    计算的结果保存到变量中
                * scope    域的范围
                
            * 代码
                <c:set var="i" value="10" scope="page"></c:set>
                <c:if test="${ i ge 10 }" var="x" scope="page">
                    i >= 10
                </c:if>
                <c:if test="${ i lt 10 }">
                    i < 10
                </c:if>
                ${ x }
                
 (6) <c:choose>标签
            <c:when>
            <c:otherwise>
            
            代码:
                <c:set var="i" value="10" scope="page"></c:set>
                <c:choose>
                    <c:when test="${ i ge 10 }">
                        i >= 10
                    </c:when>
                    <c:when test="${ i lt 10 }">
                        i < 10
                    </c:when>
                    <c:otherwise>
                        其他
                    </c:otherwise>
                </c:choose>
                
 (7) <c:forEach>(*****)
            * 循环遍历数据(数组,集合,Map集合)
            * 属性
                var     :遍历数据的类型
                items    :要遍历的内容
                
                begin    :从哪开始
                end        :到哪结束
                step    :步长
                
                varStatus:记录循环遍历的信息
                    * index
                    * count(常用)
                    * first
                    * last
                    
            * 代码
                <%
                    String [] arrs = {"美美","小凤","芙蓉","小苍"};
                    request.setAttribute("arrs", arrs);
                %>
                <!-- for(String s : arrs){ }  -->
                <c:forEach var="s" items="${ arrs }">
                    ${ s }
                </c:forEach>

                <h4>遍历集合</h4>
                <%
                    List<String> list = new ArrayList<String>();
                    list.add("美美");
                    list.add("小凤");
                    list.add("芙蓉");
                    list.add("小泽");
                    request.setAttribute("list", list);
                %>
                <c:forEach var="s" items="${ list }">
                    ${ s }
                </c:forEach>

                <h4>遍历Map集合</h4>
                <%
                    Map<String,String> map = new HashMap<String,String>();
                    map.put("aa", "美美");
                    map.put("bb", "小凤");
                    map.put("cc", "芙蓉");
                    request.setAttribute("map", map);
                %>
                <c:forEach var="entry" items="${ map }">
                    ${ entry.key } -- ${ entry.value }
                </c:forEach>
                
                <h4>遍历对象的集合</h4>
                <%
                    List<User> uList = new ArrayList<User>();
                    uList.add(new User("美美","123"));
                    uList.add(new User("小风","234"));
                    uList.add(new User("芙蓉","345"));
                    request.setAttribute("uList", uList);
                %>
                <c:forEach var="user" items="${ uList }">
                    ${ user.username } -- ${ user.password }
                </c:forEach>
               
                <h4>迭代数据</h4>
                <h4>迭代从1到10</h4>
                <c:forEach var="i" begin="1" end="10" step="2">
                    ${ i }
                </c:forEach>

                <h4>计算从1加到100的和</h4>
                <c:set var="sum" value="0" scope="page"></c:set>
                <c:forEach var="i" begin="1" end="100" step="1">
                    <c:set var="sum" value="${ sum + i }"></c:set>
                </c:forEach>
                ${ sum }
                
                <h4>遍历10到100的偶数,每到第3个数,显示红色</h4>
                <c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
                    <c:choose>
                        <c:when test="${ status.first }">
                            <font color="blue">${ i }</font>
                        </c:when>
                        <c:when test="${ status.count % 3 eq 0 }">
                            <font color="red">${ i }</font>
                        </c:when>
                        <c:otherwise>
                            ${ i }
                        </c:otherwise>
                    </c:choose>
                </c:forEach>
        
 (8) <c:param>    传递参数
            * 属性
                name    :参数名称    
                value    :参数的值
                
 (9) <c:import>    包含页面
            * url        :引入页面的地址
            * context    :虚拟路径
            * var        :引入页面保存到属性中
            * scope        :域的范围
            
            * 代码
                <c:import url="/jstl/choose.jsp" context="/day13" var="i" scope="page">
                    <c:param name="username" value="meimei"></c:param>
                </c:import>
                ${ i }
                
 (10) <c:url>
            <c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
            URL重写就是将会话标识号以参数形式附加在URL地址后面 
            http://localhost/day12/demo?jsessionid=xxxxxxxxxxxxxxxxxx;
            
            * 属性
                * var        :声明属性
                * value        :地址
                * scope        :域范围
                * context    :虚拟路径
                
            * 代码
                <c:url var="i" value="/jstl/choose.jsp" scope="request" context="/day13">
                    <c:param name="username" value="xiaofeng"></c:param>
                </c:url>

                <a href="${ i }">choose</a>
                
 (11) <c:redirect>重定向
            * 属性
                * url        :重定向的地址
                * context    :虚拟路径
            * 代码
                <c:redirect url="/jstl/choose.jsp" context="/day13">
                    <c:param name="username" value="furong"></c:param>
                </c:redirect>
        
 (12) <c:forTokens>分隔字符串(了解)
            <h4>分隔字符串</h4>
            <c:set var="i" value="aa,bb,cc" scope="page"></c:set>
            <c:forTokens items="${i }" delims="," var="x">
                ${ x }
            </c:forTokens>

4 JSP开发的模式(MVC)


5 完成注册的需求
(1) 图片


(2)分析
    * 完成注册的需求
        
        * 注册表单(案例)
        * 数据库(没有)
            * 使用xml来代替。
            
        * 架构
            Servlet + JSP + JavaBean
            
        * 技术
            * 解析XML使用DOM4J技术
            * Servlet技术
            * BeanUtils技术
            * JSTL+EL表达式
        
        * 创建新的项目
        * 导入jar包
        * 创建包结构
        
        
        * 开发的步骤
            * 编写注册的页面,
                用户名,密码,确认密码,别名,邮箱,验证码    
                
            * 先完成数据的校验    onsubmit()
                * 都不能为空,密码和确认密码一致
                * 邮箱格式正确(正则表达式)
                
            * 发送请求,请求Servlet,接收数据,封装,处理数据
                
            * 显示到JSP上。


(3)代码
-----------------------------------------------------
// reg.jsp  
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
    
    <script type="text/javascript">
        // 完成校验    run()    返回false
        // 用户名不能为空
        
        // 密码不能为空,不能少于6位
        
        // 确认密码和密码一致
        
        // 昵称不能为空
        
        // 邮箱正确的邮箱格式    /.+@.+\.[a-zA-Z]{2,4}$/
        
        // 可以提交了
        
    </script>

</head>
<body>
    
    <form action="/day13_mvc/reg" method="POST" onsubmit="return run()" >
        <table border="1" width="60%">
            <tr>
                <td>
                    用户名
                </td>
                <td>
                    <input type="text" name="username" />
                </td>
            </tr>
            <tr>
                <td>
                    密码
                </td>
                <td>
                    <input type="password" name="password" />
                </td>
            </tr>
            <tr>
                <td>
                    确认密码
                </td>
                <td>
                    <input type="password" name="repassword" />
                </td>
            </tr>
            <tr>
                <td>
                    昵称
                </td>
                <td>
                    <input type="text" name="nickname" />
                </td>
            </tr>
            <tr>
                <td>
                    邮箱
                </td>
                <td>
                    <input type="text" name="email" />
                </td>
            </tr>
            <tr>
                <td>
                    验证码
                </td>
                <td>
                    <input type="text" name="code" />
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="注册"/>
                </td>
            </tr>
        </table>        
    </form>
    
</body>
</html>
-----------------------------------------------------
// RegServlet.java
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.service.RegService;
import cn.itcast.utils.MyXmlUtil;
import cn.itcast.vo.User;

/**
 * 完成注册(控制器)
 * @author Administrator
 *
 */
public class RegServlet extends HttpServlet {
    private static final long serialVersionUID = -6807725510424430537L;
    
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 1.获取参数列表
         * 2.需要把数据封装到JavaBean中,使用BeanUtils开发包
         * 3.处理数据,调用另一个JavaBean中
         * 4.把结果返回到页面中
         */
        
        // 获取参数列表
        
        User user = new User();
        // 封装数据
        
        // 处理
        RegService reg = new RegService();
        int flag = reg.regUser(user);
        
        if(flag == MyXmlUtil.NAMEEXIST){
            // 用户名重名了
            // 转发注册页面
        }else if(flag == MyXmlUtil.EMAILEXIST){
            // 邮箱重名了
            
        }else if(flag == MyXmlUtil.SUCCESS){
            // 注册成功
            // 跳转登陆页面
            // 注册成功
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
-----------------------------------------------------
//RegService.java
import cn.itcast.utils.MyXmlUtil;
import cn.itcast.vo.User;

/**
 * 操作XML
 * @author Administrator
 *
 */
public class RegService {
    
    /**
     * 操作XML,完成注册。XML中进行数据的添加。
     * 用户名不能重名
     * 邮箱是否重名
     * @param user
     * @return
     */
    public int regUser(User user){
        // 使用工具类,操作XML
        // MyXmlUtil.getDocument(MyXmlUtil.PATH);
        
        // 解析XML
        
        // 返回1 用户名重名了,返回是2邮箱重名,返回0注册成功
        return 0;
    }

}
-----------------------------------------------------
// MyXmlUtil.java
import org.dom4j.Document;
/**
 * XML的工具类
 * @author Administrator
 *
 */
public class MyXmlUtil {
    // 数据库的路径
    public static final String PATH = "d:\\user.xml";
    // 用户名重名
    public static final int NAMEEXIST = 1;
    // 邮箱重名
    public static final int EMAILEXIST = 2;
    // 注册成功
    public static final int SUCCESS = 0;
    
    // 获取Documen对象
    public static Document getDocument(String path){
        
        return null;
    }
    
    // 回写
    public static void writeXml(Document document,String path){
        
    }
    
}
-----------------------------------------------------
// User.java
/**
 * User对象
 * @author Administrator
 *
 */
public class User {
    
    private String username;
    private String password;
    private String nickname;
    private String email;
    
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}
-----------------------------------------------------
原创粉丝点击