JavaBean实体类详解

Posted 生命是有光的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaBean实体类详解相关的知识,希望对你有一定的参考价值。

1、JavaBean

JavaBean就是实体类

JavaBean有特定的写法:

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

JavaBean一般用来和数据库的字段做映射

  • 数据库中的表对应java中的类
  • 表中的字段对应java类中的属性
  • 表中的行记录对应java创建的对象

例如:这是数据库的一张people表

idnameageaddress
1秦疆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"西安");
}

1.1、实体类的包名

对于JavaBean实体类的包名,我们有以下建立的方式:

  1. com.XXX.pojo
  2. com.XXX.entity
  3. com.XXX.dto
  4. com.XXX.vo

1.2、实体类

JavaBean实体类一般用来和数据库的字段做映射,例如,我们创建一个People类

public class People {
    private int id;
    private int age;
    private String address;
    // 无参构造
    public People() {
    }
    // 有参构造
    public People(int id, int age, String address) {
        this.id = id;
        this.age = age;
        this.address = address;
    }
    // get/set方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    // 重写 toString 方法
    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", age=" + age +
                ", address='" + address + '\\'' +
                '}';
    }
}
  • 如果我们只是单纯的创建一个类,那么这只能称之为一个People类,不能称为实体类。那如何才能称为实体类呢?

  • 我们需要在数据库中建立对应的People表

  • 实体类一般都是和数据库中的表结构一一对应

在这里插入图片描述

javabean.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
//  People people = new People();

//  people.setId();
//  people.setName();
//  people.setAge();
//  people.setAddress();

//  people.getId();
//  people.getName();
//  people.getAge();
//  people.getAddress();
%>

<jsp:useBean id="people" class="com.kuang.pojo.People" scope="page" />

<jsp:setProperty name="people" property="id" value="1" />
<jsp:setProperty name="people" property="name" value="李沁" />
<jsp:setProperty name="people" property="age" value="3" />
<jsp:setProperty name="people" property="address" value="西安" />

id<jsp:getProperty name="people" property="id"/>
姓名<jsp:getProperty name="people" property="name"/>
年龄<jsp:getProperty name="people" property="age"/>
地址<jsp:getProperty name="people" property="address"/>

</body>
</html>

这段代码的意思就是注释的代码的意思

  • jsp:userBean 相当于new People
  • jsp:setProperty 相当于 people.setXXX
  • jsp:getProperty 相当于 people.getXXX

在这里插入图片描述

2、MVC三层架构

  1. 什么是MVC?

    Model、View、Controller

    模型、视图、控制器

    模型:JavaBean实体类和数据库表中对应的字段

    视图:jsp页面

    控制器:servlet,负责跳转页面

Model

  • 业务处理:完成具体的业务操作(Service)
  • 数据持久层:数据库的增删改查(Dao)

View

  • 展示页面
  • 提供链接发起Servlet请求

Controller:(Servlet)

  • 接受用户的请求 ,拿到用户的请求参数

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

  • 控制视图的跳转

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

3、过滤器Filter

Filter:过滤器 ,当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能,常见的应用场景有:

  • 登录验证

  • 统一编码处理

  • 敏感字符过滤

在这里插入图片描述

3.1、步骤

  1. 导包
    • javax.servlet.jsp-api
    • servlet-api
    • jstl-api
    • standard
  <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
  1. 定义一个类,实现接口Filter

  2. 复写方法

  3. 在web.xml中配置拦截路径

3.2、Demo

编写一个字符编码过滤器,我们想要通过过滤器来解决中文乱码问题

ShowServlet.java

public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 这里没有配置编码,打印在网站上会乱码
        resp.getWriter().write("你好,世界!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
  • 在web.xml中注册servlet映射
<servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.kuang.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
</servlet-mapping>
  • 一个Servlet可以指定多个映射路径

开始编写字符编码过滤器

  1. 定义一个类,实现接口Filter,复写方法

CharacterEncodingFilter.java

// 字符编码过滤器
public class CharacterEncodingFilter implements Filter {
    // 初始化:web服务器启动,就已经初始化了,随时等待过滤对象出现!
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter初始化!");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // Chain:链
        // 1.过滤器中的所有代码,在过滤特定请求的时候都会执行
        // 2.必须要让所有过滤器继续同行 filterChain.doFilter(servletRequest,servletResponse)

        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        System.out.println("CharacterEncodingFilter执行前");
        filterChain.doFilter(servletRequest,servletResponse); // 让我们的请求继续走,如果不写,程序到这里就被拦截了
        System.out.println("CharacterEncodingFilter执行后");

    }

    // 销毁
    @Override
    public void destroy() {
        System.out.println("CharacterEncodingFilter销毁");
    }
}
  1. 在web.xml中配置拦截路径
    • 只要是/servlet下面的任何请求,都会经过这个过滤器
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
<!--        只要是/servlet下面的任何请求,都会经过这个过滤器    -->
    <url-pattern>/servlet/*</url-pattern>

</filter-mapping>
  • 测试访问

在这里插入图片描述

在这里插入图片描述

3.3、过滤器生命周期方法

  • init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
  • doFilter:每一次请求被拦截资源时,会执行。执行多次
  • destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

3.4、过滤器配置详解

拦截路径配置

  • 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  • 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  • 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  • 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

4、监听器Listener

然后调用init方法。只执行一次。用于加载资源

  • doFilter:每一次请求被拦截资源时,会执行。执行多次
  • destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

3.4、过滤器配置详解

拦截路径配置

  • 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  • 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  • 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  • 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

以上是关于JavaBean实体类详解的主要内容,如果未能解决你的问题,请参考以下文章

javabean和实体类的区别?

javabean为啥不能在实体类里写逻辑

Javaweb入门到实战过滤器拦截器jdbc详解

Javaweb入门到实战过滤器拦截器jdbc详解

Java 中 Map与JavaBean实体类之间的相互转化

015_数据建模时,JavaBean的实体类中怎样处理外键