往期回顾(想看详细的可以去我主页自行查找)
JSP基本介绍和Tomcat
- 什么是JSP
- 是一种文件格式
- 写java,html,css,js
- jsp本质上是java的额外封装,解析过程中优先解析java
<a href=“<%=“www.baidu.com”%>”>- .jsp -> .java -> .class -> jvm执行
- Tomcat
- 默认端口 8080
- 如果出现了端口异常,修改端口
基本语法和表单提交
- 基本指令
- <%=输入内容 %>
- <% java脚本 %>
- <%@page 页面指令 %>
- <%@include 包含指令 %>
- 表单提交方式
- get 通过地址栏带参,参数有长度限制
- post 不通过地址栏带参,参数没有长度限制
- 文件上传的时候 必须是post,必须是多段式表单
页面跳转
- jsp的跳转方式
- 转发 forward
- 可以携带数据(请求中的)
- 地址栏不变
- 是服务器行为
- 重定向 redirect
- 不可以携带数据(请求中的)
- 地址栏变
- 是客户端行为
Session和Cookie
【都可以设定存在时间:session-30分钟,cookie-浏览器关闭】
session 服务端存储
cookie 客户端存储
应用场景:
- 浏览记录 cookie
- 鉴权 session
- 存数据库里面,缓冲数据库
富文本编辑器和文件上传
- 富文本编辑器 (把你输入的语句变成了html来保存)
- 文件上传
- 文件上传的主要操作
- 1.将文件保存到电脑路径中
- 2.将保存的电脑路径存到数据库
- 3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
- 如果诞生一个不重复的名字
- 使用UUID UUID.randomUUID()
三层架构
没有学习三层架构:
- jsp 将页面显示出来
- dao 去数据库取数据,处理数据
- dao层:1.拿数据 2.负责处理数据【系统的耦合性:各个模块连接的紧密度】
【三层架构】
- 各司其职
- 高内聚,低耦合
【结构】
- 表示层
- 业务逻辑层 biz
- 数据库访问层 dao
【调用顺序】
表示层->业务逻辑层->数据库访问层—|
|
表示层<-业务逻辑层<-数据库访问层 <-|【命令规则】
com.biz -> Biz接口
com.biz.impl ->Biz的接口实现类
com.dao -> Dao接口
com.dao.impl -> Dao接口的实现类
三层架构实例
建包和建类和接口
util包:DBHelper:数据库连接包
package com.test.util;
/**
* 连接数据库的工具包
* @author 绥彼岸
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleDriver;
public class DBHelper {
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
//导入驱动(sqlserver,oracle,mysql),一定要执行 build path,且需要导入对应的jar包
static {
//OracleDriver
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//编写连接语句
private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
/**
* 获得连接的方法
* @return
*/
public static Connection getCon() {
try {
return DriverManager.getConnection(URL,"scott","tiger");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭资源的方法
* @param con
* @param ps
* @param rs
*/
public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
try {
if(con!=null&&!con.isClosed()) {
con.close();
}
if(!ps.isClosed()) {
ps.close();
}
if(!rs.isClosed()) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//测试是否连接到了数据库
public static void main(String[] args) {
System.out.println(DBHelper.getCon());
}
}
pojo包:User:用户的实体类
package com.test.pojo;
/**
* 用户的实体类
* @author 绥彼岸
*
*/
public class User {
private int userId;
private String userName;
private String userPwd;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public User() {
// TODO Auto-generated constructor stub
}
public User(int userId, String userName, String userPwd) {
super();
this.userId = userId;
this.userName = userName;
this.userPwd = userPwd;
}
}
biz包:IUserBiz:业务逻辑层的接口
package com.test.biz;
import com.test.pojo.User;
/**
* 业务逻辑层的接口
* @author 绥彼岸
*
*/
public interface IUserBiz {
String login(User user);
}
biz.impl包:UserBizImpl:业务逻辑层接口的实现类
package com.test.biz.impl;
import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
* 业务逻辑层接口的实现类
* @author 绥彼岸
*
*/
package com.test.biz.impl;
import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
* 业务逻辑层接口的实现类
* @author 绥彼岸
*
*/
public class UserBizImpl implements IUserBiz{
private IUserDao userDao=new UserDaoImpl();
@Override
public String login(User user) {
User use = userDao.login(user);
//判断账号是否正确,正确的话不会为null
if(use==null) {
return "account not found";
}
//判断密码是否正确
if(!use.getUserPwd().equals(user.getUserPwd())) {
return "password error";
}
//登录成功
return "login success";
}
}
dao包:IUserDao:数据库访问层的接口
package com.test.dao;
import com.test.pojo.User;
/**
* 数据库访问层的接口
* @author 绥彼岸
*
*/
public interface IUserDao {
User login(User user);
}
dao.impl包:UserDaoImpl:数据库访问层接口的实现
package com.test.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.test.dao.IUserDao;
import com.test.pojo.User;
import com.test.util.DBHelper;
/**
* 数据库访问层接口的实现
* @author 绥彼岸
*
*/
public class UserDaoImpl implements IUserDao{
private Connection con;
private PreparedStatement ps;
private ResultSet rs;
@Override
public User login(User user) {
try {
con = DBHelper.getCon();
String sql="SELECT * FROM T_USER WHERE USE_NAME=?";
ps=con.prepareStatement(sql);
ps.setString(1, user.getUserName());
rs=ps.executeQuery();
if(rs.next()) {
User use=new User();
use.setUserName(rs.getString(2));
use.setUserPwd(rs.getString(3));
return use;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}