目录
往期回顾
1.Web环境的搭建
2.JSP基本语法&表单提交方式
3.页面跳转&数据库连接
4.网页登录&增加操作
5.增删查改
6.点击量&模糊查询&评论功能
7.服务器、客户端存储
8.Application&JavaBean封装
9.分页功能
10.富文本编辑器&文件上传功能
11.三层架构
使用三层架构编写登录功能
最近发布了很多关于Web开发的文章,今天来稍稍回顾一下
想要详细了解的可以点击下面的链接
JavaWeb01.WED环境的搭建_小阿飞_的博客-CSDN博客JDK开发工具包jdk是什么?jdk是java development kit的缩写,意思是java程序开发的工具包JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。如何下载和安装jd..https://blog.csdn.net/yifei_345678/article/details/123674499?spm=1001.2014.3001.5501
*jsp
* 什么是jsp
- 是一种文件格式
- 写java,html,css,js
- jsp本质上是java的额外封装,解析过程中优先解析java
">理解: 的引号中放了字符串"www.baidu.com"
-执行顺序: .jsp -> .java -> .class -> jvm
* 安装tomcat
- 默认端口 8080
- 如果出现了端口异常,修改端口
Web02.jsp基本语法&表单提交方式_小阿飞_的博客-CSDN博客
* 基本语法
- <%=输入内容 %>
- <% java脚本 %>
- <%@page 控制整个JSP页面的指令(如导包语句,设置编码格式)%>
- <%@include 包含指令(引入jsp文件)%>
* 表单提交方式
- get 通过地址栏带参,参数有长度限制
- post 不通过地址栏带参,参数没有长度限制
-> 文件上传的时候 必须是post,必须是多段式表单(enctype="multipart/form-data")
JavaWeb之页面跳转&数据库连接_小阿飞_的博客-CSDN博客_web页面连接数据库
* jsp的跳转方式
- 转发 forward
- 可以携带数据(请求中的)
- 地址栏不变
- 是服务器行为
- 重定向 redirect
- 不可以携带数据(请求中的)
- 地址栏变
- 是客户端行为
JavaWeb之网页登陆&增加操作_小阿飞_的博客-CSDN博客
* jdbc链接数据库
-链接oracle数据库的URL jdbc:oracle:thin:@localhost:1521:orcl
Web项目开发之增删查改_小阿飞_的博客-CSDN博客
Web项目之点击量&模糊查询&评论功能_小阿飞_的博客-CSDN博客
Web项目之服务器、客户端存储_小阿飞_的博客-CSDN博客
【都可以设定存在时间,默认存活时间:session-30分钟,cookie-浏览器关闭】
* session 服务端存储
* cookie 客户端存储
应用场景:
* 历史浏览记录功能 cookie
* 鉴权功能 session
* 存数据库里面,缓冲数据库
Web之Application&JavaBean封装_小阿飞_的博客-CSDN博客
*Application 应用级存储 适合公共信息的存储
*在JSP页面中导入JavaBean
Web开发之分页功能_小阿飞_的博客-CSDN博客_分页web
* 分页功能的sql语句
【规律】 page当前页数 rows显示条数
page:1 rows:10 1~10
page:2 rows:10 11~20
page:3 rows:10 21~30
begin(开始位置): (page-1)*rows+1
end(结束位置): page*rows
【分页功能sql语句】
select * from (
select a.*,rownum myr from stu a
)b where myr between begin and end;
Web开发之富文本编辑器&文件上传功能_小阿飞_的博客-CSDN博客
* 文件上传
- 文件上传的主要操作
* 1.将文件保存到电脑路径中
* 2.将保存的电脑路径存到数据库
* 3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
- 如果诞生一个不重复的名字
* 使用UUID UUID.randomUUID()
* 富文本编辑器 (把你输入的语句变成了html语句来保存)
Web开发之三层架构_小阿飞_的博客-CSDN博客
三层架构:
* jsp 将页面显示出来
* dao 去数据库取数据,处理数据
dao层:1.拿数据 2.负责处理数据
【系统的耦合性:各个模块连接的紧密度】
【三层架构】
* 各司其职
* 高内聚,低耦合【结构】
* 表示层 UI 服务员
* 业务逻辑层 biz 厨师
* 数据库访问层 dao 买菜的人【调用顺序】
表示层->业务逻辑层->数据库访问层->业务逻辑层->表示层【命令规则】
com.biz -> Biz接口
com.biz.impl ->Biz的接口实现类
com.dao -> Dao接口
com.dao.impl -> Dao接口的实现类
这里再为大家贴上一份更加详细的三层架构案例代码:
表示层调用业务逻辑层
表示层doLogin:负责接受用户的请求、显示网页内容
比如这里有一个登录界面,代码如下:
其中,输入框的name属性就是用户输入的用户名或密码,也是表示层请求中拿到的值
表示层doLogin代码:
由于doLogin中需要用到用户对象,所以再编写之前要新建用户实体类:
package com.pojo;
/**
*用户的实体类
*/
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
}
表示层负责接受用户的请求的代码:
<%
//doDenglu表示层拿到用户请求的数据:request
String username=request.getParameter("username");
String password=request.getParameter("password");
//将数据封装到用户实体类中
User user = new User(username, password);
%>
表示层doLogin调用业务逻辑层代码:
重写接口中的登录方法后:表示层doLogin调用业务逻辑层代码:
注:由于声明的是实现类new UserBizImpl(),所以调用的是实现类UserDaoImpl中重写后的登录方法
<%
//表示层doLogin 调用 业务逻辑层(biz)
IUserBiz userBiz=new UserBizImpl();//李氏替换原则
//调用业务逻辑层的方法
String message = userBiz.login(user);
%>
首先新建业务逻辑层接口和对应的实现类:
IUserBiz.java接口代码:
package com.biz;
import com.pojo.User;
/**
* IUserBiz:I代表接口,UserBiz代表用户的业务逻辑
* IUserBiz:针对用户的业务逻辑的接口
*/
public interface IUserBiz {
String login(User user);//在接口中直接声明登录方法,不用代码体{}
}
UserBizImpl.java接口实现类中
重写接口中的登录方法-----面向接口编程:
1.编写接口
2.实现接口
3.使用李氏替换原则来声明接口
4.调用接口的方法
UserBizImpl.java实现类代码:
package com.biz.impl;
import com.biz.IUserBiz;
import com.dao.IUserDao;
import com.dao.impl.UserDaoImpl;
import com.pojo.User;
/**
* 业务逻辑层:
* 用户逻辑接口实现类:实现了IUserBiz接口,就必须重写接口中的方法
*/
public class UserBizImpl implements IUserBiz{
//业务逻辑层(biz)调用 数据库操作层(dao)
//李氏替换原则
private IUserDao userDao=new UserDaoImpl();
@Override
//重写接口中的登录方法:
public String login(User user) {
//biz包:处理数据
//1.先拿到dao包的数据
User u = userDao.queryByName(user);
//2.处理数据
if(u!=null){
return "登录成功";
}
return "登录失败";
}
}
连接了数据库后业务逻辑层UserBizImpl.java实现类代码:
理解上图代码:
login方法中传入的参数就是用户对象,是用户传入的;用户u对象是userDao中从数据库拿出来的用户对象,而业务逻辑层就是加工数据库访问层的原材料(User对象)的厨师,上图的加工是将User中的用户密码和用户输入的用户密码进行对比验证
上面代码中,重写接口中的登录方法中的代码即:业务逻辑层调用数据库访问层
先新建数据库访问层接口和对应的实现类:
业务逻辑层IUserDao.java接口代码:
package com.dao;
import com.pojo.User;
/**
*针对数据库操作的接口
*/
public interface IUserDao {
//查询方法
User queryByName(User user);
}
业务逻辑层UserDaoImpl.java实现类代码:
package com.dao.impl;
import com.dao.IUserDao;
import com.pojo.User;
/**
*用户的数据库操作接口实现类
*实现了:IUserDao接口,重写查询方法
*/
public class UserDaoImpl implements IUserDao{
@Override
public User queryByName(User user) {
//简写验证
if("aa".equals(user.getUsername())&&"123".equals(user.getPassword())){
return new User("","");
}
//可写连接数据库的代码:根据用户名和密码去数据库查询数据,要写DBHelper类
return null;
}
}
连接数据库时UserDaoImpl.java实现类代码示例:返回User对象
数据库访问层功能只是从数据库拿到数据,不对数据做任何改变加工,直接将拿到的数据返回给业务逻辑层:这里就是返回一个用户User对象
最后,在开发web项目时使用三层架构通常可以先编写dao层和dao层接口,再编写biz业务逻辑层接口和对应的实现类,想知道具体写法,点点关注,后期会再更新