JaveWeb基础三

个人信息查看更改

从Session中取出原有信息,并显示
<%User user =(User)session.getAttribute(“user”);>
<%= user.getUserame() %><%= “1”. equals(user.getSex:()? “男”.“女" %>
<%= new SimpleateFomatyy-MMdd").formnat(user.getBitnday()%>

在表单显示原有信息-1
//文本框
" />
//单选
disabled=“true” <%= “1” equals(user.getSex())? “checked”: " %>

在表单显示原有信息-2
下拉列表

个人密码修改

如何做到网络密码安全:
个人:减少弱密码,尽量使用安全的密码
网站:重视网络安全,避免被脱库,密码加密存储(MD5)

MD5:
MD5消息摘要算法(英语: MD5 Message-Digest Algor ithm .),-种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整-致。MD5由罗纳德.李维斯特设计,于1992年公开,用以取代MD4算法。这套算法的程序在RFC 1321 中被加以规范。将数据(如一段文字)运算变为另一固定长度值是散列算法的基础原理,一般128位 的MD5散列被表示为32位十六进制数字。

MD5的特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。.
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5算法的计算步骤:
1.通过添加一个1和若干个0的方式,把输入数据长度(按照字节算)变成64m+56
2.添加8个字节到输入数据中去,这样输入数据长度变成了64的倍数
3.把数据划分成块,每块64个字节
4.初始化MD5参数:
m_ state[0] = 0x67452301L;
m_ state[1] = 0xefcdab89L;
m_ state[2] = 0x98badcfeL;
m_ state[3] = 0x10325476L;
5.分别对每块进行计算(位运算),输出最后结果

管理员登录

登录:连接池 EL
推出登录

1.登录
数据源DataSource
数据源负责建立与数据库的连接,在应用程序中访问数据库不必编写连接数据库的代码,可以之间从数据源获得数据库连接。
数据库连接池ConnectPool
在DataSource中事先建立了多个数据库连接,这些数据库连接保存在数据库连接池中。

1.1JNDI得概念
-JNDI (Java Naming and Directory Interface, Java命名和目录接口)是- -组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性.

1.2配置数据源:
在WEB应用得/META-INF/context.xml中配置
JaveWeb基础三_第1张图片
添加JDBC驱动程序:
在<%CATALINA_ HOME%>/1ib目录下添加JDBC驱动程序。
获取DataSource对象:
JNDI (java Naming and Directory Interface)对象名字绑定技术,利用javax. naming. Context接口的方法 Object lookup(String name)
在程序中访问数据源:
Context context = new InitialContext();
DataSource ds = (DataSource)
context. lookup(“java.comp/env/jdbc/My12306”);
Connection conn = ds.getConnection();

EL (Expression Language) -表达式语言
是JSP中一种简洁的数据访问语言
简化JSP的开发
主要功能:
通过它可以在JSP网页中方便地访问,并输出: .
存储在作用域中的对象及其属性
访问请求参数、cookie和其 他请求报文中的信息
简单的运算:算数、关系、逻辑、条件求值
语法格式:
${expression}

访问作用域中的对象
访问指定作用域的对象:
${[pageScopelrequestScopelsessionScopelapplicatinScopel].对象名}
示例:
<% request. setAttribute("username “itty”) %>
${usermame}

访问JavaBean对象的属性
${对项目,属性名}
${对象名[“属性名”]}
示例:
<%
UserBean U = new UserBean();
user.setUserame(“dingdang”);
request. setAttribute("user ;U);
%>
${user.userame}
${user[“username”]}

访问集合类型的对象:
${集合对象名[索引]}
示例:
<%
String[] f= {“banana”,“aple”,"pear};
request. setAttribute(“fruits”,f);
%>
${fruits[0]}
${ruit{[“0”]}

EL隐式对象
隐式对象:
pageScope代表page作用域内所有对象的集合
requestScope代表request作用域内所有对象的集合
sessionScope代表session作用域内所有对象的集合
applicationScope代表application作用域内所有对象的集合
pageContextpageContext对象,当前页面对象
param包含请求参数和对应字符串类型值的Map
paramValues包含请求参数和对应字符串类型的数组的Map
header包含header名称和对应字符串类型值的Map
headerValues包含header名称和对应字符串类型数组的Map
cookie包含cookie名称和对应值的Map

JaveWeb基础三_第2张图片
JaveWeb基础三_第3张图片
JaveWeb基础三_第4张图片
管理员增删改查

1.增加:
可以添加管理员,普通用户
同普通用户注册

2.查询:
2.1组合查询
自定义标签语法
包含主体:
< prefix: name {attribute=“value”}* >
Body

空元素
< prefix: name {attribute=value"}/ >

标签处理程序类
对于每个自定义标记,后台都有响应的功能类来处理
标签库描述符文件(.tid)
该文件定义了自定义标签使用的规则
规则包括标记的名字、属性、属性如何赋值、标记是否有子标记,标记是否是循环迭代的等等

JSP标签的使用:

  • taglib指令的uri属性
    ●uri提供的路径可以找到定义的自定义标签库的tld文件
    ●uri属性可以是tId文件的绝对路径,即真实路径。不需要在dd文件中映射。
    ●uri属性也可以是逻辑名,该逻辑名将被映射到部署描述符中,t Id文件的绝对路径。
  • prefix属性
    ●自定义标签名称之前的前缀是由指令的pref ix属性指定的。
    ●名字可以任意,但是如下保留的不能使用: jsp、 jspx、java、 javax、 servlet、 sun、 sunw等。

JSTL (JSP Standard Tag L ibrary) 标签库
-核心标签库:包含Web应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
-国际化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
-数据库标签库:可以做访问数据库的工作。
-XML标签库:用来访问XML文件的工作,这是JSTL标签库的一-个特点。
-函数标签库:用来读取已经定义的某个函数。

标签
-if标签是JSTL中的带条件的标签
-test表达式判断后,结果先保存。如果标签体有内容,那么当test表达式结果为真时,才有效
-if标签说明
●标签体内容:可选。当test表达式结果为真时,标签体内容才有效。
●test属性:必要属性,存放要判断的表达式
●var属性:可选属性,于存放test的结果
●scope属性:可选属性,var属性的作用域

标签
-forEach标签提供了对标签体内容的迭代
一般迭代的集合对象
●java. util. Collect ion
●java. uti I. Map
●java. util. Iterator
●java. uti I. Enumerat i on
●数组
●其他以逗号分割的字符串对象

标签
-forEach标签说明:
标签体内容:包含需要重复执行的代码
●items属性:可选属性,表示迭代集合对象
●var属性:可选属性,存放迭代的当前条目
●varStatus属性: 可选属性,存放迭代步骤的信息
●begin属性:表示迭代中的第一 个元素,如果没有items属性,须提供begin属性
●end属性:可选属性,表示迭代中的最后一个元素,如果没有items属性,须提供end属性
●step属性: 可选属性,表示迭代的步长

隔行变色
tr align=“center” bgcolor="${ status.index %2== 0? '#ffT: #CCC }"

基于数据库分页
获取总页数
通过Oracle分页语句,进行分页查询
select * from (
select a1.,rownum m from
(select * from a1 order by id desc where rownum<=(rowNum
pageSize))
where m>=((rowNum-1)*pageSize+1)

基于结果集分页
获取总页数
可滚动/可更新的Result

Statement st = conn.createStatement(int
resultSetType, intresultSetConcurrency)
ResultSet rs = st.executeQuery(sq|Str)

-resul tSetType是设置ResultSet对象的类型可滚动,或是不可滚动。取值如下:
ResultSet. TYPE_ FORWARD ONLY只能向前滚动
ResultSet. TYPE
SCROLL_ INSENS ITIVE和Result. TYPE_ SCROLL_ SENS ITIVE这
两个方法都能够实现任意的前后滚动,使用各种移动的Resul tSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。

-resul tSetConcurency是设置Resul tSet对象能够修改的,取值如下:
ResultSet. CONCUR_ READ_ ONLY 设置为只读类型的参数。
ResultSet. CONCUR_ _UPDATABLE设置为可修改类型的参数。

JaveWeb基础三_第5张图片
JaveWeb基础三_第6张图片

你可能感兴趣的:(JaveWeb基础三)