jsp学习笔记

  • Servlet不支持HTML语法,生成网页需要通过response输出流输出,导致生成页面的代码非常复杂.JSP支持HTML语法,生成HTML页面比较简单
  • JSP和Servlet的区别和关系?
    • JSP和Servle都是用来动态生成网页的
    • Servlet不支持HTML语法,生成网页麻烦
    • JSP支持HTML语法,生成网页比较简单
    • JSP运行时会被翻译成Servlet再执行.所以JSP就是Servlet

jsp脚本元素

  • JSP中的脚本元素
    • 声明
      • 代码 : <%! %>
      • 作用 : 声明的内容会被翻译成Servlet的成员变量, 方法和类 !
    • 表达式
      • 代码 : <%= %>
      • 作用 : 用于向页面输出内容,等价于out.print(). 不能在内容后面添加";"分号
    • 代码块
      • 代码 : <% %>
      • 作用 : 在其中书写任意Java代码.代码块可以和html嵌套使用

jsp注释

  • jsp注释:jsp的注释只存在于jsp的源文件里面,在翻译成servlet的时候就消失了

    <%-- 这是jsp的注释 --%>
    
  • jsp中的java注释:和java一样不解释
  • html注释:语法 :
    • 不能阻止java代码和jsp的运行

jsp指令

  • page指令

    import:用来导入包的

    contentType:相当于response.setContentType();jsp页面相依的MIME类型

    pageEncoding:设置的是保存时采用指定的字符编码集

    errorPage:指定当前的页面发生错误的时候跳转到指定的页面

    iserrorPage:设置某个页面是错误页面,设置为true以后,就可以通过exception过去错误信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
  • include指令(静态包含)

    file指定的是要包裹进来的文件,会生成一个java文件

    <%@ include file="index.jsp"  %>
    
  • taglib指令

    导入标签库

    uri:命名空间,prefix:命名空间的名字

    <%@ taglib url="" prefix="" %>
    

jsp内置对象

  • request

    类型:HttpServletRequest 请求对象

  • response

    类型:HttpServletResponse 响应对象

  • session

    HttpSession 回话对象

  • application

    ServletContext web应用全局唯一对象

  • config

    ServletConfig 初始化数据

  • page

    Object 当前jsp生成的servlet对象

    如果一定要使用,需要强制转换成HttpServlet对象

    Servlet有三种数据范围:request,session,servletcontext ,JSP在serlvet三种数据范围基础上,新增了page数据范围

  • pageContext

    • PageContext 当前jsp上下文
  • 可以向page范围存取数据

    • findAttribute方法会依次在page 、request 、session 、 application 四个数据范围进行数据查找.如果找到了就不会往下查找
    • 如果在EL表达式中直接使用 ${name}会调用findAttribute方法在四个范围中依次查找数据
  • 可以获得其它八个隐含对象

    • pageContext封装八个隐含对象的作用:框架编写,得到PageContext对象 相当于得到 JSP九个内置对象
  • exception

    Throwable 当页面是一个错误页面,可以获取的对象

  • out

    JspWriter 向输出流输出内容

jsp动作标签

  • jsp中6个动作标签

    <jsp:useBean>:用于在page范围内查找指定名称的javaBean,如果找不到会创建一个User对象, 然后把这个对象赋值为zhangsan;

    scope:定义那一个数据范围获取一个JavaBean;

    class:全类名,包名+类名;

    id:声明的变量名;

    <jsp:useBean id="zhangsan" class="com.luoluo.User" scope="page" />
    

    <jsp:setProperty>:用于在jsp页面中设置一个JavaBean属性 相当于调用了某属性的get方法

    name:声明的变量的名字

    value:属性值

    property:属性名

    <jsp:setProperty property="age" name="zhangsan" value="10" />
    

    <jsp:getproperty>:用于在jsp页面中获取一个JavaBean属性 相当于调用了某属性的set方法

    <jsp:getproperty property="age" name="zhangsan">
    

    <jsp:include>等价于request.getRequestDispatcher().include() 动态包含

    jsp:include和@include的区别

    • @include是JSP指令,属于静态包含.在jsp翻译为Servlet时完成包含动作,包含的内容是目标页面翻译为Servlet时的源代码,最终只会生成一个Servlet
    • jsp:include是JSP标签,属于动态包含.在servlet执行时完成包含动作,包含的内容是目标jsp翻译为Servlet生成的HTML页面,每个被包含的JSP都会生成一个单独的Servlet,所以最终会生成多个Servlet

    <jsp:forward>等价于request.getRequestDispatcher.forward()

EL表达式

  • 从数组中获取数据

    ${arr[0]}

  • 从集合中获取数据

    ${list[0]}

  • 从map集合中获取数据

    1. ${map["key"]} 得的值是value
    2. ${map.key} 得的值是value
  • empty运算符

    可以用来判断一个对象是否为null,还可以判断是否为空

    ${empty list} //当list为null或size为0的时候,得出的结果都是true

  • 三元运算符

    ${list == null ? " ": " "}

EL内置对象的使用

  • 获取四个数据范围中的数据
    • pageScope
    • requestScope
    • sessionScope
    • applicationScope
  • pageContext : 代表当前jsp上下文.通过该对象可以获取当前应用的路径${pageContext.request.contextPath },等价于<%=request.getContextPath() %>
  • ${param.name} 等价于 request.getParameter("name")
  • ${paramValues.hobby} 等价于 request.getParameterValues("hobby")
  • ${header.referer} 等价于 request.getHeader("referer")
  • ${headerValues["Accept-Encoding"]} 等价于 request.getHeaders("Accept-Encoding")
  • ${initParam.name} 等价于 getServletContext().getInitParamter("name")
  • cookie隐含对象写法
    • ${cookie.address.value } : 等于从所有Cookie中找出name为address的Cookie,并将其中的值取出来JSTL标签库

核心标签库:

  • c:set

    • 保存数据到四个数据范围
    <%
      session.setAttribute("address","shenzhen");
    %>
    <!-- scope用于指定数据范围 var:存数据的时候对应的key vlaue:存数据的时候对应的值-->
    <!-- 实现了和上面的一样的效果,往session里面存值 -->
    <c:set scope="session" var="address" value="shenzhen" />
    
    • 修改四个数据范围中已存在对象的属性值
    <%
      User user = new User();
      user.setAge(16);
      pageContext.setAttribute("usr",user);
    %>
    <!-- target表示指定的对象 property:要修改的对象的属性-->
    <c:set target="${usr}" property="age" value="10" />
    
  • c:if

    • 取代页面if条件判断
    <%
      int a= 8;
    %>
    
    <c:if test="${a>10}">
      a是大于10的
    </c:if>
    <!-- 如果是else的业务逻辑,就用not关键字,里面的条件要用()括起来 -->
    <!-- var就是把判断语句的结果存到一个对象中,对象的名字就是var值,scope就是数据存储的范围 -->
    <c:if test="${not (a>10)}" var="result" scope="page">
      a是小于10的
    </c:if>
    <!-- 这样就可以取出if里面存储的值 -->
    ${result}
    
  • c:url

    • 完成URL重写
    • 结合从c:param进行中文的编码
    <!-- context:当前应用的路径 下面的实例的路径相当于去找 /JSP/jstl/if.jsp 文件 -->
    
    <c:url context="/JSP" scope="" value="/jstl/if.jsp" var="encodeURL">
          <!-- 在客户端禁用cookie的时候,可以重写URL的资源的路径,可以对中文进行转译 -->
      <c:param name="address">深圳</c:param>
    </c:url>
    <a href="encodeURL">这里会跳转到上面的URL指定的路径 </a>
    
  • c:foreach

    • 遍历数组和集合
    <%
      pageContext.setAttribute("arr",new int[]{1,2,3});
    %>
    <!-- items:指定要遍历的对象 -->
    <!-- var:遍历的每一个元素 -->
    <c:foreach items="${arr}" var="a">
      ${a}
    </c:foreach>
    
    • 遍历map
    <%
      Map map = new HashMap();
      map.put("a","aaa");
      map.put("b","bbb");
      map.put("c","ccc");
      pageContext.setAttribute("map",map)
    %>
    
    <c:foreach items="${map}" var="m">
      ${m.key}==>${m.value}
    </c:foreach>
    
    • foreach特殊的用法
    <!-- 求1到100的和 -->
    
    <!--定义一个初始变量,初始值为0-->
    <c:set var="result" value="0" scope="page" />
    <!--求和-->
    <!-- step:递增的时候每递增多少,默认值是1 -->
    <!-- varStatus:获取当前迭代的状态 -->
    <c:foreach begin="1" end="100" var="current" >
      <c:set var="result" value="${result+current}" scope="page"></c:set>
    </c:foreach>
    <!--打印值-->
    ${result}
    
  • c:redirect

    <!--context是项目名 value是文件路径名-->
    <c:redirect context="/JSP" value="/demo1.jsp" ></c:redirect>
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,554评论 0 13
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,205评论 1 18
  • JSP页面元素的构成:静态内容,注释,声明,小脚本,表达式,指令。 JSP指令 page指令:通常位于jsp页面的...
    dev_winner阅读 670评论 0 0
  • 一、JSP基础 1.1什么是JSP JSP(Java ServerPage)是Java服务器端动态页面技术。是su...
    晨星资源阅读 1,207评论 0 6
  • 一、jsp介绍 jsp作用jsp全称java server pages(java服务器页面),本质是一个servl...
    圣贤与无赖阅读 1,291评论 0 14