• JSP标签和JSTL标签注意点


    1、转发和重定向问题

      当前项目:/Test

      转发路径:"/"根目录表示当前项目"/Test","/login.jsp"就是"/Test/login.jsp"。所以只能在web程序内部跳转

      重定向:"/"根目录代表当前web容器,"/login.jsp"就是"/login.jsp",不符合要求,需要使用"/Test/login.jsp"。所以可以实现外部程序跳转

    转发:request.getRequestDispacther("/login.jsp").forward(req, res);    
    重定向:response.sendRedirect(request.getContextPath() + "/login.jsp");
    

    2、servlet的response.sentRedirect(String url)和jstl标签的<c:redirect url="">[<jsp:param />......]</c:redirect>比较

      response的重定向方法"/"是相对于web容器来说的,

      但是jstl的c标签的重定向是相当于c标签的context属性来说的,而c标签的context属性默认值就是${pageContext.request.contextPath }。

    <%-- <%
            if (request.getAttribute("username") == null) {
                response.sendRedirect(request.getContextPath() + "/login.jsp");
            }
        %> --%>
        <c:if test="${empty username }">
            <c:redirect url="/login.jsp"></c:redirect>
        </c:if> 
    
    等价于:
    <c:redirect context="${pageContext.request.contextPath }" url="/login.jsp"></c:redirect> 

    3、jsp中获取param请求参数

      servlet中:request.getParameter(String pname) String

      jsp中:使用jstl隐式对象(看我前面的博客中jstl11个隐式对象)

        

     <%
        request.setCharacterEncoding("UTF-8"); //设置编码,防止中文乱码
     %>
     请求参数:${param.username } --%>

    附录:jsp和jstl标签详解.

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>EL语法</title>  
      </head>
      
      <body>
        <%
         String name = "rose";  
         //放入域中
         //pageContext.setAttribute("name",name);
         pageContext.setAttribute("name",name,PageContext.REQUEST_SCOPE); 
          %>
          <%=name %>
          <br/>
          <%--
          1)从四个域自动搜索
           --%>
          EL表达式: ${name }
          <%--
              ${name } 等价于
                  <%=pageContext.findAttribute("name")%>
           --%>
           <%--
            2) 从指定的域中获取数据
            --%>
            EL表达式: ${pageScope.name }
            <%--
                ${pageScope.name } 等价于
                 <%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%>
                
             --%>
      </body>
    </html>
    <%@ page language="java" import="java.util.*,gz.itcast.b_entity.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>EL输出不同类型的数据</title>  
      </head>
      
      <body>
        <%--
            1)EL输出对象的属性    
         --%>
         <%
             //保存数据
             Student student = new Student("eric",20);
             //放入域中
             pageContext.setAttribute("student",student);
             
             //List
             List<Student>  list = new ArrayList<Student>();
             list.add(new Student("rose",18));
             list.add(new Student("jack",28));
             list.add(new Student("lucy",38));
             //放入域中
             pageContext.setAttribute("list",list);
             
             //Map
             Map<String,Student> map = new HashMap<String,Student>();
             map.put("100",new Student("mark",20));
             map.put("101",new Student("maxwell",30));
             map.put("102",new Student("narci",40));
             //放入域中
             pageContext.setAttribute("map",map);
             
          %>
          
          <%--使用EL获取对象 --%>
          ${student.name} - ${student.age }
          <%--
           ${student.name} 等价于     (点相对于调用getXX()方法)
              <%=((Student)pageContext.findAttribute("student")).getName()%>
           --%>
           
           <hr/>
           <%--使用EL获取List对象 --%>
           ${list[0].name } - ${list[0].age }<br/>
           ${list[1].name } - ${list[1].age }<br/>
           ${list[2].name } - ${list[2].age }
           <%--
           list[0]等价于       (中括号相对于调用get(参数)方法)
                   ((List)pageContext.findAttribute("list")).get(0)
            --%>
            <hr/>
            <%--使用EL获取Map对象 --%>
            ${map['100'].name } -  ${map['100'].age }<br/>
            ${map['101'].name } -  ${map['101'].age }<br/>
            ${map['102'].name } -  ${map['102'].age }<br/>
      </body>
    </html>
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>EL表达式计算</title>  
      </head>
      
      <body>
        <%--
            1)算术表达式
              +  -  *  /
         --%>
         ${10+5 }<br/>
         ${10*5 }
         <hr/>
         <%--
            2)比较运算
            >  <  >=  <=  ==   !=
         --%>
         ${10>5 }<br/>
         ${10<5 }<br/>
         ${10!=10 }
         <hr/>
         <%--
            3)逻辑运算
             &&  ||  !
         --%>
         ${true && false }<br/>
         ${true || false }<br/>
         ${!false }<br/>
         <hr/>
          <%--
            4)判空
            null 或 空字符串:  empty
         --%>
         <%
             //String name = "eric";
             //String name = null;
             String name = "";
             pageContext.setAttribute("name",name);
          %>
          判断null: ${name==null }<br/>
          判断空字符: ${name=="" }<br/>
         判空:  ${name==null || name=="" }
         另一种判空写法: ${empty name }
         
             
      </body>
    </html>
    <%@ page language="java" import="java.util.*,gz.itcast.b_entity.*" pageEncoding="utf-8"%>
    <%--导入标签库 --%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>核心标签库</title>  
      </head>
      
      <body>
        <%--使用标签 --%>
        <%--set标签 :保存数据(保存到域中)默认保存到page域 --%>
        <c:set var="name" value="rose" scope="request"></c:set>
        
        <%
            String msg = null;
            pageContext.setAttribute("msg",msg);
         %>
        
        ${msg }
        <br/>
        <%--out标签: 获取数据(从域中) 
        default: 当value值为null时,使用默认值
        escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
        --%>
        <c:out value="${msg}" default="<h3>标题3</h3>" escapeXml="true"></c:out>
        
        <hr/>
        
        <%--if标签 :单条件判断--%>
        <c:if test="${!empty msg}">
            条件成立
        </c:if>
        
        <hr/>
        <%--choose标签+when标签+otherwirse标签: 多条件判断 --%>
        <c:set var="score" value="56"></c:set>
        
        <c:choose>
            <c:when test="${score>=90 && score<=100}">
                优秀
            </c:when>
            <c:when test="${score>=80 && score<90}">
                良好
            </c:when>
            <c:when test="${score>=70 && score<80}">
                一般
            </c:when>
            <c:when test="${score>=60 && score<70}">
                及格
            </c:when>
            <c:otherwise>
                不及格
            </c:otherwise>
        </c:choose>
        
        <%-- forEach标签:循环 --%>
        <%
            //List
             List<Student>  list = new ArrayList<Student>();
             list.add(new Student("rose",18));
             list.add(new Student("jack",28));
             list.add(new Student("lucy",38));
             //放入域中
             pageContext.setAttribute("list",list);
             
             //Map
             Map<String,Student> map = new HashMap<String,Student>();
             map.put("100",new Student("mark",20));
             map.put("101",new Student("maxwell",30));
             map.put("102",new Student("narci",40));
             //放入域中
             pageContext.setAttribute("map",map);
         %>
         <hr/>
         <%--
          begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
          end="":     到哪个元素结束。默认到最后一个元素
          step="" : 步长    (每次加几)  ,默认1
          items="": 需要遍历的数据(集合) 
          var="": 每个元素的名称 
          varStatus="": 当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)
          
         --%>
        <c:forEach items="${list}" var="student" varStatus="varSta">
            序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}<br/>
        </c:forEach>
        
        <hr/>
        
        <c:forEach items="${map}" var="entry">
            ${entry.key } - 姓名: ${entry.value.name } - 年龄:${entry.value.age }<br/>
        </c:forEach>
        <hr/>
        <%-- forToken标签: 循环特殊字符串 --%>
        <%
            String str = "java-php-net-平面";
            pageContext.setAttribute("str",str);
         %>
        
        <c:forTokens items="${str}" delims="-" var="s">
            ${s }<br/>
        </c:forTokens>
        
        <%--redrict:重定向 --%>
        <c:redirect url="http://www.baidu.com"></c:redirect>
        
      </body>
    </html>

    jsp:include

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>头部页面</title>  
      </head>
      
      <body>
        通用的头部页面的内容<br/>
        参数: <%=request.getParameter("name") %>
      </body>
    </html>
    
    
    
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head> 
        <title>动作标签</title>  
      </head>
      
      <body>
        <%--转发 --%>
        <%
            //request.getRequestDispatcher("/09.action2.jsp?name=eric").forward(request,response);
         %>
        <%-- 参数 --%>
        <%--
        <jsp:forward page="/09.action2.jsp">
            <jsp:param value="jacky" name="name"/>
            <jsp:param value="123456" name="password"/>
        </jsp:forward>
          --%>
          
          <%--包含 --%>
          <%--
       <jsp:include page="/common/header.jsp">
               <jsp:param value="lucy" name="name"/>
           </jsp:include>
            --%>
            <%@include file="common/header.jsp" %>
          主页的内容
         
      </body>
    </html>
  • 相关阅读:
    WCF 第八章 安全 确定替代身份(中)使用AzMan认证
    WCF 第八章 安全 总结
    WCF 第八章 安全 因特网上的安全服务(下) 其他认证模式
    WCF Membership Provider
    WCF 第八章 安全 确定替代身份(下)模仿用户
    WCF 第八章 安全 因特网上的安全服务(上)
    WCF 第九章 诊断
    HTTPS的七个误解(转载)
    WCF 第八章 安全 日志和审计
    基于比较的排序算法集
  • 原文地址:https://www.cnblogs.com/webyyq/p/7667749.html
Copyright © 2020-2023  润新知