html元素
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>html元素</title>
<link rel="stylesheet" type="text/css" href="./css/demo.css" />
<script src="./js/demo.js"></script>
</head>
<body>
</body>
</html>
脚本元素
声明(declaration)
<%! 代码内容 %>
//<% !%>中可以声明方法、属性、全局变量
<%!
//JSP声明片段: 注意,不建议在JSP页面上定义变量或方法,只是不建议定义
int i = 10;
String name = "Vis.Yang";
public void printName(){
System.out.println(name);
}
%>
//注释:符合Java注释
表达式(expression)
<%= 表达式 %>
//调用已声明/定义的方法或显示已经声明/定义的参数(变量)值
Current time: <%= new java.util.Date() %>
//后面不能加分号
脚本(Scriplets)
<% 程序代码,一行或多行 %>
// <% %>中可以定义局部变量或者调用方法,但不能定义方法。
<%
for (int i=0;i<10,i++) {
...
...
}
%>
//example
<%if(percent < 0.5) { %>
<jsp:forward page="forward.html"/>
<%
}else {
%>
<jsp:forward page="forward.jsp"/>
<% } %>
// 多个括号{}需注意用<% %>包起来,否则不生效
指令元素
<%@ 指令名 属性="value" %>
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %
<-- 指定错误页面路径 -->
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="error.jsp" %
<-- 将当前页面设置为错误处理页面 -->
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %
<-- 前缀 prefix="mytag" 自定义标签的路径 uri="/WEB-INF/helloSimpleTag.tld"-->
<%@ taglib prefix="mytag" uri="/WEB-INF/helloSimpleTag.tld"%>
<-- 使用方法 -->
<mytag:helloworld />
<-- 标签重用 -->
注意
常用指令
page指令
属性 | 描述 |
---|---|
language | 在编写Jsp页面时要用的脚本语言,默认为Java |
pageEncoding | 指定Jsp页面的字符编码,默认是ISO-8859-1 常用 pageEncoding=“UTF-8” |
contentType | 响应的MIME类型,客户端浏览器根据该属性判断文档类型,值默认为 “text/html” |
import | 用来在Jsp页面引入系统或自定义包或类 可以多次使用 或者 逗号隔开包 |
session | 用来设置Jsp页面会话对象的可用性,默认为true |
errorPage | 指定一个错误页面,设置值为错误页面的Url |
isErrorPage | 指定是否将当前页面作为Jsp错误页面,默认为false |
include指令
<-- body标签内嵌入指定页面 date.jsp --> <-- 页面插入 作用:提取公共页面/内容 -->
<%@ include file="date.jsp" %>
动作元素
<jsp:include page="date.jsp"> <-- 结果插入 -->
<jsp:param name="Vis.Yang" age="3"/> <-- 带参 -->
</jsp:include>
<jsp:include page="date.jsp"/> <-- 不带参 -->
<jsp:include page="demo.html" flush="true"/>
<--
将结果引入
-->
<jsp:forward page="forward.jsp"/> <-- 不带参 -->
<jsp:forward page="forward.jsp"> <-- page="forward.jsp":需要转向的页面 -->
<jsp:param name="Vis.Yang" age="3"/> <-- 带参 -->
</jsp:forward>
<--
将客户端当前请求,转发到其他的Web资源(去处理请求)
可以是HTML页面、JSP页面、Servlet等
地址栏不变,内容是新页面的内容
-->
Tip: 元素之间不交叉
JavaBean
<-- 创建了一个类名为Student的stu1对象 -->
<jsp:useBean id="stu1" class="com.my.bean.Student" scope="作用范围"></jsp:useBean>
<jsp:useBean id="stu2" class="com.my.bean.Student" scope="作用范围"></jsp:useBean>
<-- scope="作用范围" page request session application -->
<-- page:当前页面有效 request:一次请求有效 session:浏览器未关闭就持续有效 application:服务器在则一直在 -->
<-- 等价于 -->
<%
Student stu1=new Student();
Student stu2=new Student();
%>
<-- 获得属性并显示到jsp中 -->
<jsp:getProperty name="stu1" property="name"></jsp:getProperty>
<jsp:getProperty name="stu2" property="name"></jsp:getProperty>
<-- 等价于 -->
<%=stu1.name()%>
<%=stu2.name()%>
<-- 设置属性-->
<jsp:setProperty name="stu1" property="name" value="Vis.Yang"></jsp:setProperty>
<-- 等价于 -->
<%
stu1.setName("Vis.Yang");
%>
<-- 自动加载表单所有类型值到对象里 property="*" -->
<jsp:setProperty name="stu1" property="*"></jsp:setProperty>
<-- 前提:表单名与bean属性名完全一致 -->
<input type="text" name="name" />
<input type="password" name="pwd" />
<-- 只自动加载 name属性值 property="name" -->
<jsp:setProperty name="stu1" property="name"></jsp:setProperty>
Jsp内置对象
内置对象 | 功能 | 范围 |
---|---|---|
request | 触发服务调用的请求 | request |
response | 对请求的应答 | page |
session | 为请求的客户创建的session对象 | page |
application | getServletConfig.getContext | session |
out | 向输出流写入内容的对象 | application |
exception | 异常处理信息 | page |
pagecontext | 本JSP的页面上下文 | page |
page | 实现处理本页当前请求的类的实例,如同Java中this | page |
config | 本JSP的ServletConfig配置信息,web.xml指定 | page |
request
//常用方法
String getParameter(String name) //返回name指定参数的参数值
String[] getParameterValues(String name) //返回包含参数name的所有值的数组
response
<%
response.sendRedirect('sucess.jsp'); //重定向 转到其他页面,浏览器地址改变,区别于 jsp:forward
response.addCookie(); //加cookie
response.getWriter().println(""); //等于 out.println('');
%>
out
<%
//简单打印输出到浏览器页面
out.print('');
out.println('');
%>
exception
//声明
<%!
System.out.println(exception.getMessage()); //输出到IDE的console
%>
//脚本
<%
//输出异常
out.print(exception.getMessage());//输出到页面
//页面换行
out.println("<br>")
System.out.println(exception.getMessage());//输出到IDE的console
%>
//表达式
<%=exception.getMessage()%> //输出到页面
session
String getId(); //获取session创建时JSP引擎为它设置的唯一ID
boolean isNew(); //判断是否是一个新的session
//在不同页面传参数
void setAttribute(String name,Object obj);//设置参数
Object getAttribute(String name) //取参数
void removeAtribute(String name) //删参数
Enumeration getAttributeNames() //返回session对象存储的每一个属性对象,其结果为枚举类型。多个参数
void invalidate();取消session对象,并将对象存放的内容完全删除
void setMaxInactiveInterval()设定最大session不活动的时间,若为负值,则永远不超时。
int getMaxInactiveInterval()获取最大session不活动的时间
long getCreationTime()//获取session的创建时间
long getLastAccessedTime()获取session对象最后一次被操作的时间
application
void setAttribute(String name, Object object); //设置属性,指定属性名称和属性值。
String getAttribute(String name); //根据属性名称获取属性值。
Enumeration getAttributeNames(); //获取所有的属性名称。
void removeAttribute(String name); //根据属性名称删除对应的属性。
String getServletInfo(); //获取当前Web服务器的版本信息。
String getInitParameter(String name); //根据初始化参数名称,获取初始化参数值。
int getMajorVersion(); //获取Servlet API的主版本号。
int getMinorVersion(); //获取Servlet API的次版本号。
void log(String message)//将信息写入日志文件中。
两者区别
Example
//网站访问次数统计
<%>
//第一次访问数据为空
Object obj=session.getAttribute("count");
//用户第一次访问
if(obj==null){
session.setAttribute("count",1);
}else{
Integer num=(Integer)obj;
session.setAttribute("count",++num);
}
}
<%>
第几次访问这个网站:<%=session.getAttribute("count")%>
application 统计更推荐
<--用不同浏览器访问时,计数器不会连续累计-->
<%>
//第一次访问数据为空
Object obj=application.getAttribute("count");
//用户第一次访问
if(obj==null){
application.setAttribute("count",1);
}else{
Integer num=(Integer)obj;
application.setAttribute("count",++num);
}
}
<%>
第几次访问这个网站:<%=application.getAttribute("count")%>
exception
//常用方法
exception.getMessage();
exception.toString();
<%=exception.toString()%> //显示异常
//使用前需要将当前页设置为错误处理页面 isErrorPage="true"
<-- 将当前页面设置为错误处理页面 -->
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %
request response session application 共享数据
out 输出数据到浏览器页面
exception 处理异常
${pageContext.request.contextPath} 获取web资源路径
游动查询
ResultSet.TYPE_FORWARD_ONLY //只可以向前滚动
ResultSet.TYPE_SCROLL_INSENSITIVE //双向滚动,但不及时更新,即使数据库的数据修改过,并不在ResultSet中反应出来
ResultSet.TYPE_SCROLL_SENSITIVE //双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据
ResultSet.CONCUR_READ_ONLY //缺省,或者显示声明,指定不可以更新ResultSet
ResultSet.CONCUR_UPDATABLE //指定可以更新ResultSet
// Statement statement=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );
常用方法
void last();//定位到最后一行
int getRow();//获得当前行