对于页面访问数据的统计,可以使用内置对象的相应方法进行计数工作,这个对象要在jsp对象的整个生命周期中
setAttribute()和getAttribute()
application.setAttribute(key, value)
application.getAttribute(key)
application实现了用户之间的数据共享,用于存放全局变量。服务器的开启和关闭决定了application的生命周期,它是ServletContext实例。
pageContext对象提供了对jsp页面内所有的对象及命名空间的访问,可以访问本页的session,也可以访问本页的application对象的某一属性值,页面中所有功能的集大成者。
把这个代码放在每一个jsp页面中,每次访问就会触及
<%
Integer hitsCount =
(Integer)application.getAttribute("hitCounter");
if( hitsCount ==null || hitsCount == 0 ){
/* 第一次访问 */
out.println("欢迎访问!");
hitsCount = 1;
}else{
/* 返回访问值 */
out.println("欢迎再次访问!");
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);
%>
<p>页面访问量为: <%= hitsCount%></p>
JSP页面自动刷新:使用response对象的setIntHeader()方法
方法签名:public void setIntHeader(String header, int headerValue),这个方法通知浏览器在给定的时间后刷新,刷新的单位为s。
<h2>自动刷新实</h2>
<%
// 设置每隔5秒刷新一次
response.setIntHeader("Refresh", 5);
// 获取当前时间
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("当前时间为: " + CT + "\n");
%>
response.setIntHeader("Refresh", 5);
JSP发送一封邮件
<%@ page import="java.io.*,java.util.*,javax.mail.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%
String result;
// 收件人的电子邮件
String to = "abcd@gmail.com";
// 发件人的电子邮件
String from = "mcmohd@gmail.com";
// 假设你是从本地主机发送电子邮件
String host = "localhost";
// 获取系统属性对象
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("mail.smtp.host", host);
// 获取默认的Session对象。
Session mailSession = Session.getDefaultInstance(properties);
try{
// 创建一个默认的MimeMessage对象。
MimeMessage message = new MimeMessage(mailSession);
// 设置 From: 头部的header字段
message.setFrom(new InternetAddress(from));
// 设置 To: 头部的header字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// 设置 Subject: header字段
message.setSubject("This is the Subject Line!");
// 现在设置的实际消息
message.setText("This is actual message");
// 发送消息
Transport.send(message);
result = "Sent message successfully....";
}catch (MessagingException mex) {
mex.printStackTrace();
result = "Error: unable to send message....";
}
%>
<html>
<head>
<title>Send Email using JSP</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<p align="center">
<%
out.println("Result: " + result + "\n");
%>
</p>
</body>
</html>
MIME:Multipurpose Internet Mail Extends,多用途网络邮件扩展协议,描述消息内容类型的因特网标准
JSP标准标签库:JSTL,封装了jsp通用核心功能
核心标签
结构化标签
SQL标签
XML标签
JSTL函数
核心标签:最常用的JSTL标签
<c:out>:在jsp中显示数据,就像<%=>一样
<c:set>:保存据值
<c:remove>:删除数据
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<c:catch>:捕捉数据异常
<c:if>:判断语句
<c:choose>:本身只当作<c:when>和<c:otherwise>的父标签
<c:when>:子标签,判断条件是否成立
<c:otherwise>:<when>判断不成立的对立标签
<c:import>:检索一个绝对或者相对URL,暴露给网页
<c:forEach>:基础的迭代标签,可以迭代任意集合类型
<c:forTokens>:根据指定的分隔符分隔内容并迭代输出
<c:param>:用来给定的包含重定向的网页传递参数
<c:redirect>:网页重定向到一个URL
<c:url>:新建一个URL
格式化标签用来格式化输出文本、日期、时间、数字
<fmt:formatNumber>:用指定的格式格式化数字
<fmt:parseNumber>:解析数字
<fmt:formatDate>:格式化日期
<fmt:parseDate>:解析日期
<fmt:bundle>:绑定资源
<fmt:setLocal>:指定地区
<fmt:setZone>:指定时区
<fmt:message>:显示配置资源文件信息
<fmt:requestEncoding>:显示请求编码格式
JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签
<sql:setDataSource>:指定数据库的数据源
<sql:query>:运行数据的查询语句
<sql:update>:运行数据的更新语句
<sql:param>:将sql语句中的参数设定为指定值
<sql:dataParam>:将sql语句中的日期参数设定为指定java.util.Date数值
<sql:transaction>:将所有的语句以事务的形式运行
JSTL XML标签库用于创建和修改xml标签
<x:out>:和<%=...%>类似,不过是用于操作XPath
<x:parse>:用于解析xml
<x:set>:设置XPath表达式,XPath是xml路径语言,用来确定XML文档中某部分路径的语言
<x:if>:判断XPaht表达式,如果为真则执行本体中的内容,否则跳过本体中的内容
<x:forEach>:迭代xml文档中的节点
<x:choose>:<x:when>和<x:otherwise>的父标签
<x:when>:<x:choose>的子标签,条件判断语句
<x:otherwise>:<x:choose>的子标签,条件判断为false执行该语句
<x:transform>:将XSL转换应用到文档中
<x:param>:同<x:transform>一同使用用于修改XSL样式表 JSTL函数 包含大量的标准函数,大部分都是通用的字符串处理函数
fn:contains():测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase():测试输入的字符串是否包含指定的子串,忽略大小写
fn:endsWith():测试输入的字符串以指定后缀结尾
fn:indexOf():指定字符串在输入字符串中的位置信息
fn:length():返回字符串的长度
fn:join():将数组中的元素连接成字符串输出
fn:replace():将输入字符串中指定的位置的字符替换为指定的字符串并输出
fn:split():将输入的字符串按照指定的分隔符进行分隔组成一个数组并输出
fn:startsWith():测试输入的字符串是否按照指定的前缀开始
fn:substring():返回字符串的子集
fn:substringAfter():返回在指定字符串之后的子集
fn:substringBefore():返回指定字符串之前的子集
fn:toLowerCase():将字符串中的内容转为小写
fn:toUpperCase():将字符串中的内容转为大写
fn:trim():去出空白符
编写的注意事项:
1.数据类型要有长度,长度写在括号里面
2.每写完一列都要加一个逗号,最后一列不加逗号
3.每写完一个SQL语句都要跟上一个分号
4.如果有外键关系,先创建主表
VARCHAR比CHAR空间利用率高,但是CHAR要比VARCHAR效率要高,两者是一个矛盾体
foreign key + 给表中的哪一列设置外键 references +引用哪一个表的列
auto_increment:自动增长型,每次增加一个记录,值会自动加1
CREATE TABLE 'website'{
'id' INT(10) NOT NULL AUTO_INCREMENT,
'name' CHAR(20) NOT NULL DEFAULT COMMENT 'this is a example',
'url' VARCHAR(255) NOT NULL DEFAULT COMMENT 'this is a url ex',
'alex' INT(20) NOT NULL DEFAULT COMMENT 'the range of the alex'
'country' CHAR(20) NOT NULL DEFAULT COMMENT 'the country of the name',
PRIMARY KEY('id'),
FOREIGN KEY('name') REFERENCES class('name')
}
INSERT INTO 'website' VALUES('1','Tom', 'www.baidu.com','20','German'),('2','Brown','www.souhu.com','12','France'); create table class(
code varchar(20) primary key,
name varchar(20)
);
create table student(
code varchar(20) primary key,
name varchar(20),
age int,
sex char(10),
class varchar(20),
foreign key(class) references class(code)
);
create table kecheng(
code varchar(20) primary key,
name varchar(20)
);
create table teacher(
code varchar(20) primary key,
name varchar(2)
);
create table chengji(
ids varchar(20) auto_increment primary key,
scode varchar(20),
kcode varchar(20),
grade float,
foreign key(scode) references student(code),
foreign key(kcode) references kecheng(code)
)
create table tkecheng(
ids varchar(20) auto_increment primary key,
tcode varchar(20),
tkecheng varchar(20),
foreign key(tcode) references teacher(code),
foreign key(tkecheng) referencse kecheng(code),
) ------------------------------------------------------------------------------------------------------------------------------------ JSTL数据库操作代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> <html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<sql:setDataSource name="snapshit" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://www.baidu.com/" user="abc" password="12345"></sql:setDataSource>
<!--数据查询-->
<sql:query dataSource="${snapshit}" var="result">
select * from website
</sql:query>
<!--数据插入-->
<sql:update dataSource="${snapshit}" var="result">
insert into website(id, name, url, rank, country) values ('1','tt','www.nadj.com','23','USA')
</sql:update>
<!--删除id为11的数据-->
<sql:update dataSource="${snapshit}" var="delete_item">
delete from website where id=?
<sql:param value="${11}"/>
</sql:update>
<!--修改一条记录-->
<sql:update dataSource="${snapshit}" var="add_item">
update website set name="abc" where id=?
<sql:param value="${11}"/>
</sql:update> <table border="1">
<tr>
<th>a</th>
<th>b</th>
<th>b</th>
</tr>
<c:forEach var="row" items="${result}">
<tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"</td>
<td><c:out value="${row.url}"</td>
</tr>
</c:forEach>
</table>
</body>
</html>