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);//ListList<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);//MapMap<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标签:循环 --%><%//ListList<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);//MapMap<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="" : 步长    (每次加几)  ,默认1items="": 需要遍历的数据(集合) 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>

转载于:https://www.cnblogs.com/webyyq/p/7667749.html

JSP标签和JSTL标签注意点相关推荐

  1. JSP标签:jsp内置标签、jstl标签、自定义标签

     一.jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签    1 ...

  2. 学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

    学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签.  jsp标签的分 ...

  3. jsf标签,jsp标签与jstl标签

    JSF通过定制标签与JSP集成.之前展示过的所有 JSF标签,<h:inputText>.<h:outputText>.<h:form> 和<f:view&g ...

  4. JSP中自定义jstl标签

    本期精彩: 之前的博客中有介绍jstl标签和EL表达式:web知识之域对象&EL表达式&JSTL标签_小阿飞_的博客-CSDN博客_web域对象JSP中,关于域对象.EL.JSTLht ...

  5. JSP标签,JSTL标签,EL标签

    <dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>jstl-api< ...

  6. 18、EL表达式、JSP标签、JSTL标签、自定义标签

    EL表达式 jsp的核心语法: jsp表达式 <%=%>和 jsp脚本<% %>. 以后开发jsp的原则: 尽量在jsp页面中少写甚至不写java代码. 使用EL表达式替换掉j ...

  7. 关于Jsp页面的jstl标签的级联属性的异常。

    使用SpringMVC框架时,当我做表单回显时. 情景描述.Employee 类有一个Department类的属性.这两个类存在多对一关联关系. 下面是Employee类的属性的定义. public ...

  8. JSP之自定义jstl标签

    目录 一,什么是JSP

  9. 让你认清楚JSP中的所有东西(java/JSP/EL/OGNL/JSTL/c标签/s标签/HTML/javascript/CSS)

    先来解释名词: java:jsp的基础,服务器端语言. javascript:运行在浏览器里的客户端脚本语言,目的是让网页更加生动活泼功能强大. HTML(Hypertext Markup Langu ...

最新文章

  1. KDT 对比 DDT 小栗子
  2. css变成块级元素_css块级元素垂直居中常用布局方式
  3. Apache Mahout 简介 通过可伸缩、商业友好的机器学习来构建智能应用程序
  4. 最近为一个培训公司做的配置
  5. 海豚浏览器发布双核版本 支持html5
  6. 用ADOQuery创建SQL Server数据库,并创建表结构、存储过程和视图
  7. 弱鸡儿长乐爆零旅Day3
  8. 不用找,你想要的皮革 皮草 皮毛贴图素材都在这里
  9. MATLAB音频数字水印算法实现
  10. mipi_dsi 接口转 lvds显示(GM8775C)
  11. 解决ie浏览器兼容ES6语法问题
  12. LTE中CQI反馈学习笔记
  13. linux内存条故障,linux – 如何从MCE消息中找到故障内存模块?
  14. 过程之美——过程让结果更精彩
  15. 简述中断处理的6个步骤_完整的中断处理过程分为那几个阶段?
  16. 转载_利用虚拟机VMWARE安装并配置Debian Linux系统的总结
  17. 基于WebGL(ThingJS)的家具城 商场 3D展示 3D可视化 DEMO
  18. mysql 循环插入数据脚本
  19. “no CUDA-capable device is detected”的解决方法
  20. 扑克牌问题之比较大小(JAVA)

热门文章

  1. Translucent System Bars-4.4新特性
  2. 学习笔记Spark(八)—— Spark SQL应用(3)—— Spark DataSet基础操作
  3. php 替换 乱码,php文字替换出现乱码
  4. 60秒计时器的仿真电路_物联网应用基于Arm微控制器的低功耗定时关机计时器
  5. 如何解决文件明明存在nginx却提示404
  6. 重庆市计算机专业高考试题,今年重庆高校毕业生达21.1万人 计算机类专业需求大...
  7. 写一个测试工具类,只在debug时运行,而release时自动移除代码,适用于gradle项目(idea,android studio等)
  8. python输出日志文件_python将print输出的信息保留到日志文件中
  9. JavaScript最新手机号码、电话号码正则表达式
  10. 2021-01-07 python opencv实现车牌识别 颜色定位