Java学习的第四十五天:

javaBean:

实体类:

javaBean有特定的写法:

  • 必须有一个无惨构造

  • 属性必须私有化

  • 必须有对应的get/set方法

一般用来和数据库的字段做映射。ORM;

ORM:对象关系映射:

  • 表-》 类

  • 字段-》属性:

  • 行记

10、MVC三层架构:

什么是MVC:model view Controller 模型,视图:

10.1、早些年:

image-20210729104347073

image-20210729104632508

image-20210729155215487

10.2、mvc三层架构:

MOdel

  • 业务处理:业务逻辑(Service)

  • 数据持久层:CRUD(Dao)

View

  • 展示数据

  • 提供链接发起的Servlet请求(a,form,

Controller

  • 接收用户的请求(req:请求参数,Session信息。。。)

  • 交给业务层处理对应的代码

  • 控制试图的跳转

登陆:---》  接收用户的登陆请求-----》处理用户的请求(获取用户登陆的参数,username,passwored--》交给业务层处理登陆业务(判断用户用户名密码是否正确:事务---》Dao层查询用户名和密码是否正确--》》数据库

 

11、Filter

Filter:过滤器,用来过滤网站的数据;

  • 处理中文乱码。

  • 登陆验证。

image-20210729160423579

 

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 {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//       获取前端参数:
       String name = req.getParameter("username");
       System.out.println(name);
       System.out.println("123");

       if (name.equals("admin")){
           System.out.println("1");
           req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
           resp.sendRedirect("/sys/success.jsp");
      }else {
           resp.sendRedirect("/error.jsp");
      }

//       if (username.equals("admin")){ //登陆成功:
//           System.out.println("11");
//           req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
//           resp.sendRedirect("/sys/success.jsp");
//
//       }else{
//           System.out.println("22");
//       resp.sendRedirect("/error.jsp");
//       }
  }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doGet(req, resp);
  }
}



//登陆页面的jsp代码:
<form action="/servlet/login" method="post">

   <input type="text" name="username">
   <input type="submit">
</form>

   //登陆页面的 web配置代码:
<servlet>
       <servlet-name>LoginServlet</servlet-name>
       <servlet-class>com.xiao.servlet.LoginServlet</servlet-class>
   </servlet>
   <servlet-mapping>
       <servlet-name>LoginServlet</servlet-name>
       <url-pattern>/servlet/login</url-pattern>
   </servlet-mapping>

2、里面的注销的功能:

public class LoginoutServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       Object user_session = req.getSession().getAttribute("USER_SESSION");
//注销功能,当点击里面的注销以后,就会根据你们是否有session,如果session不等于空的话,就将session直接清除。
//清除以后,在使用重定向功能,进入到主页这个页面。
       if(user_session!=null){
           req.getSession().removeAttribute("USER_SESSION");
           resp.sendRedirect("/Login.jsp");
      }else {
           resp.sendRedirect("/Login.jsp");
      }
  }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doGet(req, resp);
  }
   
   
   //注销功能:
   <p><a href="/servlet/loginout">注销!</a></p>
       
       
       

 

 

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");

}



}
posted @ 2021-08-04 22:42  九块钱的代码  阅读(227)  评论(0)    收藏  举报