zoukankan      html  css  js  c++  java
  • 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!

    jsp

    第一章 jsp介绍及对比servlet

    作用:

    动态网页技术,动态的从数据库获取数据

    jsp和servlet的优缺点:

    jsp优点:页面表现方便,利于写html代码

    jsp缺点:业务逻辑处理麻烦,不利于写Java代码

    servlet优点:业务逻辑处理方便,适合写Java代码

    servlet缺点:页面表现麻烦,不利于写html代码

    第二章 jsp编译器指定

    一:指定编程语言及编码格式

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

    二:处理500错误

    作用:当页面出现500指定错误时,引用另一个页面,来处理代码错误,只能处理运行时错误,不能处理编译期错误

    <%@ page errorPage="error.jsp" %>

    三:处理400错误,是在web.xml 中进行配置

    <error-page>    <error-code>404</error-code>    <location>/404.jsp</location>   </error-page>

    第三章 动态导入和静态导入

    注:看不懂动态导入和静态导入机制的,可以先学习第五章:jsp的执行过程

    动态导入:

    (1)可以将不同的页面分别编写成Java文件,再编译成class文件,每个文件互不影响

    (2)每个文件中可以有同名的变量

    (3)如果页面中的Java代码较多,建议动态导入

    (4)效率相对较低,耦合度也较低

    <jsp:include page="include.jsp"></jsp:include>

    静态导入:

    (1)将不同的jsp页面合成一个Java文件,再编译成class文件

    (2)每个jsp文件不可以有同名的变量

    (3)如果java代码比较少或者没有Java代码,建议使用静态导入

    (4)效率相对较高,耦合性也较高

    <%@ include file="include.jsp"%>

    第四章 jsp页面注释

    (1)脚本段

    <% int a = 100; %>

    (2)表达式

    <%=a %>

    (3)声明成员变量:但是不建议使用,servlet中不能使用成员变量,造成数据不安全

    <%! int b = 100; %>

    第五章 jsp的执行过程

    jsp的执行过程:

    1:客户端发送一个以.jsp结尾的请求,被tomcat进行拦截(web.xml)

        2: tomcat将这个jsp文件先编写成java文件,再编译成class文件

        3:tomcat引擎会调用class文件生成html,然后返回给客户端

    为什么说jsp也是servlet?

         当客户端第一访问jsp页面时,tomcat引擎会拿到jsp文件编写成java文件,承这个java文件里面类继承HttpJspBase类,HttpJspBase类又继承HttpServlet,所以可以认为jsp也是servlet

    第六章 九大内置对象

    九大内置对象:

    四个作用域:pageContext、request、session、Application

    两个输出:response、out

    三个不常用:config、page、exception

    内置对象的作用:

    (1)pageContext

    作用:取得任何范围参数,通过它可以获取其他八个内置对象,创建和初始化都由容器完成,在jsp页面可以直接使用

    范围:在jsp页面可直接使用,仅限于本jsp页面

    (2)request

    作用:客户端的请求信息(请求头、请求行、参数)

    范围:一次请求之间

    (3)session

    作用:由服务器自动创建的与用户请求相关的对象。用于保存用户信息、跟踪用户的操作状态。内部使用map来保存数据

    范围:一次会话之间

    (4)Application

    作用:将信息保存在服务器,直到服务器关闭,用于获取项目访问访问路径以及配置参数。

    范围:服务器开始到结束

    (5)response

    作用:对客户端的响应,将jsp容器处理过的对象传回客户端。

    范围:仅限于本jsp页面

    (6)out

    作用:在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区,待数据传输完毕后,要及时关闭输出流

    (7)config

    作用:取得服务器的配置信息

    (8)page

    作用:代表jsp本身,只有在jsp页面内才有作用

    (9)exception

    作用:显示异常信息,只有在包含 isErrorPage = "true"的页面才能使用,在一般的jsp页面中使用该对象,将无法编译jsp文件,如果在jsp页面中没有捕获到的异常,就会生成Exception对象,并将其传送到page指令中设置的错误页面进行处理。

    第七章 jsp路径问题

    (1)服务器根路径:http://localhost:8080/

    (2)项目根路径:http://localhost:8080/servletHello/

    (3)相对路径;

    ../:表示跳回上一级目录

    优点:相对简单

    缺点:当改变文件位置时,相对路径也改变

    绝对路径:

    优点:的那该改变文件位置时,对其他路径无影响

    缺点:相对麻烦

    jsp简化书写:

    String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; <base href="<%=basePath%>">

    这样在jsp页面中出现的路经都可以写成:servletHello,这样代表绝对路径。避免了404错误。

    (4)在servlet中不同的“/”代表不同的路径:

    web.xml

    <url-pattern>/HelloPath</url-pattern> 里面的/代表 项目的根路径

    请求转发

    req.getRequestDispatcher("/").forward(req, resp); 里面的/代表项目的根路径

    请求重定向

    resp.sendRedirect("/");  里面的/代表服务器根路径

    EL表达式

    第一章 EL表达式介绍及其优点

    EL表达式:Expression Language;

    作用:获取服务器中请求对象和作用域中的值

    优点:相对于jsp来说

    (1)写法简单

    (2)不需要导jar包

    (3)当获取不到数据时,不会显示null,而是什么都不显示

    第二章 EL表达式获取不同存储集合中的数据

    测试代码如下:

    servlet代码:

    public class HelloEL extends HttpServlet {
            @Override
            protected void service(HttpServletRequest req, HttpServletResponse resp)
                            throws ServletException, IOException {
                    
                    //获取用户名和密码
                    String name = req.getParameter("uname");
                    String pwd = req.getParameter("pwd");
                    System.out.println("HelloEL.service():"+name+"--"+pwd);
                    
                    //作用域存放字符串
                    req.setAttribute("realname", "zhangsanfeng");
                    
                    //作用域可以存放list集合
                    ArrayList<String> list = new ArrayList<>();
                    list.add("a");
                    list.add("b");
                    list.add("c");
                    req.setAttribute("list", list);
                    
                    //作用域可以存放map
                    HashMap<String, String> map = new HashMap<>();
                    map.put("m1", "A");
                    map.put("m2", "B");
                    map.put("m3", "C");
                    req.setAttribute("map", map);
                    
                    //作用域存放user对象
                    User user = new User(1, "lisi", "123");
                    User user2 = new User(2, "wangwu", "abc");
                    req.setAttribute("user", user);
                    req.setAttribute("user2", user2);
                    
                    //把对象存放到list集合里面
                    User user3 = new User(3, "wangwu3", "abc3");
                    User user4 = new User(4, "wangwu4", "abc4");
                    User user5 = new User(5, "wangwu5", "abc5");
                    ArrayList<User> userlist = new ArrayList<>();
                    userlist.add(user3);
                    userlist.add(user4);
                    userlist.add(user5);
                    req.setAttribute("userlist", userlist);
                    
                    //把对象存放到map里面
                    HashMap<String, User> mapuser = new HashMap<>();
                    mapuser.put("u3", user3);
                    mapuser.put("u4", user4);
                    mapuser.put("u5", user5);
                    req.setAttribute("mapuser", mapuser);
    
                    //请求转发
                    req.getRequestDispatcher("/el.jsp").forward(req, resp);
                    return;
            }
            
    }

    form表单:

    <form action="HelloEL">
            用户名:<input type="text" name="uname" value="zhangsan"/> <br />
            密码:<input type="password" name="pwd" value="abc"/> <br />
            爱好:<input type="checkbox" name="fav" value="1"/>吃饭
            <input type="checkbox" name="fav" value="2"/>睡觉
            <input type="checkbox" name="fav" value="3"/>打豆豆 <br />
            <input type="submit" value="提交"/>
        </form>

    2.1 EL表达式获取请求对象里面的属性值

    jsp写法:<%=request.getParameter("uname") %>

    EL写法:${param.uname }

    2.2 EL表达式获取请求对象里面的属性值,数组类型

    jsp写法:<%=request.getParameterValues("fav")[0] %>

    EL写法:${paramValues.fav[0] }

    2.3 EL表达式获取作用域中的值

    jsp写法:<%=request.getAttribute("realname") %>

    EL写法:${realname }

    2.4 EL表达式获取request作用域中list集合中的值

    jsp写法:<%=((ArrayList<String>)(request.getAttribute("userlist"))).get(1) %>

    EL写法:${userlist.get(1) } -- ${userlist[1] }

    2.5 EL表达式获取request作用域中map集合的值

    jsp写法:<%= ((HashMap<String,String>)request.getAttribute("mapuser")).get("m2")%>

    EL写法:${mapuser.get("m2") } -- ${mapuser.m2 }

    2.6 EL表达式获取request作用域中user对象的name属性值

    jsp写法:<%= ((User)request.getAttribute("user")).getName() %>

    EL写法:${user.name }

     

    第三章 EL表达式获取固定作用域中的值

    jsp有四个作用域:

    (1)pageContext

    (2)request

    (3)session

    (4)application(相当于servlet的ServletContext作用域)

    获取作用域里面的值,如果作用域的key一样,EL表达式获取值默认是从小到大获取:

    pageContext-->request-->session-->application(由小到大)

    EL获取固定作用域中的值:

    (1)pageContext作用域:

    ${pageScope.realname }

    (2)request作用域:

     ${requestScope.realname }

    (3)session作用域:

    ${sessionScope.realname }

    (4)application作用域:

    ${applicationScope.realname }

    第四章 EL表达式进行基本的运算

    (1)进行基本的运算:+  - * / % ==

     ${1+1 }   ${1*2 }   ${1/0 }   ${-1/0 }   ${4%3 }  ${1+"2" }  ${1==1 } 

    (2)判断是否为空:empty

     ${empty str }  ${empty array }  ${empty user3 }  ${empty list }

    注:

    (1)判断为true的情况:空的""字符串,null,空的集合

    (2)判断为false的情况:空数组、空的对象

    JSTL标签库

    第一章 JSTL介绍及其作用

    使用JSTL标签库,需要在项目中导入两个jar包:

    这两个jar包,在小编的资源分享那篇文章有下载链接,或者留下邮箱,小编会第一时间给大家发过去的。

    JSTL的作用:

    替代在jsp页面写Java代码。主要用来显示EL表达式中的值,通常和EL表达式配合起来使用,需要手动导入标签库。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    EL表达式的值:

    用来获取请求对象或者作用域中的值

    第二章 fmt标签的应用

    <!-- type 时间的类型(both 年月日时分秒  ;time 只显示时分秒 ) -->
    <fmt:formatDate value="<%=new Date() %>" pattern="yyyy-MM-dd HH:mm:ss"/>

    第三章 C标签应用

    3.1 c:set 标签

    作用:代替设置作用域,如果不指定作用域,默认设置最小作用域

    <c:set  var="realname"  value="zhangsanfeng" ></c:set>
    <c:set  var="realname2"  value="zhangsanfengPage" scope="page"></c:set>
    <c:set  var="realname"  value="zhangsanfengRequest" scope="request"></c:set>
    <c:set  var="realname"  value="zhangsanfengSession" scope="session"></c:set>
    <c:set  var="realname"  value="zhangsanfengApplication" scope="application"></c:set>

    3.2 c:remove 标签

    作用:移出作用域,如果不指定作用域,默认移出所有作用域

    <c:remove var="realname"/>
    <c:remove var="realname" scope="page"/>
    <c:remove var="realname" scope="request"/>
    <c:remove var="realname" scope="session"/>
    <c:remove var="realname" scope="application"/>

    3.3 c:out 标签

    作用:获取作用域,如果不需要设置默认值,不需要使用c:out标签

    <c:out value="${realname3 }" default="lisi"></c:out>

    3.4 c:if  标签

    作用:相当于Java中的if  else语句

     <c:if test="${sex == 1 }">
              <input type="radio" name="sex"  value="1" checked/> 男
              <input type="radio" name="sex"  value="0"/> 女
         </c:if>
         <c:if test="${sex == 0 }">
              <input type="radio" name="sex"  value="1" /> 男
              <input type="radio" name="sex"  value="0" checked/> 女
         </c:if>

    3.5 c:choose 标签

    作用:想当于Java中的if  else    if   else语句

    <c:choose>
              <c:when test="${sex == 1 }">男</c:when>
              <c:when test="${sex == 0 }">女</c:when>
              <c:otherwise>其它</c:otherwise>
          </c:choose>

    3.6 c:forEach 标签

    作用:相当于Java中的for循环语句

    参数列表:

    begin:开始值

    end:结束值

    var:循环变量

    step:步距

    items:结束作用域中的数据,进行循环

    varStatus:数据的状态

    vars.index:获取数据的值

    vars.count:获取的是第几个数据

    var.first:判断是否是第一个数据

    var.last:判断是否是最后一个数据

    应用一:打印九九乘法表

    <c:forEach begin="1" end="9" var="i">
              <c:forEach begin="1" end="${i }" var="j">
                  ${i } * ${j } = ${i*j }
              </c:forEach>
              <br />
    </c:forEach>

    应用二:遍历list集合中的数据

    <c:forEach items="${list }" var="each">
              ${each } -- 
          </c:forEach>

    应用三:遍历map集合中的数据

    <c:forEach items="${map }" var="each">
        ${each.key } -- ${each.value } <br />
    </c:forEach>

    应用四:获取集合中的user对象,并将数据放到表格中

    <table border="1" width="600px" align="center">
              <tr>
                  <th>序号</th>
                  <th>姓名</th>
                  <th>地址</th>
              </tr>
              <c:forEach items="${userlist }" var="each" varStatus="vars">
                  <tr>
                      <th>${var.id }</th>
                      <th>${each.name }</th>
                      <th>${each.address }</th>
                  </tr>
              </c:forEach>
              
          </table>
  • 相关阅读:
    cordova热更新插件的使用:cordova-hot-code-push-plugin
    cordova日期插件的使用:cordova-plugin-datepicker
    前后端如何保持长连接?---websocket
    ionic使用的一些技巧
    ionic 前端接收到后台推送来的消息后,显示在手机的通知栏上
    gbk和utf8的json转化
    short_open_tag的作用
    查询时间段内各个城市每天订单量,并按照城市、日期倒序排序
    msyql常用函数
    微信小程序简单开发流程
  • 原文地址:https://www.cnblogs.com/ncl-960301-success/p/10872304.html
Copyright © 2011-2022 走看看