asp源码-漂亮企业源码大气公司网站模版,全定制网站开发,网络管理系统的每个节点都包含一组与管理有关的软件,互联网分享社区9、JavaBean
实体类
JavaBean有特定的写法#xff1a;
必须要有一个无参构造属性必须私有化必须有对应的get/set方法#xff1b;
一般用来和数据库的字段做映射 ORM#xff1b;
ORM #xff1a;对象关系映射
表—类字段–属性行记录----对象
people表
…9、JavaBean
实体类
JavaBean有特定的写法
必须要有一个无参构造属性必须私有化必须有对应的get/set方法
一般用来和数据库的字段做映射 ORM
ORM 对象关系映射
表—类字段–属性行记录----对象
people表
idnameageaddress1秦疆1号3西安2秦疆2号18西安3秦疆3号100西安
class People{private int id;private String name;private int id;private String address;
}class A{new People(1,秦疆1号,3西安);new People(2,秦疆2号,3西安);new People(3,秦疆3号,3西安);
}过滤器文件上传邮件发送JDBC 复习 如何使用JDBC , JDBC crud jdbc 事务
10、MVC三层架构
什么是MVC Model view Controller 模型、视图、控制器
10.1、早些年
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XSj1Oftx-1677418895011)(JavaWeb.assets/ )]
用户直接访问控制层控制层就可以直接操作数据库
servlet--CRUD--数据库
弊端程序十分臃肿不利于维护
servlet的代码中处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构没有什么是加一层解决不了的
程序猿调用
|
JDBC
|
Mysql Oracle SqlServer ....10.2、MVC三层架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shOcmnwM-1677418895012)(JavaWeb.assets/ )]
Model
业务处理 业务逻辑Service数据持久层CRUD Dao
View
展示数据提供链接发起Servlet请求 aformimg…
Controller Servlet 接收用户的请求 req请求参数、Session信息…. 交给业务层处理对应的代码 控制视图的跳转 登录---接收用户的登录请求---处理用户的请求获取用户登录的参数usernamepassword----交给业务层处理登录业务判断用户名密码是否正确事务---Dao层查询用户名和密码是否正确--数据库11、Filter 重点
Filter过滤器 用来过滤网站的数据
处理中文乱码登录验证….
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PWVns1y-1677418895013)(JavaWeb.assets/ )]
Filter开发步骤 导包 编写过滤器 导包不要错 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gzqCLG54-1677418895014)(JavaWeb.assets/ )] 实现Filter接口重写对应的方法即可 public class CharacterEncodingFilter implements Filter {//初始化web服务器启动就以及初始化了随时等待过滤对象出现public void init(FilterConfig filterConfig) throws ServletException {System.out.println(CharacterEncodingFilter初始化);}//Chain : 链/*1. 过滤中的所有代码在过滤特定请求的时候都会执行2. 必须要让过滤器继续同行chain.doFilter(request,response);*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {request.setCharacterEncoding(utf-8);response.setCharacterEncoding(utf-8);response.setContentType(text/html;charsetUTF-8);System.out.println(CharacterEncodingFilter执行前....);chain.doFilter(request,response); //让我们的请求继续走如果不写程序到这里就被拦截停止System.out.println(CharacterEncodingFilter执行后....);}//销毁web服务器关闭的时候过滤会销毁public void destroy() {System.out.println(CharacterEncodingFilter销毁);}
} 在web.xml中配置 Filter filterfilter-nameCharacterEncodingFilter/filter-namefilter-classcom.kuang.filter.CharacterEncodingFilter/filter-class
/filter
filter-mappingfilter-nameCharacterEncodingFilter/filter-name!--只要是 /servlet的任何请求会经过这个过滤器--url-pattern/servlet/*/url-pattern!--url-pattern/*/url-pattern--
/filter-mapping12、监听器
实现一个监听器的接口有N种 编写一个监听器 实现监听器的接口… //统计网站在线人数 统计session
public class OnlineCountListener implements HttpSessionListener {//创建session监听 看你的一举一动//一旦创建Session就会触发一次这个事件public void sessionCreated(HttpSessionEvent se) {ServletContext ctx se.getSession().getServletContext();System.out.println(se.getSession().getId());Integer onlineCount (Integer) ctx.getAttribute(OnlineCount);if (onlineCountnull){onlineCount new Integer(1);}else {int count onlineCount.intValue();onlineCount new Integer(count1);}ctx.setAttribute(OnlineCount,onlineCount);}//销毁session监听//一旦销毁Session就会触发一次这个事件public void sessionDestroyed(HttpSessionEvent se) {ServletContext ctx se.getSession().getServletContext();Integer onlineCount (Integer) ctx.getAttribute(OnlineCount);if (onlineCountnull){onlineCount new Integer(0);}else {int count onlineCount.intValue();onlineCount new Integer(count-1);}ctx.setAttribute(OnlineCount,onlineCount);}/*Session销毁1. 手动销毁 getSession().invalidate();2. 自动销毁*/
} web.xml中注册监听器 !--注册监听器--
listenerlistener-classcom.kuang.listener.OnlineCountListener/listener-class
/listener看情况是否使用
13、过滤器、监听器常见应用
监听器GUI编程中经常使用
public class TestPanel {public static void main(String[] args) {Frame frame new Frame(中秋节快乐); //新建一个窗体Panel panel new Panel(null); //面板frame.setLayout(null); //设置窗体的布局frame.setBounds(300,300,500,500);frame.setBackground(new Color(0,0,255)); //设置背景颜色panel.setBounds(50,50,300,300);panel.setBackground(new Color(0,255,0)); //设置背景颜色frame.add(panel);frame.setVisible(true);//监听事件监听关闭事件frame.addWindowListener(new WindowAdapter() {Overridepublic void windowClosing(WindowEvent e) {super.windowClosing(e);}});}
}用户登录之后才能进入主页用户注销后就不能进入主页了 用户登录之后向Sesison中放入用户的数据 进入主页的时候要判断用户是否已经登录要求在过滤器中实现 HttpServletRequest request (HttpServletRequest) req;
HttpServletResponse response (HttpServletResponse) resp;if (request.getSession().getAttribute(Constant.USER_SESSION)null){response.sendRedirect(/error.jsp);
}chain.doFilter(request,response);14、JDBC
什么是JDBC Java连接数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIAHvBFC-1677418895014)(JavaWeb.assets/ )]
需要jar包的支持
java.sqljavax.sqlmysql-conneter-java… 连接驱动必须要导入
实验环境搭建
CREATE TABLE users(id INT PRIMARY KEY,name VARCHAR(40),password VARCHAR(40),email VARCHAR(60),birthday DATE
);INSERT INTO users(id,name,password,email,birthday)
VALUES(1,张三,123456,zsqq.com,2000-01-01);
INSERT INTO users(id,name,password,email,birthday)
VALUES(2,李四,123456,lsqq.com,2000-01-01);
INSERT INTO users(id,name,password,email,birthday)
VALUES(3,王五,123456,wwqq.com,2000-01-01);SELECT * FROM users;
导入数据库依赖
!--mysql的驱动--
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version
/dependencyIDEA中连接数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owHKMrpN-1677418895015)(JavaWeb.assets/ )]
JDBC 固定步骤
加载驱动连接数据库,代表数据库向数据库发送SQL的对象Statement : CRUD编写SQL 根据业务不同的SQL执行SQL关闭连接
public class TestJdbc {public static void main(String[] args) throws ClassNotFoundException, SQLException {//配置信息//useUnicodetruecharacterEncodingutf-8 解决中文乱码String urljdbc:mysql://localhost:3306/jdbc?useUnicodetruecharacterEncodingutf-8;String username root;String password 123456;//1.加载驱动Class.forName(com.mysql.jdbc.Driver);//2.连接数据库,代表数据库Connection connection DriverManager.getConnection(url, username, password);//3.向数据库发送SQL的对象Statement,PreparedStatement : CRUDStatement statement connection.createStatement();//4.编写SQLString sql select * from users;//5.执行查询SQL返回一个 ResultSet 结果集ResultSet rs statement.executeQuery(sql);while (rs.next()){System.out.println(idrs.getObject(id));System.out.println(namers.getObject(name));System.out.println(passwordrs.getObject(password));System.out.println(emailrs.getObject(email));System.out.println(birthdayrs.getObject(birthday));}//6.关闭连接释放资源一定要做 先开后关rs.close();statement.close();connection.close();}
}
预编译SQL
public class TestJDBC2 {public static void main(String[] args) throws Exception {//配置信息//useUnicodetruecharacterEncodingutf-8 解决中文乱码String urljdbc:mysql://localhost:3306/jdbc?useUnicodetruecharacterEncodingutf-8;String username root;String password 123456;//1.加载驱动Class.forName(com.mysql.jdbc.Driver);//2.连接数据库,代表数据库Connection connection DriverManager.getConnection(url, username, password);//3.编写SQLString sql insert into users(id, name, password, email, birthday) values (?,?,?,?,?);;//4.预编译PreparedStatement preparedStatement connection.prepareStatement(sql);preparedStatement.setInt(1,2);//给第一个占位符 的值赋值为1preparedStatement.setString(2,狂神说Java);//给第二个占位符 的值赋值为狂神说JavapreparedStatement.setString(3,123456);//给第三个占位符 的值赋值为123456preparedStatement.setString(4,24736743qq.com);//给第四个占位符 的值赋值为1preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第五个占位符 的值赋值为new Date(new java.util.Date().getTime())//5.执行SQLint i preparedStatement.executeUpdate();if (i0){System.out.println(插入成功);}//6.关闭连接释放资源一定要做 先开后关preparedStatement.close();connection.close();}
}
事务
要么都成功要么都失败
ACID原则保证数据的安全。
开启事务
事务提交 commit()
事务回滚 rollback()
关闭事务转账
A:1000
B:1000A(900) --100-- B(1100) Junit单元测试
依赖
!--单元测试--
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version
/dependency简单使用
Test注解只有在方法上有效只要加了这个注解的方法就可以直接运行
Test
public void test(){System.out.println(Hello);
}[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oe1E6TZJ-1677418895015)(JavaWeb.assets/ )]
失败的时候是红色
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obK1VvNb-1677418895016)(JavaWeb.assets/ )]
搭建一个环境
CREATE TABLE account(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(40),money FLOAT
);INSERT INTO account(name,money) VALUES(A,1000);
INSERT INTO account(name,money) VALUES(B,1000);
INSERT INTO account(name,money) VALUES(C,1000);Testpublic void test() {//配置信息//useUnicodetruecharacterEncodingutf-8 解决中文乱码String urljdbc:mysql://localhost:3306/jdbc?useUnicodetruecharacterEncodingutf-8;String username root;String password 123456;Connection connection null;//1.加载驱动try {Class.forName(com.mysql.jdbc.Driver);//2.连接数据库,代表数据库connection DriverManager.getConnection(url, username, password);//3.通知数据库开启事务,false 开启connection.setAutoCommit(false);String sql update account set money money-100 where name A;connection.prepareStatement(sql).executeUpdate();//制造错误//int i 1/0;String sql2 update account set money money100 where name B;connection.prepareStatement(sql2).executeUpdate();connection.commit();//以上两条SQL都执行成功了就提交事务System.out.println(success);} catch (Exception e) {try {//如果出现异常就通知数据库回滚事务connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}