JSP,EL和JSTL

JSP

JSP基础语法

jsp中既可以写java代码,也可以写html等静态代码,其本质就是一个servlet

  1. 指令
    1. 作用: 用于配置jsp页面, 以及导入一些资源文件.
    2. 格式: <%@ 指令名称 属性名1=属性值1 属性名1=属性值1 …%>
    3. 分类:
      1. page: 配置jsp页面.
        • contentType: 等同于response.setContentType()这个方法.
          • 可以用于设置响应体的mime类型和字符集.
          • 设置当前jsp页面的编码(只能是高级的ide才能生效,如果使用记事本这样的低级开发工具,那就需要使用pageEncoding()来设置).
        • import: 用来导java包,和java中导包一样.
        • errorPage: 当前页面发生异常后,会自动跳转到指定的错误页面,
          • 例如: <%@page errorPage="index.jsp" %>,注意这个errorPage不能是当前页面,必须是其它的jsp页面.
        • isErrorPage: 标示当前页面是否是错误页面,默认为false,但是,标示当前页面的isErrorPage为true之后,就可以使用内置对象exception了.
        • isErrorPage示例代码
      2. include: 页面包含的,导入页面的资源文件,比如我这个页面值写头部,其它页面要这个头部的时候直接包含进去就可以了.
        • <%@include file=“top.jsp”%>
      3. taglib: 导入资源,一般用于导入标签库,相当于导包.
  2. 注释
    1. html注释: : 只能注释html代码片段,注释的东西你再浏览器中查看源码还是可以看到.
    2. jsp特有的注释
      <%-- --%>: 可以注释所有(推荐使用,注释的东西就不会发送到浏览器,相当于删除了)
  3. 内置对象
    1. 在jsp页面中不需要创建可以直接使用的对象,一共有9个.
    2. pageContext(jsp中的域对象),真实类型为PageContext,其作用范围为: 当前页面,可以在当前页面共享数据,还可以获取其它八个内置对象(通过get方法).
      <%
    	request.setAttribute("msg", "hello");
      %>
    
      <%= request.getAttribute("msg")%>
    
    1. request(jsp中的域对象),真实类型为HttpServletRequest,其作用范围为: 一次请求访问的多个资源(通过转发实现).
    2. session(jsp中的域对象),真实类型为HttpSession,其作用范围为: 一次会话的多个请求间.
    3. application(jsp中的域对象),真实类型为ServletContext,其作用范围为: 所有用户间共享数据,服务器开启被创建,服务器关闭被销毁.
    4. response,真实类型为HttpServletResponse,其作用为: 作为一个响应对象.
    5. page,代表当前对象,等于this,真实类型为Object,其作用为: 表示当前页面(servlet)的对象 this.
    6. out,真实类型为JspWriter,其作用为: 输出对象,将数据输出到页面上.
    7. config,真实类型为ServletConfig,其作用为: 作为servlet的配置对象.
    8. exception(要声明该页面为isErrorPage=true才能使用),真实类型为Throwable,其作用为: 作为一个异常对象.

MVC开发模式(知道什么代码往哪儿写,很重要)

  1. jsp的演变历史

    1. 早期只有servlet,没有jsp,只能使用response输出标签数据,非常麻烦.
    2. 后来就有了jsp,简化了servlet的开发,但是如果过度使用jsp,在jsp中既写大量代码,又写一堆html标签,后期很难维护,别人也看不懂.
    3. 再后来,Java的web开发就借鉴了mvc的开发模式,使得程序的设计更加合理.
  2. MVC详解

    1. M: Model, 模型.JavaBean
      • 完成具体的业务操作,如: 查询数据库(对数据库的操作都放在Dao包下),封装对象.
    2. V: View, 视图. JSP
      • 仅展示数据,就不写java代码了尽量.
    3. C: Controller, 控制器. Servlet
      • 获取用户输入.
      • 调用模型.
      • 将数据(包括用户输入的和模型返回的)交给视图进行展示.
    4. 优点
      1. 耦合性低,所以方便维护,有利于分工协作.
      2. 重用性高.
    5. 缺点: 使项目架构变得复杂,对程序猿的要求更高,要有一个很完整的构思.
    6. 如图: MVC详解.

EL表达式(简化JSP中java开发代码)

  1. 概念: Expression Language 表达式语言.
  2. 作用: 替换和简化jsp页面中java代码的编写,注意它只能获取域中的数据,所以所有要使用el表达式的都需要先存到域对象中.
  3. 语法: ${表达式}.
  4. 注意:
    1. jsp默认支持EL表达式.
    2. 如果要忽略EL表达式,即将EL表达式当作普通字符串输出,有两种方法:
      1. 设置jsp中的page指令中的isELIgnored属性为true,即 <%@page isELIgnored="true" %>,表示忽略当前jsp页面中所有的EL表达式,这样整个页面的EL表达式都会被当作字符串处理.
      2. 在EL表示式前加一个反斜杠\就可以了,例如 \${3 > 4},表示忽略当前这个EL表达式.
  5. 作用:
    1. 运算

      1. 运算符
        1. 算术运算法: + - * /(div) %(mod),注意除法后默认是double类型.
        2. 比较运算符: > < >= <= ==.
        3. 逻辑运算符: &&(and) ||(or) !(not).
        4. 空运算符: empty,用于判断字符串,集合,数组对象是否为null并且长度是否为0.
          • 例如: ${empty list},判断list对应的字符串,集合,数组对象是否为空或者长度为0,满足一个就返回true.
          • ${not empty list},判断字符串,集合,数组对象是否不为null并且长度>0,满足则返回true.
      2. 案例代码: 运算符示例代码.
    2. 获取值(通过属性获取值,越界时候输出都是空字符串,不会报错)

      注意这里的属性就是get和set方法去掉get和set,剩下的部分再将首字母小写,即getAge()–>age属性.

      1. EL表达式只能从域对象中获取值.
      2. 语法:
        1. ${域名称.键名称}: 从指定域中获取指定键的值.
          • 域(4个):
            • pageScope —> pageContext.
            • requestScope —> rquest.
            • sessionScope —> session.
            • applicationScope —> application(即java中的servletContext).
          • 举例: 在request中存储了name=饭饭,通过${requestScope.name}就可以得到张三.
        2. ${键名}: 表示依次从最小的域pageContext开始查找是否有该键对应的值,知道找到为止.
      3. 获取对象, List集合, Map集合的值
        1. 获取对象: ${域名称.键名.属性名}.
          • 本质上是用对象去调用对应的get方法.
        2. List集合: ${域名称.键名称[索引]}.
          • 比如说当索引为0,表示获取该集合中的第一个元素.
          • 没有索引就输就所有值.
          • 下标越界就输出空字符串,不会报错.
        3. Map集合: 域 名 . 键 名 . k e y 名 或 者 {域名.键名.key名}或者 ..key{域名.键名[key名]}.
        4. 获取对象中的数据案例代码.
    3. 隐式对象: 可以直接拿来用,类似于jsp的内置对象,el表达式中有11个隐式对象.

      • 这里注意一下pageContext就可以了:
        1. 可以获取jsp其它八个内置对象.
        2. 可以动态获取虚拟目录: p a g e C o n t e x t . r e q u e s t . c o n t e x t P a t h , 可 以 用 在 j s p 页 面 的 f o r m 表 单 中 , 例 如 : a c t i o n = &quot; {pageContext.request.contextPath},可以用在jsp页面的form表单中,例如: action=&quot; pageContext.request.contextPath,jspform,:action="{pageContext.request.contextPath}/loginServlet".

JSTL标签(简化JSP中java开发代码)

  1. 概念: Java Server Pages Tag Library 即JSP标准标签库

    • 是由Apache阿帕奇组织提供的开源的免费的jsp标签库 <标签>.
  2. 用于简化和替换jsp页面上的java代码.

  3. 使用步骤:

    1. 导入jstl相关的jar包.
    2. 引入标签库: taglib指令 <%@ taglib %>
    3. 使用标签.

这里在运行的时候我遇到了一个错The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application,这个错就是项目在部署的时候jstl的jar包在tomcat下的WEB-INF的lib中没得,将jar包复制到目录下就行了

  1. 常用的jstl标签
    1. if,相当于java中的if,但是没有else.

      1. 属性
        • test, 必须属性,接收boolean表达式,
          • 如果表达式为true,则显示if标签体内容
          • 如果表达式为false,则不显示if标签体内容
          • 如果表达式什么都不是也不会显示if标签体内容
          • 一般情况下,test属性值会结合el表达式的empty运算符,比较运算符,逻辑运算符等一起使用.
      2. 注意: c:if标签没有else情况,想要else情况,就要重写一遍c:if标签.
    2. choose,相当于java中的switch.

      1. choose标签写一个星期几小案例
        1. 在域中存储一个数字.
        2. 使用choose标签取出数字 相当于switch的声明.
        3. 使用when标签做数字的判断,相当于case, <c:when test="${number == 1}">.
        4. otherwise标签做其它情况的声明,相当于default, <c:otherwise>.
    3. foreach,相当于java中的for循环.

      1. 属性:
        • items: 容器对象
        • var: 容器中的临时变量
        • varStatus: 循环状态对象
          • index: 容器中元素的索引,从0开始
          • count: 循环次数,从1开始
    4. jstl入门案例代码.

    5. 练习:

      1. 需求: 在request域中有一个存有user对象的list集合,需要使用jstl+el将list集合数据展示到jsp页面的表格中.
      2. 练习代码.

三层架构(针对服务器而言): 软件设计架构

  1. 界面层(表示层): 即用户看到的界面,用户可以通过界面上的组件和服务器进行交互例如将数据封装提交.
  2. 业务逻辑层: 处理业务逻辑的.
  3. 数据访问层: 操作数据存储文件,如数据库,txt文件等.
  4. 针对web服务器而言,上述三层架构又叫web层, service层, dao(data access object)层.
  5. 其关系如图: 三层架构原理.

案例: 用户信息列表展示

1. 需求: 用户信息的查询操作
2. **[用户信息展示_查询代码]()**.

综合案例练习

1. 简单功能
	1. 列表查询(就是上面的,我是直接复制过来的).
	2. 登录.
	3. 列表添加.
	4. 列表删除.
	5. 列表修改.
2. 复杂功能
	1. 删除选中的多条信息.
	2. 数据分页查询.
	3. 复杂条件查询.
3. [案例完整代码](https://github.com/fanfan999/WebCodes/tree/master/user_crud_complete).
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值