Java学习的第四十五天:
实体类:
javaBean有特定的写法:
-
必须有一个无惨构造
-
属性必须私有化
-
必须有对应的get/set方法
ORM:对象关系映射:
-
表-》 类
-
字段-》属性:
-
行记
10、MVC三层架构:
什么是MVC:model view Controller 模型,视图:
10.1、早些年:
10.2、mvc三层架构:
MOdel
-
业务处理:业务逻辑(Service)
-
数据持久层:CRUD(Dao)
View
-
展示数据
-
提供链接发起的Servlet请求(a,form,
Controller
-
接收用户的请求(req:请求参数,Session信息。。。)
-
交给业务层处理对应的代码
-
控制试图的跳转
登陆:---》 接收用户的登陆请求-----》处理用户的请求(获取用户登陆的参数,username,passwored--》交给业务层处理登陆业务(判断用户用户名密码是否正确:事务---》Dao层查询用户名和密码是否正确--》》数据库
11、Filter
Filter:过滤器,用来过滤网站的数据;
-
处理中文乱码。
-
登陆验证。
fiter开发步骤:
1、导包:
2、编写过滤器:
public class CharacterEncodingFilter implements Filter {
// 初始化:
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("数据进入到了初始化的这个代码页面了");
}
// chain 链:
// 1、过滤中所有的代码,在过滤特定的请求的时候都会执行。
// 2、必须要让过滤器继续通行。
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("执行之前:");
filterChain.doFilter(servletRequest,servletResponse); //这个的意思就是让我们的请求继续走,如果不写的话,程序到这里就会被拦截。
System.out.println("执行之后:");
}
// 销毁
public void destroy() {
System.out.println("数据进入到了销毁的这里了");
}
}
3、在web.xml中配置filter
<servlet>
<servlet-name>show</servlet-name>
<servlet-class>com.xiao.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>show</servlet-name>
<url-pattern>/rr</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>show</servlet-name>
<url-pattern>/servlet/tt</url-pattern>
</servlet-mapping>
<!-- -->
<filter>
<filter-name>cf</filter-name>
<filter-class>com.xiao.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cf</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
</web-app>
12、监听器:
实现一个监听器的接口:(有N种)
13、过滤器,监听器的常见使用:
1、实现一个登陆,登陆成功进入主页面,密码错误,进入失败页面。
2、在没有登陆的时候。是不能进入到主页面的,只有登陆以后就可以了,在登陆成功的页面,有注销的功能,注销以后,就直接退出了。
1、下面的这个代码的意思就是获得前端传过来的数据,然后在进行判断,判断过后,根据判断的时候,密码的正确已经错误,到达不同的页面去。
public class LoginServlet extends HttpServlet {
2、里面的注销的功能:
public class LoginoutServlet extends HttpServlet {
3、拦截器:
最简单的一种方法就是在jsp里面写拦截器:
<%
Object userSession = request.getSession().getAttribute("USER_SESSION");
if(userSession==null){
response.sendRedirect("/Login.jsp");
}
%>
其次就是:
package com.xiao.listener;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SysFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 过滤器功能!:
// 这里面也是一样的,就是先去获取session的值,如果session为空,那么就直接被拦截,返回到错误的页面去。
HttpServletRequest servletRequest1 = (HttpServletRequest) servletRequest;
HttpServletResponse servletResponse1 = (HttpServletResponse) servletResponse;
if(servletRequest1.getSession().getAttribute("USER_SESSION")==null){
servletResponse1.sendRedirect("/error.jsp");
}
filterChain.doFilter(servletRequest,servletResponse);
}
public void destroy() {
}
}
14、JDBC:
jdbc固定步骤:
1、加载驱动。
2、链接数据库,代表数据库。
3、向数据库发送sql对象statement:CRUD。
4、编写sql;(根据业务不同的sql)
5、执行sql
6、关闭链接。
// 受影响的行数;增删改都用 executeUpdate即可。
String sql="delete from users where id=2";
int i = statement.executeUpdate(sql);
package com.xiao.test;
import javafx.scene.chart.PieChart;
import java.sql.*;
public class TestJdbc2 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url="jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=true";
String name="root";
String password="522636";
// 加载数据库的驱动。
Class.forName("com.mysql.cj.jdbc.Driver");
// 链接数据库:
Connection connection = DriverManager.getConnection(url, name, password);
// 编写sql:
String sql="insert into users (id, `name`, password, email, birthday) value (?,?,?,?,?)";
//向数据库发送操作的对象:
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,10); //给第一个占位符,赋值为1.
preparedStatement.setString(2,"10"); //给第一个占位符,赋值为1.
preparedStatement.setString(3,"10"); //给第一个占位符,赋值为1.
preparedStatement.setString(4,"10"); //给第一个占位符,赋值为1.
int i = preparedStatement.executeUpdate(sql);
if(i>0){
System.out.println("插入成功。");
}else {
System.out.println("插入失败。");
}
preparedStatement.close();
connection.close();
}
}
事务:
要么都成功,要么都失败:
开启事务。
事务提交
事务回滚
关闭事务
装账:
A 1000
B 1000
junit单元测试
注入依赖:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency
简单的使用:
public class TestJdbc3 {
@Test
public void test(){
System.out.println("123");
}
}