java web万能模板(附带防微博源码)

文章目录

  • java EE 项目万能模板套用
    • 创建一个java EE项目
        • 1.点击java ee
        • 2.点击finish
        • 3.一个Java ee项目创建完毕
        • 4.点击运行
        • 5.运行结果
    • 万能模板连接数据库
        • 1.在pom.xml文件导入数据库连接所需要的依赖
        • 2.进行导入
        • 3. 导入以后刷新Maven
        • 4.找到 ==resources== 文件。
        • 5.在==resources==的文件路径下新建 **jdbc.properties**
        • 6.新建**jdbc.properties**
        • 7.在==jdbc.properties==中添加万能模板
        • 8. 创建一个Util包
        • 9.在Util包里面创建一个DBUtil类
    • 万能模板登录界面实现
        • 1.点击 ==web.xml==文件
        • 2.删除原有的index.jsp页面
        • 2.新建login.jsp页面
        • 3.美化login.jsp页面
            • 创建images文件,用户储存图片。
            • 美化代码
            • 点击运行,运行结果如下
        • 4.处理login.jsp页面的登录逻辑
        • 5.login.jsp的后端代码
            • 删除原有的HelloServlet类。
            • 创建一个servlet包.
            • 在servlet包内创建一个 LoginServlet.java类

java EE 项目万能模板套用

  如果只需要java web源码,直接点击下方链接就好,
防微博源码链接 http://t.csdnimg.cn/uAZgs

创建一个java EE项目

1.点击java ee

在这里插入图片描述

2.点击finish

在这里插入图片描述

3.一个Java ee项目创建完毕

在这里插入图片描述

4.点击运行

在这里插入图片描述

5.运行结果

在这里插入图片描述
给予此,我们的一个成功的Java web项目创建完成。

万能模板连接数据库

1.在pom.xml文件导入数据库连接所需要的依赖

在这里插入图片描述

2.进行导入

在这里插入图片描述

依赖导入

<!--数据库导入-->
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.25</version>
     <exclusions>
         <exclusion>
             <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java</artifactId>
         </exclusion>
     </exclusions>
 </dependency>
3. 导入以后刷新Maven

点击Maven。
在这里插入图片描述

点击刷新按钮。如果在点击刷新后依赖没有导入,多刷新几次,或重启进行刷新。
在这里插入图片描述
在这里,依赖导入成功。

4.找到 resources 文件。

在这里插入图片描述

5.在resources的文件路径下新建 jdbc.properties

在这里插入图片描述

6.新建jdbc.properties

在这里插入图片描述

7.在jdbc.properties中添加万能模板

在这里插入图片描述

请进行相应的替换。

jdbcUrl = jdbc:mysql://localhost:3360/你需要连接的数据库名称
userName = 你的数据库用户名
password = 你的数据库密码

给予此,数据库jdbc的连接到此结束,请继续,数据库的连接还没结束

8. 创建一个Util包

在这里插入图片描述

在这里插入图片描述

9.在Util包里面创建一个DBUtil类

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package com.example.MicroBlog.Util;

import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtil {

    private static String CONN_URI= null;

    static {
        try {
        	//加载jdbc配置文件
            Properties p = new Properties();
            InputStream configStream= DBUtil.class.getResourceAsStream("/jdbc.properties");
            p.load(configStream);
            String jdbcUrl = (String)p.get("jdbcUrl");
            String userName = (String)p.get("userName");
            String password = (String)p.get("password");
            //构建数据库连接URL
            CONN_URI = String.format("%s?user=%s&password=%s&useUnicode=true&characterEncoding=utf8", jdbcUrl, userName, password);
            //手动初始化
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取链接对象
    public static Connection getConnection() throws SQLException {
        return  DriverManager.getConnection(CONN_URI);
    }

	//处理SQLException
    public static void handleSQlException(SQLException ex) {
        System.out.println("SQLException: " + ex.getMessage());
        System.out.println("SQLState: " + ex.getSQLState());
        System.out.println("VendorError: " + ex.getErrorCode());
    }

	//关闭资源
    public static void close(ResultSet rs, Statement st, Connection con) {
        try {
            if (rs != null) {
                rs.close();
            }

            if (st != null) {
                st.close();
            }

            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            handleSQlException(e);
        }
    }
}

到这里我们的数据库连接完毕!!!

万能模板登录界面实现

1.点击 web.xml文件

进行登录界面配置。

在这里插入图片描述

在这里插入图片描述

加入这一句代码后,代码的运行起始页面为login.jsp页面

<!--起始运行-->
<welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
</welcome-file-list>
2.删除原有的index.jsp页面

点击delete。
在这里插入图片描述

2.新建login.jsp页面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.美化login.jsp页面
创建images文件,用户储存图片。

在这里插入图片描述

在这里插入图片描述

在images中放入图片。

美化代码
<%--
  Created by IntelliJ IDEA.
  User: Junswl
  Date: 2023/11/23
  Time: 16:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>MicroBlog登录</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-image: url("./images/background.jpg"); /* 设置背景图片的URL,要确保images中有图片名为background.jpg的图片*/
            background-size: cover; /* 调整背景图片大小以覆盖整个容器 */
            background-position: center; /* 设置背景图片的位置为居中 */
        }

        .container {
            max-width: 400px;
            margin: 100px auto;
            padding: 20px;
            background-color: rgba(255, 255, 255, 0.8); /* 调整背景颜色透明度 */
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        h2 {
            text-align: center;
            margin-bottom: 20px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-weight: bold;
            margin-bottom: 5px;
        }

        input[type="text"],
        input[type="password"] {
            width: 100%;
            padding: 10px;
            border-radius: 3px;
            border: 1px solid #ccc;
        }

        input[type="submit"] {
            width: 100%;
            padding: 10px;
            background-color: #337ab7;
            color: #fff;
            border: none;
            border-radius: 3px;
            cursor: pointer;
        }

        .message {
            margin-top: 10px;
            text-align: center;
            color: red;
        }
    </style>
</head>
<%
    Object obj=request.getAttribute("errmsg");
    String msg="";
    if(obj!=null){
        msg=(String) obj;
    }
%>
<body>
<div class="container">
    <h2>微博登录</h2>
    <form action="login" method="post">
        <div class="form-group">
            <label for="username">用户名:</label>
            <input type="text" id="username" name="username" required>
        </div>
        <div class="form-group">
            <label for="password">密码:</label>
            <input type="password" id="password" name="password" required>
        </div>
        <div style="color: red"><%=msg%></div>
        <input type="submit" value="登录">
        <p class="message">还没有账号?<a href="register.jsp">立即注册</a></p>
    </form>
</div>
</body>
</html>
点击运行,运行结果如下

在这里插入图片描述

接下来我们处理后端。

4.处理login.jsp页面的登录逻辑

  在form表单中,注意action和method。在前端填写好用户名和密码后,点击提交的一瞬间,提交的方法是post方法,提交的路径是login路径。

在这里插入图片描述

5.login.jsp的后端代码
删除原有的HelloServlet类。

在这里插入图片描述

创建一个servlet包.

在这里插入图片描述

在servlet包内创建一个 LoginServlet.java类

在这里插入图片描述
创建完毕。

在这里插入图片描述

让 LoginServlet.java类继承HttpServlet类。

在这里插入图片描述

和前端action里面的路径进行向匹配。

在这里插入图片描述

重写doPost方法。这里不需要一个字母一个字母手敲,只需要写入doPost 后使用快捷方式即可。

在这里插入图片描述

接下来处理真正处理后端逻辑。

使用上面的同理,创建一个dao包,和一个po包。

在这里插入图片描述

在po里面存储用户的属性。(这里需要替换成自己具体业务中的属性)。

在这里插入图片描述

package com.example.mod.po;

public class User {
    private int userId;
    private String username;
    private String password;
    private String email;
    private String avatar;
    private String createTime;

    public User() {
    }

    public User(int userId, String username, String password, String email, String avatar, String createTime) {
        this.userId = userId;
        this.username = username;
        this.password = password;
        this.email = email;
        this.avatar = avatar;
        this.createTime = createTime;
    }

    public User(String username, String password, String email, String avatar, String createTime) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.avatar = avatar;
        this.createTime = createTime;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", avatar='" + avatar + '\'' +
                ", createTime='" + createTime + '\'' +
                '}';
    }
}

dao包内,处理数据库方面的逻辑。

再次回到LoginServlet类。

获取前端表单中的数据。

在这里插入图片描述

既然我们已经获取到了数据,那是不是就要和数据库中的数据进行比对了呢?验证数据的正确性了。记下来我们来验证数据的正确性,以此来判断登录是否会成功。

dao包里面进行这一步,创建一个userDao类。

在这里插入图片描述

实现一个基本的数据库业务处理。

package com.example.mod.dao;

import com.example.mod.Util.DBUtil;
import com.example.mod.po.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class userDao {
    //传入userName和password进行登录验证
    public User GetUser(String userName, String password){
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;
        User user = null;
        try{
            con = DBUtil.getConnection();
        }catch (SQLException e){
            DBUtil.handleSQLException(e);
        }finally {
            DBUtil.close(rs, stm,con);
        }
        return user;
    }
}

在这里插入图片描述

继续完善业务逻辑。

package com.example.mod.dao;

import com.example.mod.Util.DBUtil;
import com.example.mod.po.User;

import java.sql.*;

public class userDao {
    //传入userName和password进行登录验证
    public User GetUser(String userName, String password){
        Connection con = null;
        PreparedStatement stm = null;
        ResultSet rs = null;
        User user = null;
        try{
            //获取链接对象
            con = DBUtil.getConnection();
            //在user表中找userName和 password
            String sql = "select * from user where username=? and password=?";
            stm = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            stm.setString(1, userName);
            stm.setString(2, password);

            rs = stm.executeQuery();
            //判断rs对象是否有下一条记录,如果有,就说明查询到了匹配的用户记录。
            if (rs.next()) {
                user = new User();
                user.setUserId(rs.getInt("user_id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                user.setEmail(rs.getString("email"));
                user.setAvatar(rs.getString("avatar"));
                user.setCreateTime(rs.getString("create_time"));
            }
        }catch (SQLException e){
            DBUtil.handleSQLException(e);
        }finally {
            DBUtil.close(rs, stm,con);
        }
        return user;
    }
}

在这里插入图片描述
现在进入LoginServlet 完善最后的业务。

@WebServlet(value = "/login",initParams = {@WebInitParam(name="fileEncoding",value = "UTF-8")})
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID=1L;

    private StxUserDao userDao = new StxUserDao();

    @Override
    public void init() throws ServletException {
        super.init();
    }

    @Override
    public void destroy() {
        super.destroy();
    }


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

        req.setCharacterEncoding("utf-8");
        //1.获取数据
        String userName = req.getParameter("username");
        String password = req.getParameter("password");

        //根据用户名和密码查询数据库
        boolean success=false;

        if(userName!=null && password!=null){
            User user = userDao.GetUser(userName, password);
            if(user!=null){
                //将相关的用户信息放到session里面
                HttpSession session = req.getSession();
                //session.setAttribute("userName",userName);
                session.setAttribute(Constants.UserKey, user);
                session.setMaxInactiveInterval(600);

                //跳转到主页
                resp.sendRedirect("home.jsp");
                success=true;
            }
        }
        if(!success){
            req.setAttribute("errmsg","登录失败");
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }
    }
}

到此我们的一个登录业务实现完毕!!!

在这里插入图片描述

对你有帮助的话,点个关注吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/328542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

​​社交媒体与新闻:Facebook在信息传播中的作用

社交媒体已经成为我们获取和传播新闻的主要渠道之一&#xff0c;而Facebook作为社交媒体的巨头&#xff0c;在信息传播中扮演着举足轻重的角色。本文将深入探讨社交媒体对新闻传播的影响&#xff0c;聚焦于Facebook在这一领域的独特作用&#xff0c;以及这种作用对我们的新闻体…

得物云原生容器技术探索与落地实践

一、前言 得物 App 作为互联网行业的后起之秀&#xff0c;在快速的业务发展过程中基础设施规模不断增长&#xff0c;继而对效率和成本的关注度也越来越高。我们在云原生技术上的推进历程如图所示&#xff0c;整体上节奏还是比较快的。 从 2021 年 8 月开始&#xff0c;我们以提…

Mr. Cappuccino的第69杯咖啡——Oracle之存储过程

Oracle之存储过程 准备数据PLSQL编程概念程序结构运行程序在DataGrip中运行DataGrip设置控制台输出打印内容 在sqlplus中运行sqlplus设置控制台输出打印内容 变量普通变量引用型变量记录型变量 流程控制条件分支循环 游标概念语法游标的属性创建与使用带参数的游标 存储过程概念…

【数据结构】——期末复习题题库(11)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

飞凌嵌入式这2款核心板已完成“矿鸿OS”适配,矿企伙伴看过来

近日&#xff0c;飞凌嵌入式FETA40i-C和FETMX6ULL-S两款核心板成功完成“矿鸿OS”的系统适配&#xff0c;嵌入式核心板与“矿鸿”操作系统的结合与应用&#xff0c;将进一步推动煤矿行业的数字化、智能化进程。 矿鸿OS&#xff08;矿山鸿蒙系统&#xff09;是华为和国家能源集团…

全自动网页制作系统流星全自动网页生成系统重构版输入网页信息即可制作

源码优点: 所有模板经过精心审核与修改&#xff0c;完美兼容小屏手机大屏手机&#xff0c;以及各种平板端、电脑端和360浏览器、谷歌浏览器、火狐浏览器等等各大浏览器显示。 免费制作 为用户使用方便考虑&#xff0c;全自动网页制作系统无需繁琐的注册与登入&#xff0c;直接…

Go后端开发 -- 面向对象特征:结构体 继承 多态 interface

Go后端开发 – 面向对象特征&#xff1a;结构体 && 继承 && 多态 && interface 文章目录 Go后端开发 -- 面向对象特征&#xff1a;结构体 && 继承 && 多态 && interface一、Go的结构体1.结构体的声明和定义2.结构体传参 二、将…

RXJS中Subject, BehaviorSubject, ReplaySubject, AsyncSubject的区别?

在RxJS&#xff08;Reactive Extensions for JavaScript&#xff09;中&#xff0c;Subject、BehaviorSubject、ReplaySubject和AsyncSubject都是Observable的变体&#xff0c;它们用于处理观察者模式中的不同场景。以下是它们之间的主要区别&#xff1a; 1、Subject: 是一种特…

AGI是否应该具备基础的常识模型

通用人工智能&#xff08;AGI&#xff09;是指能够理解或学习任何人类或其他动物能够做的智力任务的人工智能系统&#xff0c;它是人工智能领域的终极目标之一。 AGI 的研究范式是指在 AGI 领域中&#xff0c;研究者们所遵循的一些基本的理念、方法和目标。 AGI 是否应该存在基…

使用 Picocli 开发 Java 命令行,5 分钟上手

大家好&#xff0c;我是鱼皮&#xff0c;对不会前端的同学来说&#xff0c;开发 命令行工具 是一种不错的展示系统功能的方式。在 Java 中开发命令行工具也很简单&#xff0c;使用框架&#xff0c;几分钟就能学会啦~ Picocli 入门 Picocli 是 Java 中个人认为功能最完善、最简单…

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver&#xff0c;是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢&#xff1f; 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…

Docker网络配置

网络相关 子网掩码 互联网是由许多小型网络构成的&#xff0c;每个网络上都有许多主机&#xff0c;这样便构成了一个有层次的结构。 IP 地址在设计时就考虑到地址分配的层次特点&#xff0c;将每个 IP地址都分割成网络号和主机号两部分&#xff0c;以便于IP 地址的寻址操作。…

从0到1:实验室设备借用小程序开发笔记

概论 实验室设备借用小程序&#xff0c;适合各大高校&#xff0c;科技园区&#xff0c;大型企业集团的实验室设备借用流程, 通过数字化的手段进一步提升相关单位设备保障水平&#xff0c;规范实验室和设备管理&#xff0c;用户通过手机小程序扫描设备的二维码&#xff0c;可以…

YOLOv5改进系列(26)——添加RFAConv注意力卷积(感受野注意力卷积运算)

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 YOLOv5改进系列&…

Redis在Windows10中安装和配置

1.首先去下载Redis 这里不给出下载地址&#xff0c;自己可以用去搜索一下地址 下载 下载完成后解压到D盘redis下&#xff0c;本人用的是3.2.100 D:\Redis\Redis-x64-3.2.100 2.解压完成后需要设置环境变量&#xff0c;这里新建一个系统环境变量中path 中添加一个文件所…

如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作

详情点击链接&#xff1a;如何用GPT 运行python&#xff1f;GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型…

计算机导论07-算法和数据结构

文章目录 算法基础算法及其特性算法的概念算法与程序算法表示 算法的描述自然语言流程图盒图&#xff08;N-S图&#xff09;伪代码程序设计语言 算法评价算法的衡量标准算法的规模时间复杂度空间复杂度 数据结构数据结构的概念数据的逻辑结构数据的存储结构数据的基本操作 常用…

6.3.4录制屏幕

6.3.4录制屏幕 除了可以进行声音录制外&#xff0c;Camtasia4还允许录制屏幕上的各种操作&#xff0c;并且在录制视频的同时还可以混入讲解&#xff0c;这在制作视频教程时很有用处。 1&#xff0e;在Camtasia Studio主程序中&#xff0c;单击【工具】|【Camtasia录像器】&am…

抖店商家对接带货主播建议,远离头部主播保平安,附沟通话术模板

我是王路飞。 抖店出单玩法中&#xff0c;商品卡属于靠天吃饭&#xff0c;有一定的风险&#xff0c;所以不建议新手选择。 我们自己包括学生做店&#xff0c;一直都是以达人模式为主的&#xff0c;主要是可控&#xff08;风险可控&#xff0c;数据可控&#xff0c;流程可控&a…

Qt第二周周二作业

代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void paintEvent(…