本帖最后由 小石姐姐 于 2019-1-4 09:13 编辑
JSPJSP入门概念 可以理解为:一个特殊的页面,既可以定义HTML标签,又可以写java代码原理 !!!!JSP本质就是一个Servlet 1.服务器解析请求消息,找是否有index.jsp资源 2.如果找到了,会将jsp转化为一个.java文件 3.编译为.class文件并执行
JSP脚本 定义的Java代码,在jsp转换后在service方法中.定义的Java代码,在jsp转换后的java类的成员位置
例:
<%! i = 3 %>定义的Java代码,会输出到页面上.
例:
<%= i %>
JSP指令
<%@ 指令名称 属性名1=属性值 %>- 1).contentType:等同于response.setContentType
*设置响应头的MIME及字符集
*设置当前的jsp页面的编码(只能是高级的IDE才能生效,如果是低级的工具,则需要设置pageEncoding属性)
- 2).language="java"
- 3).buffer 缓冲区的大小
- 4).import 导包(最好一个包一行)
- 5).erroPage:当页面发生异常后,会自动跳转到指定的错误页面
- 6).isErroPage:标识当前的页面是否是错误页面,如果当前页面的isErroPage是true则可以
true:可以使用内置对象exception,用来获取错误日志
false:默认值,不可以使用内置对象exception
例:
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=utf-8" errorPage="500.jsp" isErroPage="false" pageEncoding="utf-8" language="java" %><%@include file="top.jsp" %>- 1).prefix:前缀
- 2).url::统一资源定位符
<%@taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
JSP注释
<!-- 内容 --><%-- 内容 --%>
JSP内置对象
在jsp页面中不需要创建,直接使用的对象,一共有9个 [td]变量名 | 真实类型 | 作用 | <center>pageContext | <center>PageContext | 当前页面数据共享,还可以获取其他8个对象 | <center>session | <center>HttpSession | 一次会话的多个请求间共享数据 | <center>application | <center>ServletContext | 所有用户间共享数据 | <center>request | <center>HttpServletRequest | 一次请求访问的多个资源(转发) | <center>response | <center>HttpServletResponse | 响应对象 | <center>page | <center>Object | 当前页面(Servlet)的对象 相当于this | <center>out | <center>JspWriter | 输出对象,数据输出到页面上 | <center>config | <center>ServletConfig | Servlet配置对象 | <center>exception | <center>Throwable</center> | 异常对象 |
out和response.getWriter()的区别
1)out.write()定义在哪里就会在哪里输出
2)response.getWriter().write()总会在out.print()之前输出
!!!tomcat在输出的时候会先找response的缓冲区,再去找out的缓冲区数据,建议在jsp中不要用response.getWriter().write()
MVC开发思想MVC详解
完成具体的业务操作,如:查询数据库,封装对象展示数据1).获取用户的输入
2).调用模型
3).将数据交给视图来进行展示MVC的优缺点1).耦合性低,方便维护,可以利于分工协作
2).重用性高
EL表达式
jsp默认支持EL表达式
EL表达式的忽略方法
1).忽略单个EL表达式\${}
2).设置jsp中page指令:isELIgnored="true"1).算数运算符
+ - * /(div) %(mod)
${3 / 4} 等同于 ${3 div 4}
${4 % 3} 等同于 ${4 mod 4}
2).比较运算符
3).逻辑云算符
&&(and) ||(or) !(not)
4).空运算符 empty
用于判断字符串、集合、数组对象是否为null并且长度是否为0
${empty list}
${not empty str}1).EL表达式只能从域对象中获取值
2).语法
* ${域名称.键名}:从制定域中获取制定键的值
**域名称
pageScope --> pageContext
requestScope --> request
sessionScope --> session
applicationScope --> application(ServletContext)
如果获取不到值,则$返回空字符串(注意不是null)
* ii ${键名}(常用):表示依次从最小域中查找是否有该键对应的值,直到找到为止==获取值的类型== [td]值的类型 | 获取表达式 | <center>基本类型 | <center>${键} | <center>对象 | <center>${键.属性} | <center>数组 | <center>${键[index]} | <center>List | <center>${键[index]} | <center>Map | <center>${键.map键} |
注意:
1.如果索引越界,则显示一个空字符串
2.真正开发中EL表达式配合JSTL使用来获取集合,因为不知道list的长度
3.对象.属性!这里不是变量而是属性!!隐式对象 11个隐式对象 ==pageContext==
获取jsp其他八个内置对象
${pageContext.request}
例:动态获取虚拟目录
${pageContext.request.contextPath}
JSTL概念
是由Apache组织提供的开源的免费的jsp标签作用:用于简化和替换jsp页面上的java代码 使用步骤
1.导入jar包
2.引入标签库:<%@taglib %>
3.使用标签
常用的JSTL标签
1).c:if属性:
*test: 必须属性,接收boolean表达式,如果为true,则显示if标签体的内容,否则不显示内容;一般情况下test的属性值会结合EL表达式一起使用
2).c:if标签没有else情况,想要else情况,需要再写一个c:if标签
例:
<c:if test="${number %2 !=0}">
内容
</c:if>choose标签 相当于java代码的switch语句
1).使用chose标签作为 switch
2).使用when标签做判断作为case
3).使用otherwise标签作为default
例:
<c:choose>
<c:when test="${number == 1}>星期1</c:when>
<c:when test="${number == 2}>星期2</c:when>
<c:when test="${number == 3}>星期3</c:when>
<c:when test="${number == 4}>星期4</c:when>
<c:when test="${number == 5}>星期5</c:when>
<c:when test="${number == 6}>星期6</c:when>
<c:when test="${number == 7}>星期7</c:when>
<c:otherwise>输入有误</c:otherwise>
</c:choose>==foreach标签== 相当于java代码的for循环
1).完成重复操作
*属性
began:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
2).遍历容器
*属性
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
例:遍历list集合List<User> list
<%
List list= new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list)
%>
<c:foreach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}
</c:foreach>
|