JSP基础语法

3.6、动作(Action)
      动作的语法格式:    <jsp:动作名称  属性名=属性值.... ></jsp:动作名称>

3.6.1、forward动作
            例:<jsp:forward page="/2.jsp"></jsp:forward>  路径:和url-pattern相同
            转发:等同Servlet中request.getRequestDispatcher(“/2.jsp”).forward(request, response)方法。
            代替【3.1、scriptlet(小脚本)】的写法:
            <%
                request.getRequestDispatcher("/action/forward/2.jsp").forward(request,response);
            %>

1.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><%//request是九大内置对象之一,可以直接拿来使用【在service方法内部】request.setAttribute("username","admin");
%><%//转发//request,response属于九大内置对象//request.getRequestDispatcher("/2.jsp").forward(request,response);
%><jsp:forward page="/2.jsp"></jsp:forward><%-- 重定向没有对应的动作完成 --%>
<%//response.sendRedirect(request.getContextPath() + "/2.jsp");
%>

2.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><%=request.getAttribute("username") %>

————————————————  
      3.6.2、param动作
            <jsp:forward page="/2.jsp">
                <jsp:param value="lili" name="username"/>
                <jsp:param value="112233" name="password"/>
            </jsp:forward>
                
            使用param动作可以传参数,发送请求的时候向服务器传送参数。

1.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><html><head><title>param动作</title></head><body><%-- 转发:一次请求 --%><%--<jsp:forward page="/2.jsp?username=admin"></jsp:forward>--%><%--<jsp:forward page="/2.jsp?username=admin&password=112233"></jsp:forward>--%><jsp:forward page="/2.jsp"><jsp:param value="admin" name="username"/><jsp:param value="112233" name="password"/></jsp:forward></body>
</html>

2.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><html><head><title>param动作</title></head><body><%--<%=request.getParameter("username") %><%=request.getParameter("password") %>--%><script type="text/javascript">function getUsername(){//alert("<%=request.getParameter("username") %>");alert('<%=request.getParameter("username") %>');alert('<%=request.getParameter("password") %>');//java代码执行没有问题,jsp也不会报错//但是最终输出到浏览器上的代码:alert(lili);//这段代码对于javascript来说是不合法的,所以最终执行js代码的时候出错了。//alert(<%=request.getParameter("username") %>);//获取到的密码是数字的话,以下程序javascript代码也是合法的语法结构。alert(<%=request.getParameter("password") %>);}</script><input type="button" value="获取:用户-密码" onclick="getUsername();"/></body>
</html>

————————————————         
      3.6.3、include动作
         <jsp:include page="/b.jsp"></jsp:include>
         include动作表示动态包含,假如在a.jsp页面中编写了以上代码,运行原理是将a.jsp文件翻译成java源程序并且将其编译生成a.class文件,将b.jsp文件翻译生成java源程序,编译生成b.class文件,然后通过a.class去动态包含b.class。在a.jsp和b.jsp页面中可以有相同的变量名,因为他们在执行的时候表示a.class中的方法调用b.class中的方法,这些变量即使重名,它们也不属于同一个域。

* <jsp:include page="/2.jsp"></jsp:include>
                
            * include动作的执行原理:
                1.jsp包含2.jsp使用include动作的话,底层会生成两个java源程序,两个class字节码程序,等于是两个不同的Servlet,当然会有两个独立的service方法。这种包含不是在编译阶段包含的,是在程序运行阶段包含,这种包含被称为动态包含,或者叫做动态联编。

* 使用动态包含不能共享同一个局部变量,但是由于它们是独立的service方法,所以这两个jsp文件当中可以有重名的局部变量。
                
            * 什么时候选择使用include动作?什么时候选择使用include指令?
                * include动作:负责包含和被包含的jsp页面当中有重名的局部变量的时候选择使用动态包含。
                * include指令:当希望负责包含和被包含的jsp页面当中可以共享某个局部变量的时候选择使用静态包含。
                    
                include指令的效率要高于include动作。

1.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><html><head><title>include动作</title></head><body><table border="1px" align="center" width="50%"><tr><th>序号</th><th>姓名</th><th>年龄</th></tr><%-- include指令:不能有重名的局部变量 --%><%--<%@include file="/2.jsp" %>--%><%-- jsp中的include动作:可以有重名的局部变量 --%><jsp:include page="/2.jsp"></jsp:include></table><%int i = 100;%>1.jsp里    i =<%=i %></body>
</html>

2.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><%int i = 200;%>
<tr align="center"><td>1</td><td>乘一</td><td>21</td>
</tr>
<tr align="center"><td>2</td><td>乘二</td><td>22</td>
</tr>
<tr align="center"><td>3</td><td>乘三</td><td>23</td>
</tr>
2.jsp里 i =<%=i %>

————————————————

3.6.4、bean动作:useBean、setProperty、getProperty动作(作为了解!现在开发中很少使用!)
           <useBean id="c" class=”完整类名” scope=”page/request/session/application” />
 
        <jsp:useBean id="user" class="com.bjpowernode.jsp.bean.User" scope="request" />
        <jsp:setProperty property="username" name="user" value="zhangsan"/>
        <jsp:getProperty property="username" name="user"/>
         useBean、setProperty、getProperty动作是为了简化在JSP页面中的java代码,创建java对象为useBean动作,读取对象的某个属性的值为getProperty,修改对象某个属性值为setProperty这些动作都是建立在javabean规范基础之上的,例如setProperty动作底层实际上调用了setter方法,getProperty动作底层实际上调用了getter方法,而useBean动作则使用反射机制实例化java对象。

简单概述javabean规范:
           (1)JavaBean 类必须是一个公共类,并将其访问权限设置为 public
           (2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。
           (3)一个javaBean类不应有公共实例变量,类变量都为private
           (4)持有值应该通过一组存取方法(getXxx 和 setXxx)来访问:对于每个特性,应该有一个带匹配公用 getter 和 setter 方法的专用实例变量javabean又被叫做PO、POJO、VO、DTO等,通常开发存储在叫做entity或者bean包中。

* 为什么bean动作轰动一时呢?现代开发中很少使用了呢?
                
        很久以前有一种开发模式叫做:Model1
        所谓的Model1开发模式表示使用纯粹的JSP+JavaBean+JDBC完成项目中所有的功能。
        在JSP当中编写JDBC代码连接数据库,同时做页面展示。
                    
        JSP最主要的功能是完成页面中数据的展示,在JSP中编写大量的java代码,尤其处理复杂的业务逻辑的时候,JSP代码维护成本上升。扩展能力差。所以Model1开发模式很快就淘汰了。
                    
        取而代之的是一种新的开发模型,叫做:Model2开发模式,Model2就是现代开发中著名MVC架构模式。
                    
        Model1的开发优点:快,对于业务逻辑简单的应用可以应付。
                    
        Model2的开发前期投入成本较高,但是有模块/组件的独立概念,每一个组件都是可复用的,耦合度低,扩展能力强。
                    
        在Model1开发模式的时候:bean动作使用较多。

1.jsp代码:

<%@page contentType="text/html; charset=UTF-8"%><%--以下代码的含义:创建一个User对象【调用无参数的构造函数】,起名user,将user存储到request范围当中
--%>
<jsp:useBean id="user" class="com.jspDemo.bean.User" scope="request" /><%=request.getAttribute("user") %><br><%--以下代码的含义:给user对象的相关属性赋值【set方法】
--%>
<jsp:setProperty property="username" name="user" value="lili"/>
<jsp:setProperty property="password" name="user" value="112233"/><%=request.getAttribute("user") %><br><%--以下代码的含义:将user对象中的相关数据取出,输出到浏览器上【get方法】
--%>
<jsp:getProperty property="username" name="user"/>
<jsp:getProperty property="password" name="user"/>

User.java代码:

package com.jspDemo.bean;import java.io.Serializable;public class User implements Serializable {private static final long serialVersionUID = -9186217464431530460L;private String username;private String password;public User() {super();System.out.println("execute!");}public String getUsername() {System.out.println("运行 getUsername() +++");return username;}public void setUsername(String username) {System.out.println("运行 setUsername() +++");this.username = username;}public String getPassword() {System.out.println("运行 getPassword() +++");return password;}public void setPassword(String password) {System.out.println("运行 setPassword() +++");this.password = password;}@Overridepublic String toString() {return "User [username=" + username + ", password=" + password + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result+ ((username == null) ? 0 : username.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;User other = (User) obj;if (username == null) {if (other.username != null)return false;} else if (!username.equals(other.username))return false;return true;}
}

————————————————
版权声明:本文为CSDN博主「乘风晓栈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cheng_feng_xiao_zhan/article/details/100144010

JSP基础语法-动作(Action)相关推荐

  1. javaweb_笔记2(Servlet源码分析;request详解;请求域;转发和重定向;WebServlet注解;jsp基础语法,JavaBean。)

    1.HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的.比GenericServlet更加适合HTTP协议下的开发. HttpServlet在哪个包下? jakarta ...

  2. JSP、EL和JSTL-学习笔记01【JSP基础语法】

    Java后端 学习路线 笔记汇总表[黑马程序员] JSP.EL和JSTL-学习笔记01[JSP基础语法] JSP.EL和JSTL-学习笔记02[MVC] JSP.EL和JSTL-学习笔记03[EL介绍 ...

  3. 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(十五)——JSP基础语法   任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语

    javaweb学习总结(十五)--JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. ...

  4. JSP基础语法-scriptlet(小脚本)

    JSP基础语法 3.1.scriptlet(小脚本)       在jsp文件中使用 <%  %>,出现在该符号内的java程序翻译之后会被存放在Servlet的service方法中. 所 ...

  5. JSP的HTML基础实验原理,实验四 JSP基础语法

    jsp的一些常用语法 实验四 JSP基本语法 一.实验目的 1. 熟练掌握JSP的声明.表达式.小脚本和注释的使用: 2. 理解JSP指令和动作的语法格式: 3. 理解JSP页面的生命周期. 4. 熟 ...

  6. 75 jsp基础语法汇总

    JSP语法 脚本程序 脚本程序可以包含任意量量的Java语句句.变量量.⽅方法或表达式,只要它们在脚本语⾔言 中是有效的. 脚本程序的语法格式: <% 代码⽚片段 %> 或者,您也可以编写 ...

  7. jsp基础语法【05】_跳转指令

    跳转的作用: 使用跳转指令可以将一个用户的请求,从一个页面传递到另外一个页面. 例如:用户登录QQ空间,如果用户名和密码正确的话就会跳转到空间首页,否则就会跳转到失败页. 跳转指令的语法: 不传递参数 ...

  8. javaweb学习总结(十五)——JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  9. javaweb学习总结(十五):JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

最新文章

  1. python中weekid什么意思_week_one-python格式化输出
  2. numpy向量转换为矩阵_干掉公式——numpy 就该这么学
  3. springboot springmvc 抛出全局异常解决方法
  4. C#编程(七十四)----------释放非托管资源
  5. E0144 const char * 类型的值不能用于初始化 char * 类型的实体
  6. 前端一HTML:十五: 权重的比较
  7. 代码:显示查询的日历
  8. docker基础用法
  9. ubuntu下安装django
  10. ivx中字体显示_html-中文字体在CSS中的显示(Unicode编码)(转载)
  11. 游戏场景设计文档案例_产品经理、设计、运营入门与进阶(132本书籍+需求文档+案例)...
  12. PaddleClas模型训练/评估:数据准备
  13. AutoJs学习-TTS抢语音红包
  14. 微信小程序自定义Dialog弹框
  15. DPDK Release 22.07
  16. 如何出版一本技术类书籍
  17. 二阶矩阵转置怎么求_使用mathematica11软件求解2/3/4阶矩阵的转置矩阵教程
  18. Html+Css 3D旋转立方体
  19. 吉首大学2019年程序设计竞赛 A-SARS病毒(递推推公式)
  20. 什么是闭包 以及使用场景

热门文章

  1. Linux中一些有用而炫酷的代码
  2. 禁止ftp用户ssh登录,允许ftp登录
  3. 如何创造被动收入 | 我的知乎Live
  4. java jdk 国内下载镜像地址
  5. 英语计算机简历范文模板,计算机英文简历范文模板
  6. 压缩包设置了打开密码忘记了怎么办?
  7. matlab2016a贝叶斯工具箱,matlab贝叶斯工具箱
  8. SQL语法——LIKE
  9. hiredis从安装到实操,带 API 详解
  10. 自定义表格式布局FormLayout