JSP

概念:

  • 长的像html页面的servlet。当访问这个jsp页面的时候tomcat会把jsp变成xxx_servlet.java文件,并且执行编译后的servlet代码

向jsp中插入java代码

  • <% java code%>

jsp指令

  • 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
  • page指令:contentType:告诉浏览器如何解析
    – import导包
    – isErrorPage:标识当前也是是否是错误页面,true可以使用exception
  • include指令:功能:把多个页面中的共同数据提取到单个页面,多个页面引入这个页面即可好处:以后修改一个页面代码就行了 <%@include file=“nav.jsp”%>
  • taglib指令

注释

  • html注释:
    <!-- -->:只能注释html代码片段
  • jsp注释:推荐使用
    <%-- --%>:可以注释所有

配置全局异常处理的页面

  1. 在web目录下引入404.html和505.html
  2. 配置WEB.XML
<error-page>
	<error-code>404</error-code>
	<location>/404.html</location>
</error-page>

jsp九大内置对向raps process

- 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
		变量名					真实类型						作用
	* pageContext				PageContext					当前页面共享数据,还可以获取其他八个内置对象
	* request					HttpServletRequest			一次请求访问的多个资源(转发)
	* session					HttpSession					一次会话的多个请求间
	* application				ServletContext				所有用户间共享数据,一个项目下的所有的servlet
	* response					HttpServletResponse			响应对象
	* page						Object						当前页面(Servlet)的对象  this
	* out						JspWriter					输出对象,数据输出到页面上
	* config					ServletConfig				Servlet的配置对象
	* exception					Throwable					异常对象

4 个作用域的区别

  • pageContext 这个作用域中存储的数据只在当前页面有效

  • request 在一次请求中有效,比如说客户端将表单数据发送给servlet这是一次请求。或者说AServlet转发到BServlet这也是一次请求

  • session:在多次请求中有效。用于区分用户。

  • application 表示servletContext对象,可以被所有的servlet共享,可以被所有当用户所共享

MVC概念

  • M model javabean
  • V view jsp
  • C controller servlet

EL 表达式

起源

  • js对象获取属性的两种方式

格式

  • ${obj==null} 等价于 ${empty obj}
  • o b j ! = n u l l 等 价 于 {obj!=null}等价于 obj!=null{not empty obj}
  • 判断含有长度属性的对象(string,array,集合)时不仅仅判断是否为空,还会判断长度是否为0

概念

  • Expression Language 表达式语言,可以放表达式,也可以放域中对应的名称
  • 所有EL都是以${为起始、以}为结尾的。
  • EL 提供 . 和 [ ] 两种运算符来导航数据,. 和 [ ] 也可以同时混合使用
  • 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ]
  • EL 变量
    EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

EL四大域对象的优点

  1. 为了提高查找速度默认获取对象写法是 n a m e , 先 从 p a g e S c o p e 作 用 域 找 , 找 不 到 从 r e q u e s t S c o p e 作 用 域 找 , 再 找 不 到 从 s e s s i o n S c o p e 中 找 , 最 后 从 a p p l i c a t i o n S c o p e 找 。 为 了 加 快 查 找 速 度 可 以 直 接 指 定 从 哪 找 {name},先从pageScope作用域找,找不到从requestScope作用域找,再找不到从sessionScope中找,最后从applicationScope找。为了加快查找速度可以直接指定从哪找 namepageScope,requestScope,sessionScopeapplicationScope{sessionScope.name}。
  2. 避免重名问题 比如说request和session作用域中都有name,但是想要使用session作用域中的name,就必须加sessionScope
  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

EL获取域对象中数据的格式

  • 存在域对象的变量是简单类型 ${name}
  • 使用EL获取对象的属性的语法 p e r s o n . n a m e 或 者 {person.name}或者 person.name{person[“name”]},本质上会调用getter方法
  • 使用EL获取数组,集合中的数据 ${arr[索引]} ${map[“key”]}

pageContext的作用

  • 1.作为域对象
  • 2.获取其他8个JSP内置对象,获取虚拟路径${pageContext.request.contextPath}

EL表达式中四个域对象与JSP四个内置域对象的关系

  • EL pageScope, requestScope,sessioScope, applicationScope
  • JSP pageContext ,request,session ,application
  • EL的域对象只能根据属性,获取对应的值(获取)
  • JSP的域对象是共享数据的,添加,删除,获取数据
  • requset,responsee还能获取头信息
  • 总结:EL表达式的语法和JS一致,想要获取数据要么使用.要么使用[],如果在不同的作用域中出现了同名的变量,需要前面加XXScope

JSTL标签库

概念

  • JavaServer Pages Tag Library,Apache组织提供的开源的jsp标签
  • 作用是简化jsp上的java代码
  • 使用步骤:
    1. 导入jstl相关jar包
    2. 引入标签库:taglib指令: <%@ taglib %>
    3. 使用标签

if

  • 格式<c:if test="${ 条件}"> 条件成立执行 </c:if> 条件一般是跟域中的值有关系
<%
     pageContext.setAttribute("age",30);
 %>
  <c:if test="${age>=30}">
      <span style="color: greenyellow">你真好看</span>
  </c:if>

choose

  • 格式: 相当于switch 语句 otherwise=default
  • <c:choose>
    <c:when test="${}">执行语句</c:when>
    <c:otherwise>执行语句</c:otherwise>
    </c:choose>
<%
   request.setAttribute("number",3);
%>

<c:choose>
    <c:when test="${number==1}"><span style="color: indianred">1</span></c:when>
    <c:when test="${number==2}"><span style="color: indianred">2</span></c:when>
    <c:when test="${number==3}"><span style="color: indianred">3</span></c:when>
    <c:when test="${number==4}"><span style="color: indianred">4</span></c:when>
    <c:when test="${number==5}"><span style="color: indianred">5</span></c:when>
    <c:otherwise>你的输入有误</c:otherwise>
</c:choose>

foreach

  • 格式 items相当于容器(数组,集合变量名称),var 取出来的元素变量名称,status表示状态,后面的名字可以随意起,有两个属性index索引,count 遍历的轮次
  • <c:forEach items="${listt}" var=“xx” varStatus=“s”>
    ${xx} ${s.index} ${s.count}
    </c:forEach>
<%
     ArrayList<String> list = new ArrayList<>();
     Collections.addAll(list,"孙悟空","bajie","shaseng","tangshen");
     pageContext.setAttribute("listt",list);
 %>
 <c:forEach items="${listt}" var="xx" varStatus="s">
      ${xx} ${s.index} ${s.count}
  </c:forEach>

三层架构

  • controller/web: 就是servlet
  1. 获取并且封装表单数据
  2. 负责页面的跳转
  3. 调用service层,将表单的数据传递过去
  • service
  1. 编写纯粹的业务逻辑,不需要考虑如何获取表单数据,也不需要考虑如何操作数据库
  • dao:
  1. 数据库的增删改查

书写步骤

  1. 在dao包中定义UserDao接口在接口中定义功能
  2. 编写UserDao的实现类
  3. 在service包中UserService
  4. 编写UserService的实现类
  5. 编写Servlet,调用service
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值