1.JSP:动态网页(就是在html中嵌套java代码)
- 动态网页:随着 时间、地点、用户操作的改变而改变,使用到服务端脚本语言(JSP)
2.JSP页面元素:HTML、java代码(脚本Scriptlet)、指令、注释
页面脚本
1.
<%
局部变量、java语句(编译后:service方法中)
%>
2.
<%!
全局变量、定义方法(编译后:Servlet成员变量位置)
%>
3.
<%= 输出表达式 %>
指令
-
1.page指令
<%@ page contentType=“text/html;charset=UTF-8” language=“JSP页面使用的脚本语言” import=“导入类” %> -
2、taglib指令
作用:导入标签库
语法:<%@taglib uri="文件的uri名称" prefix="前缀(简写)"%>
-
3、include指令
作用:在当前页面用于包含其他页面
语法:<%@include file="common/header.jsp%>
注释
- html注释
- java注释// /**/
- jsp注释<%-- --%>
3.jsp执行流程:
- jsp ->java(Servlet文件) ->class
4.JSP九大内置对象:
内置对象:在jsp中,不需要创建,可以直接使用的对象
5.基于JSP页面的项目案例
Session+mysql+MVC实现验证码登录【JAVAEE】
6.分页SQL
通用的标准分页sql
每页显示pageSize条记录:(pageSize:每页显示多少条记录)
第pageNo页:(pageNo-1)*pageSize,pageSize
mysql:从0开始计数,limit 开始,多少条.
第0页:
select * from emp limit 0,10;
第1页:
select * from emp limit 10,10;
第n页
select * from emp limit n*10,10;
sqlserver/oracle : 从1开始计数,
order rownum伪列字段
select * from student where sno>=(n-1)10-1 and sno<=n10;//前提:id值必须是连续的
select rownum,t * from student t where rownum>=(n-1)10+1 and rownum<n10 oreder by sno;
//1.如果根据sno排序则rownum会混乱(解决方案:分开使用->先只排序,再只查询rownum)
//2.rownum不能查询>的数据
//改为
select from
(
select rownum r,t. from
(select s.* from student s order by sno asc) t
)
where r>=(n-1)10+1 and r<n10;
sqlServer row_number() over(字段)
6.简单jsp分页SQL案例
index.jsp
<%@ page import="java.util.List" %>
<%@ page import="com.entity.Student" %>
<%@ page import="com.entity.Page" %><%--
Created by IntelliJ IDEA.
User: Chef Liu
Date: 2020/5/19
Time: 20:11
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生信息列表</title>
</head>
<script type="text/javascript" src="js/jquery-2.2.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("tr:odd").css("background-color","lightgray");
})
</script>
<body>
<%
String error= (String) request.getAttribute("error");
if (error!=null){
if (error.equals("adderror")){
out.print("增加失败");
} else if (error.equals("noadderror")){
out.print("增加成功");
}
}
//null没有执行增加
%>
<h3 align='center'>学生列表</h3>
<hr width='60%'>
<table border='1' align='center' width='50%'>
<tr align="center">
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
<%
//从request中获取数据
Page pages= (Page) request.getAttribute("page");
List<Student> students= (List<Student>) pages.getStudents();
for (Student student:students){
%>
<tr align="center">
<td><a href="QueryStudentBySnoServlet?sno=<%=student.getNo()%>"><%=student.getNo()%></a></td>
<td><%=student.getName()%></td>
<td><%=student.getAge()%></td>
<td><a href="DeleteStudentServlet?sno=<%=student.getNo()%>">删除</a></td>
</tr>
<%
}
%>
<a href="add.jsp">新增</a><br>
<%
//优化
if (pages.getCurrentPage()==-0){//如果是首页
%>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getCurrentPage()+1%>">下一页</a><br>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getTotalPage()-1%>">尾页</a><br>
<%
}
else if (pages.getCurrentPage()==pages.getTotalPage()-1){//如果是尾页
%>
<a href="QueryStudentByPageServlet?currentPage=0">首页</a><br>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getCurrentPage()-1%>">上一页</a><br>
<%
}
else {//如果不是首页,也不是尾页
%>
<a href="QueryStudentByPageServlet?currentPage=0">首页</a><br>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getCurrentPage()-1%>">上一页</a><br>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getCurrentPage()+1%>">下一页</a><br>
<a href="QueryStudentByPageServlet?currentPage=<%=pages.getTotalPage()-1%>">尾页</a><br>
<%
}
%>
</table>
</body>
</html>
学生详细信息jsp
<%@ page import="com.entity.Student" %><%--
Created by IntelliJ IDEA.
User: Chef Liu
Date: 2020/5/20
Time: 16:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生详细信息</title>
</head>
<body>
<%
Student student= (Student) request.getAttribute("student");
%>
<!-- 通过表单展示此人 -->
<form action="UpdateStudentServlet" method="get">
学号:<input type="text" name="sno" value="<%=student.getNo()%>" readonly="readonly"><br>
姓名:<input type="text" name="sname" value="<%=student.getName()%>"><br>
年龄:<input type="text" name="sage" value="<%=student.getAge()%>"><br>
地址:<input type="text" name="saddress" value="<%=student.getAddress()%>"><br>
<input type="submit" value="修改">
<a href="QueryStudentByPageServlet">返回</a>
</form>
</body>
</html>
SQL后台代码暂未上传
7.EL: 表达式语言,可以替代JSP页面中的java代码
传统的 在JSP中用java显示数据的弊端:类型转换、需要处理null、代码参杂-->EL
- EL示例:
${requestScope.student.address.schoolAddress}<br>
${域对象.域对象中的属性.属性.级联属性}<br>
- EL操作符
点操作符 . -- 使用方便
中括号操作符 [""] -- 功能强大:可以包含特殊字符(. 、 -),获取变量值
获取map属性
Map<String,Object> map=new HashMap<>();
map.put("cn","中国");
map.put("us","美国");
request.setAttribute("map",map);
${requestScope.map.cn}
isEmpty运算符:判断一个值存在不存在。
- EL表达式的隐式对象(内置对象)
- 作用域访问对象
pageScope requestScope sessionScope sessionScope applicationScope
如果不指定域对象,则默认会根据从小到大的顺序,依次取值
- 参数访问对象:获取表单数据。
${param.xxx}
${paranValues.xxx[]}
- JSP隐式对象 : pageContext
${pageContext.xxx} 通过pageContext间接获取jsp的隐式对象。
8.JSTL:比EL更强大
1.引入两个jar包:jstl.jar standard.jar
2.引入taglib <%@ taglib uri="...core"> prefix="c" %>
。。。。。。。。。