黑马程序员技术交流社区

标题: javaEE21期 [打印本页]

作者: pangyu    时间: 2019-1-24 13:49
标题: javaEE21期
filter过滤器
一般用来完成登录验证操作 同意编码 敏感字符过滤
-------------------
编写filter
步骤
定义一个类
实现接口 filter javax包下的
复写方法
配置拦截路径





web三大组件 servlet filter listner


在dofilter方法中
filterChain.doFilter放行

使用注解配置 或者使用web。xml配置 都可以


服务器启动执行init方法 进行创建
服务器正常关闭 会执行destory

拦截目录
/user/*
拦截后缀名*.jsp

拦截方式配置
设=置dispatchertypes
request 默认值 直接请求
forward 转发访问资源
include 包含访问资源

error 错误跳转资源
async 异步访问资源



































删除选中   未完成 删除确认按钮 未添加
在service中遍历id数组
调用dao的删除方法



----------------
分页
后台
pagebean 编写 分页工具对象
《T》

private int totalcount
totalpage总页码

  List<T》>    list 每页数据
currentpage
rows 每页显示记录数

建立finduserbypageservlet

start current-1*rows.0.00.0

需要在service层进行 pb创建 添加rows和 count
   ‘
   
   
   
   
   
   
int start=
list=findbypage(stat,rows)
pb。setlist

总页数

totalcount %rows==0? total/rows: +1

pb。settotalpage

return pb

if current==null||“” equals currentpage





---------------
分页前台
pb。list


1此消息单独
.
























统称为javaee三层架构

而mvc是属于所有开发语言 抽象模式



------------------------
web 表现层
界面层 表示层
用户看的界面 用户可以通过界面上的组件和服务器进行交互

将数据接收 传递给业务逻辑层

数据访问层 操作数据存储文件

控制器 servlet
数据封装 调用 向下


cn.itcast.项目名.web

spring mvc框架 web的框架



---------------------
service 业务层

.service

核心业务逻辑 调用dao中的方法


spring 框架

---------------------------
dao 持久层

.dao
建立三个包


mybatis 数据框架





--------------------------
需求  用户信息的更删改查
设计
        技术选型
        数据库设计
        建表
        id
        name
        gender
        age
        address
        qq 定义varchar
        email varchar
开发
1.环境搭建 架构师
创建数据库环境
创建项目 导入需要jar包

2.编码







----------------------------

代码实现

domain 中放入user 实现user表的字段
进入index。jsp pagecontext。request。path/   /

建立 userlistservlet

调用userservice

需要建立uxeservice 接口
定义 public list<user> findAll()
查询所有用户信息

service 中 建立子包 impl
建立 userservileimpl
实现uservice

return dao,findall

在上面 引入 private userdao 对象



同样在dao
中实现
操作数据库的结构


转发不需要虚拟目录

然后编写userdaoimpl 其中引入
provate jdbc template


!!!!!!!!!!!!!!!!!!!!
出错点 1 调用接口
需要在servlet层调用service 得到最终结果
在service层中 调用userdao new dao的接口 进行调用
返回 dao的方法
在dao中返回的是list 执行sql时 使用query语句 而不是 forobject

在jsp中 填写foreach时 对于item 必须使用${}圈起来
否则会显示 name不是string
类型

!!!!!!!!!!!!!!!!!!!
bootstrap

改造页面

表单功能 赋值代码

登录功能 验证码显示


超链接处 填写 javascript: refreshcode

scrip中定义新方法 切换验证码
function

document byid

c。src = 复制 在最后添加?time“ +new date gettime



登录用户成功 保存user 需要使用sessino
重定向需要加上虚拟目录

insert into ()










    <c:forEach items="${userList}" var="user" varStatus="s">

            <tr>
                <td><input type="checkbox"></td>
                <td>${s.count}</td>
                <td>${user.name}</td>
                <td>${user.gender}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
                <td>${user.qq}</td>
                <td>${user.email}</td>
                <td><a class="btn btn-default btn-sm" href="update.jsp">修改</a>&nbsp;<a class="btn btn-default btn-sm"
                                                                                       href="">删除</a></td>
            </tr>
        </c:forEach>
               
               
               
                 <td colspan="8" align="center"><a class="btn btn-primary" href="add.jsp">添加联系人</a></td>
        <td colspan="8" align="center"><a class="btn btn-primary" href="add.jsp">删除选中行</a></td>





<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

















servlet
第一次访问的时候会被翻译为servlet 存在于work目录
------------------------------
jsp指令
用于配置js页面导入资源文件
格式《%@%》

种类
page  用于配置jsp页面
include 完成页面包含的 导入页面的资源文件
taglib 导入资源的

page
中的比较重要的属性
content-type
设置响应体的mime类型以及字符集
低级工具需要pageencoding 进行设置

buffer缓冲区大小
import导包
errorpage  错误页面 当前页面发生异常后 会自动跳转到指定错误页面

iserrorpage 标识当前页面是否是错误页面
true是错误页面 可以使用内置对象 exception
  否认值 不能使用内置对象
  
  
  
  include指令
  包含页面
  等他人呢方法搜图修饰
  
  
  taglib指令
导入标签库
taglib 引入 pre uri

使用pre定义的名字点冒号进行引用
前缀



-------------------------------
注释 标签

html注释 <!-- -->
jsp注释 <%-- --%>   

-------------------
jsp 内置对象
pagecontext 域对象 当前页面存储
request                一次请求 转发
session                  一次会话多个请求间       
application                                所有用户间 共享数据
response
  page                                                其实就是this
out                                         输出对象
config                                        servlet配置对象
exception                        异常对象

pagecontext可以获取其他八个对象
----------------------
mvc模式
开发模式
module view controller

M
model 模型  进行业务逻辑操作 封装数据
V
view        视图 展示数据
C
controller控制器 获取客户端的输入 调用模型 将数据交给视图展示

控制器调用模型 进行业务操作 模型将数据返回给控制器
控制器再将数据传给视图 视图展示数据

优缺点
耦合性低 方便维护 利于分工
重用性高

项目便复杂





----------------------------

替换简化jsp中代码编写

就是表达式语言

el表达式 语法
${

}

/忽略el表达式
配置为true 忽略所有表达式



借助el表达式 以及 jstl 获取值 遍历值 在view中

el表达式 只能从域对象中获取值
${域名城。键名} 从指定域中获取指定键的值

域名称
pagescope
requestscope
sessionscope
applicationscope
从四个域中获取数据

不写域名称 会从最小范围开始找名字
${名字}

------------------------
获取对象的值

javabean的属性  setter getter方法去掉 set或get 把剩余部分首字母变小写
得到的东西为属性
${requestscope.u.name}

简答记为在el表达式中 不需要写set get方法

0-----------------
获取list时
需要使用 域名。list【0】

map.keyname.
map.["keyname"]
------------------
empty
${empty str} 判断是否为null 是否长度为0

去反为not empty


---------------
隐式对象
类似于内置对象

pagecontext 可以获取jsp其他八个内置对象
比如获取虚拟目录
pagecontext。request。contextpath()


---------------------
jstl标签

概念 jsp标准标签库
作用 用于简化和替换jsp页面上的java 代码
导入jstl相关jar包
引入标签库
taglib指令
<%@ taglib%>

使用标签
------------------

if       相当于 if
choose                相当于switch
foreach                相当于for

jar包导入web-inf下
指令引入 taglib%
<c:if test="">
必须属性为test 接受布尔表达式

如果表达式为true则显示if标签体内容 为false
则不显示



<if>

c:foreach begin=“1” end 10 vari step 1

varstatus 循环状态
定义s
s.index 索引值             s.count循环次数


${i}



遍历list

items=“¥{list}” var varstatus=“s”

------------------------
在request域中存有user
对象 的list集合

视同jstl 加el
将list 数据展示到jsp中的table



















































-------------------------










---------------------------







cookie

基于客户端的一个技术

session
基于服务器的技术

-----------------------------


会话管理技术

会话:一次会话中包含多次请求和响应
浏览器第一次给服务器发送请求 会话建立 直到有一端断开连接为止

功能 --在一次会话的范围内的多次请求之间 共享数据
方式
客户端会话技术cookie
服务器端会话技术session
------------------------------
cookie技术
客户端会话技术
将数据保存在客户端

创建cookie对象 指定数据
new cookie(String name,String value)
发送cookie对象
res。addcookie(cookie cookie)

获取cookie 拿到数据
req,getcookies
-----------
发送多个cookie
创建多个对象 cookie 调用多次addcookie方法即可
-----------
cookie在浏览器中存活时间设置
即 保存时间

默认情况下 当浏览器关闭后 cookie 数据被销毁
设置cookie 持久化存储
setmaxage(int seconds)
正数 写入硬盘文件 持久化存储
负数  默认值
0    删除cookie信息

设置代码
对象。setmaxage() 经过相应时间后 会从硬盘删除 在时间内 再次访问依然有效

------------------
tomcat8之后可以存储中文
-----------------------
获取范围

cookie在同一个服务器的不同项目中 能否共享
对象。setpath(“/”)

不同服务器之间共享
setdomain(“。baidu.com”)

-----------------

特点 作用


存储数据在客户端
对于单个cookie大小有限制 同域名下总cookie数量也有限制

存储少量数据
在不登录的情况下 完成信息识别

------------------------



判断lasttime cookie是否存在
lasttime 时间 写回客户端保存

有 不是第一次访问
相应数据 欢迎回来 您上次访问时间为 --------
写回cookie lasttime=时间



没有 是第一次访问
响应数据 您好 首次访问
写回cookie lasttime=时间


代码实现

创建 servlet
response。setcontent(text、html;charset=utf-8)

request。getcookies

boolean flag =false
if(cookies!=null&&cookies。length》0){


flag=true
Date date = new Date;
Simpledateformat s = new sim~~( yyyy年MM月dd 日 HH:MM:SS)
s.firmat(date).var

URLEncode(str,"utf-8").var


cookie.setvalue()
cookie.setmaxage(60*60*24*30)

res.addcookie(cookie)



for(cookies c:cookies)
cookies。getname();
if(lasttime。equals(name)){
存在cookies 不是第一次访问
cookie。getvalue
URLDecode()

res。wirite(“”+value);

}

break;
}
if(cookies==null||length=0||flag=false){

}
}

------------------------
jsp入门
概念
java服务器端页面

理解为特殊页面既可以定义html标签 又可以定义java 代码
用于简化书写

jsp原理

会把index。jsp转为java文件
编译 生成。class
由字节码文件提供访问

jsp本质上就是一个servlet 封装继承httpservlet 和base

jsp脚本

<%%>
与service中定义的方法相同

<!%%>
定义成员方法 成员变量


<=%%>
输出语句



jsp内置对象

request response。 out

response.getwriter 和out的区别
response 会先于out输出




-------------
session技术
session技术 服务器端会话技术 再一次会话期间 多次请求 将数据存储在服务器中
使用httpsession 对象。
req。getsession
用得到的对象setattritube(kv)

第一次请求sesssion 没有cookie 会在内存中创建一个新的session对象
存在id

通过传送cookie 传送id 进行确认两次请求的为相同session

原理 session的实现是依赖于cookie的

客户端关闭 服务器不关 默认情况下 两次获取session不是同一个
客户端不关闭 服务器关闭 获得的也不是同一个

session被销毁
服务器关闭
对象调用方法 invalidate
默认失效时间30分钟



特点  用于存储数据 服务器端
    可以存储任意类型任意大小
       
        cooki区别
       
案例 验证码

访问带有验证码登录页面
输入用户名 密码 验证码

错误 跳转

正确进入 successjsp页面

会先对验证码进行判断 然后再判断登录名和密码

--------------------------------------------
代码实现 !!!
这个逼

servlet包

写随机验证码页面
checkcodeservlet







里面使用stringbuilder sb =

使用sb。qppend(ch)连接生成的单个字符

sb。tostring
使用
session。setattritube 存入session
--------------------
jsp login页面
提交 loginservlet包中
使用table   五个部分
用户名
密码
验证码输入框
图片 src指向servlet 路径

提交按钮



点击图片会进行切换

window。onload=function{

document.getbyid 。onclick=function(){


this。src=路径+new DAte。gettime()

}
}

--------------------------------

编写loginservlet
request。setchararcter

获取map集合
req。getmap

req。getparameter(username)
req。getparameter(password)
req。getparameter(checkword)

使用req。getsession()
session。getattritube()

if()验证码进行比较 使用忽略大小写的equals进行比较
if(“张三“。equals()&&”123“。quals(password)){

成功 重定向到 sendredirect(request。getcontextpath()+)
}else{

存储 用户名或密码错误
跳转loginjsp
}



else 验证码不一致 存储信息到requestsetattritube(“info”,“验证码错误”)
request。getdis(“、login。jsp”)




--------------------
写success。jsp

欢迎您

-------------------------

没数据不显示  
























































欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2