(一)JSP
一.概述
- Java Server Page
- jsp:
- - 从用户角度:就是一个网页
- - 从程序员角度:其实就是一个java类,它继承了servlet,所以可以说jsp就是一个Servlet
二. 三大指令
<%@ 指令名字 %>
- page指令
- language
- - 表明jsp页面中可以写java代码 - contentType
- - 文件类型,告诉浏览器自己是什么内容类型,以及使用什么编码 - pageEncoding
- - jsp内容编码
- language
- include指令
<%@ include file="index.jsp" %>- 包含另外一个jsp的内容进来
- 把另外一个页面的所有内容拿过来一起输出,所有的标签元素都包含进来
- taglib指令
<%@ taglib prefix="" uri="" %>
uri:标签库路径
prefix:标签库的别名
三.动作标签(常用)
<jsp:include page=""></jsp:include>
<jsp:forward page=""></jsp:forward>
<jsp:param value="" name=""/>
- jsp:include
包含指定的页面,这里是动态包含.也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来. - jsp:forward
前往一个页面, 实际是通过请求转发 - jsp:param
在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数
<jsp:forward page="">
<jsp:param value="" name=""/>
</jsp:forward>
四.内置对象(九个)
内置对象:就是我们可以直接在jsp页面中使用这些对象,不用创建
pageContext request session application //四个作用域对象
- pageContext [pageContext] :作用域仅限于当前的页面 ,还可以获取其他八个内置对象
- request [HttpServletRequest]:作用域仅限于一次请求,只要服务器对该请求做出了响应,这个域中存的值就没有了
- session [HttpSession]:作用域限于一次会话(多次请求与响应)当中
- application [ServletContext]:整个工程都可以访问,服务器关闭后就不能访问了
out exception page config response
- out [JspWriter]
- response [HttpServletResponse]
- exception [Throwable]
- page [Object] ---就是这个jsp翻译成的java类的实例对象. this
- config [ServletConfig]
(二)EL表达式
为了简化jsp里面的java代码
一.写法格式
- ${ 表达式 }
<% pageContext.setAttribute("name" , "page"); %>
普通手段取值 <%= pageContext.getAttribute("name")%>
EL表达式取作用域中的值 ${ pageScope.name } - 如果域中所存的值是数组
<%
String[ ] a = {"aa","bb","cc"};
pageContext.setAttribute("array" , a);
%>
使用EL表达式取出作用域中数组的值
${array[0]},${array[1]},${array[2]} - 取值方式:
如果这份值是有下标的,那么直接使用[ ]
如果没有下标,直接使用 . 的方式去取 - 一般使用EL表达式,用的比较多的,就是从一个对象中取出它的属性值,比如取出某一个学生的姓名
二.EL表达式的内置对象(11个)
${ 对象名 , 成员 }
pageContext
pageScope requestScope sessionScope applicationScope //作用域相关对象
header headerValues //头信息相关对象
param paramValues //参数相关对象
cookie
initParam //全局初始化参数
(三)JSTL
一.概述
- JSTL(JSP Standard Tag Library, JSP标准标签库)
- 简化JSP的代码编写,替换<%%>写法, 一般与EL表达式配合
二.使用方法
- 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 在jsp页面上,使用taglib指令,来引入标签库
- 注意:如果想支持EL表达式,那么引入的标签库必须选择1.1的版本
三.常用标签
<c:set></c:set>
<c:if test=" "></c:if>
<c:forEach></c:forEach>
- c:set
声明一个对象name, 对象的值是me,存储在page(默认)
<c:set var="name" value="me" scope="page"></c:set>
${pageScope.name} - c:if
<c:set var="age" value="18" ></c:set>
<c:if test=" ${ age >18 } " var="flag" scope="session"> //满足条件,就会输出if中的语句
我是成年人...
</c:if>
${sessionScope.flag} - c:foreach
<c:forEach begin="1" end="10" var="i" step="2"> //从1开始遍历到10,得到的结果赋值给i,存储在page域中
${ i } //1 3 5 7 9 step是每次递增的值
</c:forEach>
------------------------------------------------------
<%
List list = new ArrayList();
list.add(new User("zhangsan",23));
pageContext.setAttribute("list",list);
%>
<c:forEach var="user" items=" ${list} " > //items:表示遍历的是哪个对象,这里必须写EL表达式
${user.name}--------${user.age} //var:遍历出来的的每一个元素用user去接收
</c:forEach>
四.学生信息管理系统
- 先写login.jsp 并且搭配一个LoginServlet去获取登录信息
- 创建用户表,里面只要有id,username,password
- 创建UserDao,定义登录的方法
- 创建UserDaoImpl, 实现定义的方法
- 在LoginServlet里面访问UserDao, 判断登陆的结果,
- 创建stu_list.jsp, 让登录成功的时候跳转过去
- 创建学生表,字段随意
- 创建学生的Dao ,StuDao
- 创建StuDaoImpl实现
- 登录成功时,查询所有学生,学生集合存在作用域中,跳转到stu_list.jsp
- 在stu_list.jsp中,取出域中的集合,然后使用c标签遍历集合 //c标签是jstl