zoukankan      html  css  js  c++  java
  • Jsp学习笔记(2)——页面导航、表单、EL表达式

    页面导航

    有两种跳转页面的方法。重定向和请求转发

    两者区别:

     请求转发(forward)重定向(rerect)
    请求服务次数 1 2
    是否保留第一次请求request范围的属性 保留 不保留
    地址栏的请求URL是否改变 不变 改变,相当于在地址栏重新输入URL按下回车键

    说明的例子:

    • 请求转发:张三去银行办理业务,在窗口A办理,窗口A的业务员发现自己无权操作,便把张三的业务交给其他人去完成
    • 重定向: 张三去银行办理业务,在窗口A办理,窗口A的业务员发现自己无权操作,提示张三去窗口B办理

    重定向

    重定向,客户端实际上进行了两次请求,在第一次请求,获得到了一个特殊的response,没有任何内容,客户端接收到此请求,会修改location,向新的location再次发送请求

    重定向(response),会丢失request的数据,而sension里面的数据不会丢失

    应用程序的根目录(上下文) request.getContentPath()

    // "/" 是tomcat的根目录 (http://localhost:8080/)
    response.sendRedirect("url")
    // 应该这样写:
    respones.sendRedirect(request.getContentPath()+"/dologin.jsp");

    请求转发

    // url中的“/”是web根目录(就是web文件夹)
    request.getRequestDispatcher("url").forward(request,resopnes)

    请求转发前后的request是同一个对象

    表单

    在form标签里面存在着表单元素,form设置action,表示,当点击提交按钮,就会跳转到的jsp页面(重定向)

    <form method="post" action="login.jsp">
        <input name="username" type="text"/>
        <input name="password" type="password"/>
        <input type="submit" value="login"/>
    </form>

    上面的代码块,点击按钮的时候,就会跳转到login.jsp,同时带上了参数 username和password

    实际上,相当于发送了一条这样的请求 login.jsp?username=xx&password=xx

    之后,就可以通过request.getParameter("username")这样的方式来获得传过来的数值

    如果某个标签有disable,即使该标签有name属性,但请求的参数是无法获得name的对应的值

    客户端(js,html)中 “/”表示localhost:8080

    jsp/servlet 在请求转发就是web根目录(应用程序上下文)

    EL表达式

    EL表达式就是一种简单的写法,主要用来从request、response、session、pageContext等内置对象取出数据。

    例如,使用jsp表达式取出请求参数:

    <h1><%=request.getParameter("name")%></h1>

    可以这样写:

    <h1>${param.name}</h1>

    如果是setAttribute存入的数据:

    <h1><%=request.getAttribute("name")%></h1>

    EL表达式得这样写:

    <h1>${requestScope.name}</h1>

    如果存入了一个对象,想要获得对象的某个属性值

    <h1><%=request.getAttribute("employee").getName()%></h1>

    EL表达式:

    <h1>${requestScope.employee.name}</h1>

    请求参数对象:

    对象说明
    param 与request.getParameter()方法一样
    paramValues 与request.getParameterMap()方法一样

    作用域对象:

     JSP隐式对象存储数据示例EL隐式对象EL示例
    页面作用域 pageContext pageContext .setAttribute(“name”, 对象); pageScope
    请求作用域 request request .setAttribute(“name”, 对象); requestScope
    会话作用域 session session .setAttribute(“name”, 对象); sessionScope
    应用程序作用域 application application .setAttribute(“name”, 对象); applicationScope

    EL表达式中,可以不写前面的那个作用域,EL表达式就会默认按作用域范围大小从大到小查找

    //pagecontext ->request ->session-> application
    <h1>${employee.name}</h1>

    访问数组、集合或者Map

    <h1>${array[2]}</h1>
    <h1>${list[1]}</h1>
    
    //相当于map.get("red")
    <h1>${map["red"]}</h1>
    <h1>${map.red}</h1>
    

    新增,删除,更新操作使用重定向

  • 相关阅读:
    数据库连接池的原理。为什么要使用连接池。
    如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
    MyBatis 与 Hibernate 有哪些不同?
    Class.forName的作用?为什么要用?
    一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?
    MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
    如果有大量的key需要设置同一时间过期,一般需要注意什么?
    使用过Redis做异步队列么,你是怎么用的?
    我们如何在Struts2应用程序中集成log4j?
    我们怎样才能在动作类中获得Servlet API请求,响应,HttpSession等对象?
  • 原文地址:https://www.cnblogs.com/chaoyang123/p/11548830.html
Copyright © 2011-2022 走看看