jsp笔记及分页基础

JSP:java服务器页面(Java Server Page):JSP的本质就是Servlet


    特点:
可以在JSP页面中写java代码和HTML代码,与Servlet一样可以提供一个生成动态页面的技术
在JSP中写页面jsp代码就像是写HTML代码,jsp在HTML中嵌套了Java代码
        JSP与Servlet的相比:
   ・Servlet可以写HTML代码,显示数据,但是排版比较困难,
     而JSP也可以提供给用户提供动态的数据,并且对数据进行排版比较方便。
JSP与HTML相比
   ・HTML只能为用户提供静态的数据,而JSP可以嵌套Java代码,所以可以为用户提供动态的数据


JSP的实现原理:
    ・客户端请求 -> 服务器判断请求的是HTML页面还是JSP页面 -> (是HTML页面就直接跳转到HTML页面)
      如果是JSP页面就会生成Servlet的java文件,
      然后进行编译为class文件 -> 将java代码转化为浏览器能够直接识别的HTML格式的JSP文件


JSP的组成元素:
    1.注释元素
・客户端可见:
<!-- 注释内容 -->
<!-- 注释内容<%=表达式 %> -->


・客户端不可见:
<%-- 程序员专用注释 --%>
<% //单行注释 %>
<% /*多行注释*/ %>


    2.模板元素:
JSP页面中的HTML代码
通过HTML代码可以定义界面的结构,骨架


    3.脚本元素(核心元素)
・代码块:以<%开始,以%>结束


・表达式:以<%=开始,以%>结束
 =后跟着的是符合Java语法的表达式或者是变量或常亮


・声明:以<%!开始,以%>结束
・使用声明元素可以声明变量和方法等,但是声明的变量是全局变量
・该方法声明的变量是全局变量,当多个用户同时访问该页面的时候,该全局变量都会被这些用户共享


    4.指令元素:
page指令:<%@ page=... %>


include指令:将其他页面(jsp,html等),包含到当前页面中,注意不能包含Servlet
<%@ include file="包含页面" %>


taglib指令:<%@ taglib prefilx="标签库的前缀或昵称" url="标签库的路径" %>


     5.动作元素:
1.包含标签:
<%@ include file="包含页面" %>:静态包含(在jsp编译的时候就会将top.jsp页面中的HTML全部编译到当前的jsp页面中)


<jsp:include page="包含页面(html,jspp等)的地址或者是动态地址" ></jsp:include>:动态包含(在执行到该语句的时候才会将top.jsp中的代码打印到当前页面中)


2.转发标签:
<jsp:forward page="Servlet地址"></jsp:forward>:page属性中可以接受jsp,html,Servlet的地址


3.参数标签:(一般是与前两个标签一起使用)
例:<jsp:include page="top.jsp">
<jsp:param value="1" name="flag"/>
   </jsp:include>


    将html页面转化为jsp页面
1.创建对应的jsp页面
2.将对应的html页面中的HTML代码拷贝到对应jsp页面中
3.在home.jsp和member.jsp页面中将top.jsp包含进去


JSP九大内置对象:
    out:打印
    page:表示的是当前的页面,可以保存数据的作用域,类型:Object
    request:请求  1
    response:响应
    session:会话  2
    application:应用程序  3
    config:封装了一些配置信息
    exception:当页面发生异常,就会生成这个而对象
    pageContext:九大内置对象的顶层对象,可以通过该对象获取其他的8个对象


EL表达式
    概念:
EL表达式不是一个编程语言,是一个用简单符号表示一个复杂行为的
主要作用是获取作用域中的额数据,并对其进行简单的操作


    语法:
      !语法格式:以$开始,用大括号{}将EL表达式内容包含起来
${requestScope.msg }:查询request中的数据
${sessionScope.msg }:查询session中的数据
${applicationScope.msg }:查询application中的数据
${msg }:查询pageContext中的数据(pageContext.findAttribute("msg"))


    EL表达式的组成部分:
标识符:用来标识存储在作用域中的数据对象。EL有11个表刘标识符,对应于11个EL隐式对象


存取器:“.”和“[]”存取器
${user.username}和${user["username"]}
   区别:
.只能静态获取相关的数据,也就是.货吗跟着的只能是具体的参数名称,不能是变量
[]获取数据,则中括号中的数据key值可以是变量,也就是可以动态的获取数据
注意:是变量的话就会根据变量名找值对应的数据


文字:文字表示固定的值:数字、字符、字符串、布尔型或空值


运算符:not empty(判断是否不为空,返回布尔值)


JSTL:(JSP标准标签库)
    1.在工程中导入相关的jar包


    2.在要使用jstl的jsp页面中导入相关库(core)
使用taglib指令导入jstl中的核心库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
   prefix:前缀或昵称一般随便命名,建议使用标签库的缩写c
   uri:标签库的地址,要导入带有jsp路径的地址


    3.
1.声明变量
<c:set var="a" value="10"></c:set>
var:用于声明变量制定变量的名称
value:用于给变量赋值
scope:制定变量保存的地址(作用域),默认保存page中


 输出变量
<c:out value="${a }"></c:out>
value:输出变量的数据(可以接受EL表达式,也可以是常量)


2.判断语句
<c:if test="${a<18 }">内容</c:if>
test:属性表示判断的条件


3.循环语句(必须要用程序员专用注释)
<c:forEach var="i" begin="1" end="10" step="1">内容</c:forEach>
var:声明一个变量,指定变量的名称
begin:指定循环的开始下标
end:指定循环的结束下标
step:每次循环变量的递增 步长


4.增强型循环
<c:forEach var="user" items="${list }">
${user.getName() }----${user.getPwd() }<br/>
</c:forEach>
var:声明变量 并指定变量的名称
items:要循环的集合


指定
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
//    http://localhost:8888/hdshop/
String basePath = request.getScheme()+"://"+request.getServerName()
+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- 指定当前页面的根路径 -->
<base href="<%=basePath %>" />




分页查询:
// 1.初始化数据
List<UserBean> list = new ArrayList<>();
for (int i = 0; i <= 100; i++) {
list.add(new UserBean(i, "木婉清" + i, 10 + i));
}


// 2.初始化已知条件
//int currentPage = 8; // 当前页面
int pageSize = 10; // 每页显示的数据

// 从客户端获取当前页面currentPage的值
int currentPage = parseInt(request.getParameter("currentPage"), 1);


// 3.计算
int startIndex = (currentPage - 1) * pageSize; // 开始下标
int endIndex = currentPage * pageSize; // 结束下标
int totalCount = list.size(); // 总记录数
//解决最后一页数据显示不全,填不满最后一页,出现数组越界问题
endIndex = endIndex>totalCount?totalCount:endIndex;
int pageCount = (totalCount-1)/pageSize+1;


// 4.截取分页后的数据
List<UserBean> result = list.subList(startIndex, endIndex);


// 5.将截取的数据保存到作用域中
request.setAttribute("list", result);
request.setAttribute("pageCount", pageCount);
request.setAttribute("currentPage", currentPage);


// 6.跳转页面
request.getRequestDispatcher("/fenye.jsp").forward(request, response);




<!-- 分页栏目的功能 -->
<script>
/* 首页 */
function firstPage(){
location.href = "FenYeServlet?currentPage=1";
}


/* 上一页 */
function backPage(){
location.href = "FenYeServlet?currentPage=${currentPage eq 1?1:currentPage-1 }";
}


/* 下一页 */
function nextPage(){
location.href = "FenYeServlet?currentPage=${currentPage eq pageCount?pageCount:currentPage+1 }";
}


/* 尾页 */
function lastPage(){
location.href = "FenYeServlet?currentPage=${pageCount }";
}
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值