html+css+JavaScript+json+servlet的社区系统(手把手教学)

目录

课前导读:

一、系统前期准备

二、前端代码的编写

三、登陆页面简介

四、注册页面

五、社区列表页

六、社区详情页

七、社区发帖页

八、注销

九、访问链接

登陆页面http://175.178.20.77:8080/java106_blog_system/login.html

总结:


课前导读:

你学完一篇,你就多会一项技能,多多少少对你还是有点帮助的不是吗?~~~

本章主要通过前端html搭建基础框架,css进行页面的渲染和布局,通过from表单和JavaScript和后端发送请求得到响应,后端通过servlet对得到的请求进行处理和写回响应给前端,通过json格式字符串化对象进行网络的传输,实现前后端交互的社区系统通信。


一、系统前期准备

1、创建maven项目

 2、导入项目所需要的pom依赖

    <dependencies>
<!--        servlet依赖-->
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

<!--        jackson依赖-->
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.2</version>
        </dependency>

<!--        jdbc连接依赖-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

    </dependencies>
<!--    打包依赖-->
    <packaging>war</packaging>
    <build>
        <finalName>java106_blog_system</finalName>
    </build>

 3、数据库表的创建 

4、文章对象和用户对象的创建(与数据库创建的字段列表一一相对)

5、通过jdbc进行Java与数据库的连接(用静态方法封装便于后续调用)

package model;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

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

public class DBUtil {
    private static DataSource dataSource=new MysqlDataSource();
    static {
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java106_blog_system?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
    }
    public static Connection getconnection() throws SQLException {
        return dataSource.getConnection();
    }
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

6、针对各种功能创建对应的Java与数据库的操作

文章对象中:

  • 新增一篇文章
  • 根据文章id来进行指定文章的查询(在文章详情页中)
  • 查询数据库中的所有文章内容(文章列表页中)
  • 删除指定文章(通过文章id)

用户对象中:

  • 根据用户id来查询用户信息(登陆页面)
  • 根据用户名来查询用户信息(登陆页面)
  • 添加用户信息(注册页面)

二、前端代码的编写

1、根据html、css、JavaScript不同代码编写进行分包分类

 2、针对登陆页面进行举例

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登陆页面</title>
    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/login.css">
</head>
<body>
    <!-- 贯穿整个页面的容器 -->
    <div class="login-container">
        <!-- 垂直水平居中的对话框 -->
        <div class="login-dialog">
            <form action="login" method="post">
                <h1>X社区系统登录</h1>
                <div class="row">
                    <span>用户名</span>
                    <input type="text" id="username" placeholder="手机号/邮箱" name="username">
                </div>
                <div class="row">
                    <span>密码</span>
                    <input type="password" id="password" name="password">
                </div>
                <div class="row">
                    <a href="regist.html">没有密码?点击注册</a>
                </div>
                <div class="row">
                    <input type="submit" id="submit" value="登录">
                </div>
            </form>
        </div>
    </div>
</body>
</html>

css

/* 这个文件专门放登陆页面的样式 */

.login-container{
    width: 100%;
    /* 用整个高度-导航栏高度 */
    height: calc(100% - 50px);
    /* 让对话框垂直水平居中,使用弹性布局 */
    display: flex;
    justify-content: center;
    align-items: center;
}

.login-dialog{
    width: 400px;
    height: 400px;
    background-color: rgba(255,255,255,0.8);
    border-radius: 10px;
}

.login-dialog h1{
    text-align: center;
    padding: 50px 0;
}

.login-dialog .row{
    height: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 20px;
}

.login-dialog .row span{
    width: 100px;
}

#username, #password{
    width: 200px;
    height: 40px;
    border-radius: 5px;
    border: none;
    font-size: 15px;
    padding: 5px;
}

#submit{
    width: 300px;
    height: 40px;
    color: white;
    background-color: orange;
    border: none;
    border-radius: 10px;
}

#submit:active{
    background-color: #666;
}
  • 通过div标签进行整个页面的选择,再通过css类选择器和id选择器针对html中的内容进行渲染
  • 通过弹性布局进行登陆页面的整体布局
  • 通过form表单进行输入框内容的写入和提交,实现前后端交互

                由于前端代码过多,所以博主这里只能用登陆页面进行举例。


三、登陆页面简介

本页面主要用于用户进行登陆X社区进行操作的登陆页面。

基本步骤:

1、用户通过在此页面输入用户名和密码,点击登陆后,此页面就会把输入框中的内容通过http请求向后端名为login的servlet发送post请求,通过键值对的形式传输输入框中的内容传输到后端进行处理。 

2、后端通过HttpServlet中的方法创建dopost方法接受前端发送的请求

  • 通过设置请求格式防止中文乱码导致后续判断失误
  • 通过getParameter方法解析通过键找到值的方式解析键值对,将值转为String类型的字符串进行存储。
  • 通过对用户名和密码是否为空的判定,如果为空则把登陆失败的响应通过resp方法写回前端页面对用户进行提醒。

  • 将用户名和密码通过userDao中的方法通过username查找user对象,将用户名和密码与数据库中的数据进行比对。
  • 如果数据不匹配就返回提示到页面
  • 如果数据匹配我们就通过session对象创建会话信息,通过用户名来保存用户的登陆信息
  • 最后登陆成功后我们直接将页面重定向到文章列表页进行展示。


四、注册页面

本页面主要是用于新用户进行X社区系统的注册(前端代码与登录页进本一致)

 基本步骤:

1、用户通过在此页面输入用户名和密码,点击注册后,此页面就会把输入框中的内容通过http请求向后端名为regist的servlet发送post请求,通过键值对的形式传输输入框中的内容传输到后端进行处理。 

 2、后端通过HttpServlet中的方法创建dopost方法接受前端发送的请求

  • 先设置请求格式,防止中文乱码
  • 通过getParameter方法解析前端传输的键值对,用字符串接收
  •  对接收的用户名和密码是否为空进行判定,出现了空字符就讲相应提示返回给前端页面进行显示

  •  针对密码长度进行校验,如果不是5-12的长度则会进行相应的前端提示
  • 如果用户名和密码输入正确,我们就会通过user对象进行存储,用userdao的add方法将对象内容写入到数据库中,最后跳转到登陆页面进行用户登陆。

  •  数据库中的用户注册信息的添加


五、社区列表页

本页面主要是用于展示各个用户发表的文章的一个概况,我们选择的是截取文章的前一百个字截取到本页面上来显示,而且左边边框内还包含登陆人的一个基本信息,右上角有三个指定栏可以进行相应页面的跳转

基本步骤:

  • 首先我们进来这个页面一进来会先发送一个checklogin的登陆验证请求,通过ajax发送get请求的方式向后端login获取session登陆状态,然后通过返回的用户响应进行判断,如果是未登陆状态则直接跳转到登陆页面进行登陆(防止直接从url访问文章列表页)。
  • 后端获取到前端发送的get请求,通过session对象去获取当前页面的user对象,然后通过user对象与session对象中进行比对,如果user对象不为空则证明用户已经登陆,直接将user对象转成字符串写回给前端
  • 如果发现user对象为空,我们就将空字符串写回给前端,前端就会通过判断,知道此时为未登陆状态,就会强制跳转到登陆页面进行登陆。
  • 确认用户已经登陆了,前端就会把后端发送会的user对象中的username写回到头像下方,进行不同用户的识别
  • 然后前端再次通过get请求访问后端的blog的servlet,请求获取数据库中的相关信息。
  • 最后后端的servlet通过数据库的jdbc操作,获取存储在数据库中的内容,通过json格式的字符串返回到前端,然后前端对这组数据信息js操作构造div对象,重新写回到前端页面上,这样我们就完成了社区列表页的编写

六、社区详情页

点击社区列表页中的查看全文我们就可以跳转到对应文章的详情页中了。 

基本步骤:

  • 首先还是和上面一样的登陆验证,然后没有登陆的用户信息则直接返回登陆页面
  • 前端通过get请求访问后端的blog的servlet来获取响应的数据,比如标题、时间、正文等,然后通过js方法创建div对象写回到前端页面上
  • 这里注意需要通过markdown的语法进行格式的转换,否则会有特殊符号的残存。
  • 通过blogId进行数据库的搜索,找到了对应的博客id就将其中的内容写到博客对象中去,然后通过json字符串的格式写回到前端页面进行解析操作。

七、社区发帖页

点击右上角写文章即可进入文章编辑页,进行新的文章的撰写。

基本步骤:

  • 首先还是和上面一样的登陆验证,如果没有登陆信息则直接返回到登陆页面
  • 前端通过引入外接的开源markdown格式进行页面文章的填写,通过几个js的连接的引用和一些前端页面的基本布局就可以把markdown格式的方法映入到本页面中了。
  • 前端这里主要通过form表单的格式发送post请求给后端的blog的servlet发送数据。
  • 后端通过getParameter解析前端post请求发送的数据,然后将其解析为字符串,通过创建blog对象将字符串内容写入到对象中,然后将这个对象通过add方法写回到数据库中,这样就把用户写入的文章发送到数据库中进行存储了起来。
  • 如果数据提交的符合格式且正确写入到数据库中了,就会立即跳转到社区详情页进行展示。
  •  

八、注销

点击右上角的注销按钮即可注销登陆信息返回登陆页面

基本步骤:

  • 前端主要是一个超链接的形式发送请求后端的logout,点击即可直接跳转到登录页。
  • 后端主要是将session登陆信息进行删除会话,然后重定向到登录页面。

九、访问链接

登陆页面icon-default.png?t=N2N8http://175.178.20.77:8080/java106_blog_system/login.html


总结:

本篇文章主要从前后端交互的方式讲解了前端如何发送请求,通过form表单和ajax如何发送请求,后端如何通过servlet接受请求并写回响应,梳理出了具体步骤,可能对编码的角度没有那么详细,所以有写的不好的地方烦请指正。

所有成功的开始还得基于牢靠的基础,努力学习,坚持编码,编程伴随每一天!

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

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

相关文章

【SQL】公网远程访问局域网SQL Server数据库【无公网IP内网穿透】

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 转发自CSDN远程穿透的文章&#xff1a;[无需公网IP&am…

Shader Graph8-输入Vector

一、三个向量 Vector叫做矢量或者向量&#xff0c;向量更偏向于数学&#xff0c;矢量更偏向于图形。下面三种Vector我们用的最多&#xff0c;红色叫Camera Vector相机向量、蓝色叫Surface Normal表面法线、黄色叫Light Vector光向量。 每个面都有法线&#xff0c;法线向量是这…

医院手术麻醉信息管理系统源码

医院手术麻醉信息管理系统源码 实现整个围术期术前、术中、术后的全数字化和信息化。 医院手术麻醉临床信息管理系统是一种基于云计算技术的信息系统&#xff0c;它可以帮助医院更好地管理手术麻醉临床信息&#xff0c;提高手术麻醉的安全性和效率。 首先&#xff0c;医院手术…

ASP.NET Core MVC 从入门到精通之接化发(一)

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

Adobe Photoshop 2023 的系统最低要求+安装图文教程

Adobe Photoshop 2023(PS2023) 来了,全世界数以百万计的设计师、摄影师和艺术家使用 Photoshop 将不可能变为可能。 从海报到包装&#xff0c;从基本的横幅到漂亮的网站&#xff0c;从令人难忘的徽标到引人注目的图标&#xff0c;Photoshop 让创意世界不断前进。 ​借助直观的…

UI Toolkit(1)

UI ToolkitUI Toolkit界面画布设置背景制作UI布局UI Toolkit界面 在Unity 2021LTS版本之后UI Toolkit也被内置在Unity中&#xff0c;Unity有意的想让UI Toolkit 成为UI的主要搭建方式&#xff0c;当然与UGUI相比还是有一定的差别。他们各有有点&#xff0c;这次我们就开始介绍…

从功能到年薪30W+的测试开发工程师,分享我这10年的职业规划路线

求职&#xff1f;择业&#xff1f;跳槽&#xff1f;职业规划&#xff1f; 作为一名初出茅庐的软件测试员&#xff0c;职业发展的道路的确蜿蜒曲折&#xff0c;面对一次次的岗位竞争&#xff0c;挑战一道道的面试关卡&#xff0c;一边带着疑惑&#xff0c;一边又要做出选择&…

Python 进阶指南(编程轻松进阶):十二、使用 Git 组织您的代码项目

原文&#xff1a;http://inventwithpython.com/beyond/chapter12.html 版本控制系统是记录所有源代码变更的工具&#xff0c;使检索旧版本代码变得容易。把这些工具想象成复杂的撤销功能。例如&#xff0c;如果您替换了一个函数&#xff0c;但后来发现您更喜欢旧的函数&#xf…

安卓手机什么便签好

手机便签作为一种方便、实用、安全的记录工具&#xff0c;可以帮助我们更好地记录和管理各类生活、工作、学习事务&#xff0c;从而提高我们的办事效率和质量&#xff0c;例如大家可以把工作中的注意事项、待办事项、常用的账号密码、有关孩子的重要信息都记录到便签中保存。 而…

ERP:华为杀入,金蝶们打颤?

配图来自Canva可画 近期&#xff0c;华为官方透露将在4月份推出自研MetaERP管理系统&#xff0c;引来不少媒体和业内人士的围观&#xff0c;紧接着关于华为“进军ERP市场”的解读更是不胫而走&#xff0c;所谓一石激起千层浪&#xff0c;此说法一出&#xff0c;直接导致了金蝶…

【嘉立创EDA】局部阵列对齐及强制对齐方法

文章路标👉 文章解决问题主题内容文章解决问题 1️⃣ 嘉立创EDA中对齐工具越发完善,但一些场合中定制对齐,还需要手动进行对齐,特别是阵列式的电路局部。本文主要讲述如何应用嘉立创EDA的其他技巧将器件进行强制对齐。本文将此过程记录,以供有需要的读者参考。 主题内…

RocketMQ-01

1. MQ介绍 1.1 为什么要用MQ 消息队列是一种“先进先出”的数据结构 其应用场景主要包含以下3个方面 应用解耦 系统的耦合性越高&#xff0c;容错性就越低。以电商应用为例&#xff0c;用户创建订单后&#xff0c;如果耦合调用库存系统、物流系统、支付系统&#xff0c;任…

SAP Move to Rise是什么意思? SAP Move的五条路径是什么?

在数字经济时代&#xff0c;每一个企业都需要进行数字化转型&#xff0c;转型成为这个世界重复率最高的词汇之一。2021年SAP发布重磅战略“RISE with SAP”&#xff0c;这意味着SAP不仅仅为客户提供商业套件的产品、技术、而且包括了业务流程的转型设计。用SAP CEO 柯睿安 (Chr…

【PTA 题解】L1-083 谁能进图书馆(标志位)(C+Python)

题目 为了保障安静的阅读环境&#xff0c;有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆&#xff0c;除非有 18 岁以上&#xff08;包括 18 岁&#xff09;的成人陪同”。现在有两位小/大朋友跑来问你&#xff0c;他们能不能进去&#xff1f;请你写个程序…

穿戴规范智能识别系统 yolov7

穿戴规范智能识别系统通过yolov7python网络模型AI深度视觉学习算法&#xff0c;穿戴规范智能识别系统对工厂画面中人员穿戴行为自动识别分析&#xff0c;发现现场人员未按照规定穿戴着装&#xff0c;立即抓拍告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c…

代码版本M、RC、GA、Release等标识的区别

引言 最近听说spring framework有了重大版本调整&#xff0c;出了6.0的GA版本了 那GA是啥意思呢&#xff1f; 看了下spring 官网和代码仓库&#xff0c;除了GA&#xff0c;还有M、RC、Release等 Spring FrameworkLevel up your Java code and explore what Spring can do f…

PCL源码剖析 -- 欧式聚类

PCL源码剖析 – 欧式聚类 参考&#xff1a; 1. pcl Euclidean Cluster Extraction教程 2. 欧式聚类分析 3. pcl-api源码 4. 点云欧式聚类 5. 本文完整工程地址 可视化结果 一. 理论 聚类方法需要将无组织的点云模型P划分为更小的部分&#xff0c;以便显著减少P的总体处理时间…

【hello Linux】Linux下 gitee 的使用

目录 1. 安装 git 2. gitee 的使用 2.1 注册 gitee 账号 2.2 创建项目&#xff1a;也就是仓库 2.3 下载项目到本地 3. 上传gitee三步走 3.1 三板斧第一招&#xff1a;git add 3.2 三板斧第二招&#xff1a;git commit 3.3 三板斧第三招&#xff1a;git push Linux&#x1f337…

海外虚拟主机空间:如何使用CDN加速提升用户体验?

随着互联网的迅速发展和全球化的趋势&#xff0c;越来越多的企业和个人选择海外虚拟主机空间。然而&#xff0c;由于服务器的地理位置和网络延迟等原因&#xff0c;这些网站在国内访问时可能会遇到较慢的加载速度和不稳定的用户体验。为了解决这一问题&#xff0c;使用CDN加速是…

【Linux】进程理解与学习Ⅳ-进程地址空间

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习Ⅰ-进程概念浅谈Linux下的shell--BASH【Linux】进程理解与学习…