JSP
指令标记,动作标记和自定义标记
指令标记
page标记
<%@page contentType="text/java;charset=UTF-8"%>
contentType:设置MIME类型和字符编码
import:导入类
pageencoding:定义jsp的编码格式
include标记
<%@include file="1.jsp"%>
导入整个页面
动作标记
include标记
<jsp:include page="">
<jsp:param value="" name=""></jsp:param>
</jsp:include>
通过jsp:include可以导入页面(通过动态标签的方式)
在标签对里面使用jsp:param可以在导入页面的时候传参
forward标记
执行页面跳转——转发
page属性指定转发的页面
<jsp:forward page=""></jsp:forward>
通过forward标签可以转发到指定页面
注:forword转发后导航栏网址不变,其目标是简化问题的解决
JSP内置对象
概念:在JSP页面的java程序片和java表达式中可以直接使用的局部变量
- request
<%
request.setCharacterEncoding("utf-8");//设置编码格式
String s = request.getParameter("");//接受单个参数值
String[] ss = request.getParameterValues("");//接受多个参数值
request.setAttribute("属性名","属性值");
request.getRequestDispatcher("show.jsp").forward(request,response);//另一种转发方法
%>
- response
<%
response.sendRedirect(url);//重定向
response.setHeader("refresh","1;url=");//刷新
%>
注:区别于转发和重定向,转发是服务端操作,浏览器地址不改变,重定向是浏览器操作,浏览器地址栏改变
- out
response.getWriter获取的对象
out.print显示结果
- session
- public void setAttribute(String key,Object value)
- public Object getAttribute(String Key)
- public void removeAttribute(String key)
从打开浏览器开始到关闭浏览器结束
实质上是请求中的方法 request.getSession()
session不同于请求和响应,不会随着请求响应的变化而关闭
- application
以服务器开始为开始,以服务器结束为结束
application的方法和session基本相同
- page、pageContext、config、exception
page对象以页面为存活时间,无论是转发,重定向都会消失
page对象是当前JSP页面转译生成的java文件所创建的对象
pageContext对象可以获取当前页面的访问对象及相关页面信息
setAttribute方法
getAttribute方法
findAttribute()方法
javabean
javaBean也分为三大类,分别是成员类、工具类、判别类
三个基本动作标记
- <jsp:useBean>
- <jsp:getProperty>
- <jsp:setProperty>
使用useBean标签寻找/创建对象
<jsp:useBean id="对象名" class="类全名(包括包名)" scope="page/request/session/application">
useBean的运行步骤
-
最开始先从scope(内置对象)中寻找相应存在attribute中的id(对象名)
这一步用了getAttribute的方法
-
如果没有,就向外层寻找,比如scope写的是request,当request中没有时,向Session或application中寻找
这一步用了findAttribute方法
-
如果找到在1,2的步骤中找到,则标签返回此对象
-
如果都没找到,则在scope中的Attribute中根据class(类)实例化此对象
使用访问器
<jsp:getProperty name="对象名" property="成员变量名">
使用此访问器可直接访问对象中某一成员变量,返回值是该成员变量。
此访问器除直接访问变量之外,还可以访问以get/is开头的方法,直接返回其方法的返回值
使用修改器
<jsp:setProperty name="对象名" property="*">
使用此修改器能直接修改对象中成员变量的属性
需注意,Property取值为*,必须保证传参时变量名称一致
由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。
<jsp:setProperty name="对象名" property="成员变量名" param="赋值来源参数名">
使用此修改器能直接修改对象中成员变量的属性
同方式一,也会把param传来的参数自动转化成成员变量的类型
<jsp:setProperty name="对象名" property="成员变量名" value="变量或表达式">
使用此修改器能直接修改对象中成员变量的属性
同方式一,也会把value中的值(表达式或字符串)自动转化成成员变量的类型
Servlet
继承于HttpServlet类的一个子类
Jsp相当于把java程序片卸载网页中,Servlet相当于把网页写在;Java类中
常用方法
public void init(ServletConfig config)
public void doGet/doPost(HttpServletRequest request,HttpServletResponse response)
publie void destroy()
步骤
-
创建Servlet类
-
在web.xml文件中注册Servlet对象,格式:
<web-app> …… <servlet> <servlet-name>Servlet对象名</servlet-name> <servlet-class>Servlet类全名</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet对象名</servlet-name> <url-pattern>/格式</url-pattern> </servlet-mapping> </web-app>
-
或者在创建Servlet时利用@WebServlet完成配置Servlet:格式
@WebServlet("/格式") public class XxxServlet extends HttpServlet{ }
-
亦或者多配置一些信息(对象名,多个格式,或者是带一些默认值)
@WebServlet(name="对象名字", urlPatterns={ "/格式1", "/格式2" } initParams={ @WebInitParam(name="param",value="123"), …… } ……)
内置对象的一些特殊的定义方法
因为request和response是形参,可以直接使用。但是其他的内置对象需要单独定义
out:
PrintWriter out = resp.getWriter();
session:
HttpSession session = req.getSession();//非严格形式
//严格形式
HttpSession session = req.getSession(false);//使用已有的Session
if(session == null){
session = req.getSession(true);//当没有Session时,创建新的Session
}
application:
ServletContext application = this.getServletContext();
EL
Expression Language(表达式语言)
EL的底层操作就是调用内置对象方法
表达式的构成
-
隐式对象
param、paramValues、initParam
jsp内置对象 EL隐式对象 request.getParameter("a") ${param.a} request.getAttribute("a") ${requestScope.a} session.getAttribute("a") ${SessionScope.a} pageConpage.findAttribute("a") ${a} 获取a中的属性value ${sessionScope.a.value}
scope中文释义:范围
-
常量:boolean、整数、浮点数、字符串和null
-
运算符:算术运算符、关系运算符、逻辑运算符、空
JSTL
JSP Standard Tap Liberary(JSP标准标记库)
引入格式
<%@taglib uri="路径及其类型" prefix="前缀"%>
标记库类型
- 核心标记库(core)——c
- 数据库访问标记库(sql)——sql
- XML标记库(xml)——x
- 国际化标记库(fmt)——fmt
- 函数标记库(functions)——fn
核心标记库
forEach
<c:forEach iterms="遍历源" var="元素" varStatus="指定遍历状态" begin="开始的索引值" end="结束的索引值" step="步长(默认值1)">
循环体
</c:forEach>
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
我们一般用<c:forEach> 来遍历需要的数据,为了方便使用,varStatus属性可以方便我们实现一些与行数相关的功能,如:奇数行、偶数行差异;最后一行特殊处理等等。
varStatus 是循环索引。先就varStatus属性常用参数总结下:
属性值 | 功能 |
---|---|
${status.index} | 输出行号,从0开始。 |
${status.count} | 输出行号,从1开始。 |
${status.current} | 当前这次迭代的(集合中的)项 |
${status.first} | 判断当前项是否为集合中的第一项,返回值为true或false |
${status.last} | 判断当前项是否为集合中的最后一项,返回值为true或false |
if
<c:if test="判断条件">
执行体
</c:if>
if用于单分支判断
choose、when和otherwise
<c:choose>
<c:when test="判断条件">
执行体
</c:when>
……
<c:otherwise>最后一种操作</c:otherwise>
</c:choose>
choose、when和otherwise用于多分支判断
具体使用时可与if elseif else 与switch类比
set
<c:set var ="变量名" value="值" scope="变量储存的范围"/>
新建变量
<c:set target="Bean对象名" property="成员变量名" value="值" scope="成员变量的储存位置"/>
为对象成员变量赋值
url
<c:url var="存储url地址对象名" value="被重写的url" context="站点名" scope="变量储存范围"/>
该标签用于生成一个 URL 路径的字符串,该符串可用于 标记实现 URL 的链接,或者用于网页转发和重定向等
<c:url var="path" value="../login.jsp" scope="page"/>
<a href="${pageScope.path}">登录页面</a>
redirect
<c:redirect url="重定向地址" context="站点名"/>
重定向
注:例如url和redirect标记均可写成双标记形式,在中加入c:param标记传参
数据库访问标记库
setDataSource
<sql:dataSource diver="驱动串"
url="连接串"
user="用户名"
password="密码"
var="存储链接的变量"
scope="存储对象的作用范围"/>
建立与数据库的连接源
query
<sql:query var="存储查询结果的变量"
sql="sql语句"
dataSource="数据源"
startRow="起始行"
maxRows="显示的最大行数"
scope="存储对象的作用范围"/>
注:需使用查询结果变量的rows方法返回查询结果集
可使用c:foreach标签遍历结果集