一个简单的Javaweb小demo

前言

这篇博客是在看完了一篇黑马的文章之后突发奇想下来的。由于最近几天在学习框架的一些知识,对于javaweb中servlet有点忘记了,于是就有了这次的项目。看看自己对于Javaweb的三层架构还熟不熟悉。

任务

这次目的也是特别的简单,从数据库中把查询出来的信息,显示到浏览器上。

流程

1、搭建环境:

数据库使用的Mysql

导入依赖

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <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>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

由于项目较为简单,项目的环境差不多就完成了。当然有能力的同学可以把Mybatis整合进去,这样也并不麻烦。

2、编写操作数据库的工具包

  1. 首先在resouces目录下新建以的db.properties用来保存链接数据库的信息

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=gb2312&useSSl=true
    username=root
    password=123456
    
  2. 现在就可以进行数据类的编写了

    public class BaseDao{
    
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        static
        {
            //通过类加载器读取资源
            InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
    
            try {
                properties.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
        }
        //获得数据库的链接
        public static Connection getConnection(){
            Connection connection = null;
            try {
                Class.forName(driver);
                connection = DriverManager.getConnection(url,username,password);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return connection;
        }
        //编写查询公共类
        public static ResultSet execute(Connection connection ,PreparedStatement preparedStatement, ResultSet resultSet,String sql,Object[] params) throws SQLException {
            preparedStatement = connection.prepareStatement(sql);
    
            for(int i = 0;i < params.length;i++)
            {
                preparedStatement.setObject(i+1,params[i]);
            }
    
            resultSet = preparedStatement.executeQuery();
            return resultSet;
        }
    
    
        //释放资源
    
        public static boolean closeResource(Connection connection,PreparedStatement preparedStatement, ResultSet resultSet )
        {
            boolean flag = true;
            if(resultSet != null)
            {
                try {
                    resultSet.close();
                    resultSet = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
            if(preparedStatement != null)
            {
                try {
                    preparedStatement.close();
                    preparedStatement = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
            if(connection != null)
            {
                try {
                    connection.close();
                    connection = null;
                } catch (SQLException e) {
                    e.printStackTrace();
                    flag = false;
                }
            }
            return flag;
    
        }
    }
    
  3. 准备工作都干完了,现在开始正题,首先编写pojo实体类

    public class User {
        private int id;
        private String name;
        private String password;
    
        public User()
        {
        }
    
        public User(int id, String name, String password)
        {
            this.id = id;
            this.name = name;
            this.password = password;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
  4. 编写dao层下的接口,并实现接口

    public interface UserDao {
    
        public User selectUser (Connection connection) throws Exception;
    }
    
    public class UserDaoImpl implements UserDao{
        @Override
        public User selectUser(Connection connection) throws Exception {
    
            PreparedStatement pstat = null;
            ResultSet rs = null;
            User user = null;
            if(connection != null)
            {
                String id = "1";
                String sql = "select * from user where id = ?";
                Object[] params = {id};
                rs = BaseDao.execute(connection, pstat, rs, sql, params);
                while(rs.next())
                {
                    user = new User();
                    user.setId(rs.getInt("id"));
                    user.setName(rs.getString("name"));
                    user.setPassword(rs.getString("password"));
                }
                BaseDao.closeResource(null,pstat,rs);
            }
            return user;
        }
    }
    
  5. 进行业务层的编写

    public interface UserService {
        public User getUser();
    }
    
    public class UserServiceImpl implements UserService{
    
        private UserDao userDao;
    
        public UserServiceImpl() {
            this.userDao = new UserDaoImpl();
        }
    
        @Override
        public User getUser() {
    
            Connection connection = null;
            User user = null;
            try {
    
                connection = BaseDao.getConnection();
                user = userDao.selectUser(connection);
    
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                BaseDao.closeResource(connection,null,null);
            }
    
            return user;
        }
    }
    
  6. 最后是servlet层的代码实现

    public class UserServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            UserService userService = new UserServiceImpl();
            User user = null;
            user = userService.getUser();
            request.setAttribute("user",user);
            request.getRequestDispatcher("/index.jsp").forward(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  7. 注册servlet

     <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.feng.servlet.user.UserServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <url-pattern>/user</url-pattern>
      </servlet-mapping>
    
    

从代码可以知道最后是重定向到index.jsp中,因此在index.jsp中,我们需要取出数据,在这里我们采用的是EL表达式

用户id:${user.id}<br/>
用户名:${user.name }<br/>
密 码:${user.password }<br/>

最后附上一张成功的截图

image-20210115184957341

Bug

这个项目虽然简单,但是也会冒出来一两个bug

  1. 在编写数据库工具类的时候,由于数据库工具类的编写错误,造成了500的报错。
  2. 可以看到的是,在这里没有出现乱码的问题,有可能大家写的时候会出先乱码,大家需要去手动的设置一下编码格式,或者写一个拦截器。
  3. 至于还有其他的一些bug那就暂时没有想到了,如果大家在练习的时候,出现了一些问题和bug,都可以贴出来,不经历bug怎么才能进步呢?

好吧,第一篇博客就写到这里了,也不知道对大家来说有用没用。对我来说,对于这块的知识重新梳理了一下。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb demo一个简单JavaWeb 应用程序示例。它主要用于展示如何创建一个简单的动态网站,并介绍了一些常用的 JavaWeb 技术。 这个 demo 可能包含以下几个方面的内容: 1. 前端页面:demo 可能包含多个静态 HTML 页面,通过 CSS 和 JavaScript 来实现页面的样式和交互效果。这些页面可能包含表单、按钮、导航栏等常见的网页组件。 2. 后端处理:demo 可能使用 Java Servlet 来处理前端页面的请求。Servlet 是 JavaWeb 开发中的一种常用技术,通过它可以接收和处理 HTTP 请求,并生成对应的响应。在 demo 中,Servlet 可能会读取表单数据、调用业务逻辑处理模块,并将处理结果返回给前端页面。 3. 数据库连接:demo 可能会使用 Java 中的数据库连接技术,如 JDBC,来与后端数据库进行交互。通过 JDBC,demo 可能会连接到数据库、执行 SQL 查询和更新操作,以及处理数据库返回的结果。 4. 业务逻辑:demo 可能会展示一些简单的业务逻辑,如用户注册、登录等。在这些功能中,demo 可能会将用户的输入数据存储到数据库中,或者验证用户的登录信息。 通过这个示例,开发者可以了解到如何搭建一个简单JavaWeb 应用程序,并了解到如何使用常见的 JavaWeb 技术来实现各种功能。这个 demo 还可以作为 JavaWeb 开发的一个入门教程,帮助开发者迅速上手和理解如何构建一个简单的动态网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值