我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaWeb表白墙和在线相册怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaWeb表白墙和在线相册怎么实现

这篇文章主要介绍了JavaWeb表白墙和在线相册怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaWeb表白墙和在线相册怎么实现文章都会有所收获,下面我们一起来看看吧。

    一. 案例: 表白墙 (使用模板引擎)

    1. 首先创建 maven 项目

    引入需要的依赖,创建必要的目录

    JavaWeb表白墙和在线相册怎么实现

    JavaWeb表白墙和在线相册怎么实现

    JavaWeb表白墙和在线相册怎么实现

    2. 创建好模板文件

    JavaWeb表白墙和在线相册怎么实现

    <!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></head><body>    <form action="confession" method="post">        <div class="parent">            <div id="wall">表白墙</div>            <div id="remind">输入后点击提交,会将信息显示在表格中</div>            <div class="one"><span class="two">谁:</span><input type="text" class="text" name="from"></div>            <div class="one"><span class="two">对谁:</span><input type="text" class="text" name="to"></div>            <div class="one"><span class="two">说什么:</span><input type="text" class="text" name="message"></div>            <div class="one"><input type="submit" value="提 交" class="press"></div>            <div class="elem" th:each="message : ${messages}">                <span th:text="${message.from}">wz</span>对<span th:text="${message.to}">zw</span>说: <span th:text="${message.message}">wzz</span>            </div>        </div>    </form>        <style>                * {            margin: 0;            padding: 0;        }                .parent {            width: 400px;            margin: 0 auto;        }                #wall {            font-size: 30px;            font-weight: 700;            text-align: center;            margin: 5px;        }                #remind{            font-size:13px;            text-align: center;            color:gray;            margin: 5px;        }                .one {            display: flex;            justify-content: center;            align-items: center;            height: 40px;        }                .two {            width: 100px;            line-height: 40px;        }                .one .text{            width: 200px;            height: 20px;            padding-left: 3px;        }                .one .press{            width: 304px;            height: 40px;            color:white;            background-color: orange;            border-radius: 5px;            border: none;        }                 .one .press:active{            background-color: red;        }                .elem {            text-align: center;            margin: 15px;        }    </style></body></html>

    3. 使用数据库存储数据.创建一个类用于数据库连接

    ConnectionDB 类

    import com.mysql.cj.jdbc.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class ConnectionDB {    private static final String URL = "jdbc:mysql://127.0.0.1:3306/confessionWall2?characterEncoding=utf-8&useSSL=true&serverTimezone=UTC";    private static final String USERNAME = "root";    private static final String PASSWORD = "0000";    private static volatile DataSource dataSource = null;    public static DataSource getDataSource() {        if(dataSource == null){            synchronized (ConnectionDB.class){                if(dataSource == null) {                    dataSource = new MysqlDataSource();                    ((MysqlDataSource) dataSource).setURL(URL);                    ((MysqlDataSource) dataSource).setUser(USERNAME);                    ((MysqlDataSource) dataSource).setPassword(PASSWORD);                }            }        }        return dataSource;    }    public static Connection getConnection() throws SQLException {        return getDataSource().getConnection();    }    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){        if(resultSet != null){            try {                resultSet.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(statement != null){            try {                statement.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(connection != null){            try {                connection.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

    4. 使用 监视器 来初始化 Thymeleaf

    ThymeleafConfig

    注意加上注解

    import org.thymeleaf.TemplateEngine;import org.thymeleaf.templateresolver.ServletContextTemplateResolver;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;@WebListenerpublic class ThymeleafConfig implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {        System.out.println("ServletContext 初始化完毕!");        ServletContext context = servletContextEvent.getServletContext();        TemplateEngine engine = new TemplateEngine();        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(context);        resolver.setPrefix("/WEB-INF/template/");        resolver.setSuffix(".html");        resolver.setCharacterEncoding("utf-8");        engine.setTemplateResolver(resolver);        context.setAttribute("engine",engine);    }    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {    }}

    5. 编写 Servlet 代码

    首先创建一个 Confession

    class Confession{    public String from;    public String to;    public String message;}

    ① 重写 doGet 方法

        @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html;charset=utf-8");        List<Confession> list = load();        TemplateEngine engine = (TemplateEngine) getServletContext().getAttribute("engine");        WebContext webContext = new WebContext(req,resp,getServletContext());        webContext.setVariable("messages",list);        engine.process("confessionwall",webContext, resp.getWriter());    }

    ② 重写 doPost 方法

            resp.setContentType("text/html;charset=utf-8");        Confession confession = new Confession();        confession.from = req.getParameter("from");        confession.to = req.getParameter("to");        confession.message = req.getParameter("message");        save(confession);        resp.sendRedirect("confession");

    ③ 实现 load 方法

        private List<Confession> load() {        List<Confession> list = new ArrayList<>();        Connection connection = null;        PreparedStatement statement = null;        ResultSet resultSet = null;        try {            connection = ConnectionDB.getConnection();            String sql = "select * from confession";            statement = connection.prepareStatement(sql);            resultSet = statement.executeQuery();            while(resultSet.next()){                Confession confession = new Confession();                confession.from =resultSet.getString("from");                confession.to = resultSet.getString("to");                confession.message = resultSet.getString("message");                list.add(confession);            }        } catch (SQLException throwables) {            throwables.printStackTrace();        } finally {            ConnectionDB.close(connection,statement,resultSet);        }        return list;    }

    ④ 实现 save 方法

        private void save(Confession confession) {        Connection connection = null;        PreparedStatement statement = null;        try{            connection = ConnectionDB.getConnection();            String sql = "insert into confession values (?,?,?)";            statement = connection.prepareStatement(sql);            statement.setString(1,confession.from);            statement.setString(2, confession.to);            statement.setString(3,confession.message);            int ret = statement.executeUpdate();            if(ret == 1){                System.out.println("插入成功");            }else{                System.out.println("插入失败");            }        } catch (SQLException throwables) {            throwables.printStackTrace();        } finally {            ConnectionDB.close(connection,statement,null);        }    }

    6. 注意事项

    注意模板引擎

    JavaWeb表白墙和在线相册怎么实现

    注意 乱码的情况,要添加utf-8

    JavaWeb表白墙和在线相册怎么实现

    用数据库的方法存数据,要先创建好数据库

    create database confessionWall2;use confessionWall2;create table confession(    `from` varchar(1024),    `to` varchar(1024),    `message` varchar(1024));

    还有一些必要的注解也要加上.

    JavaWeb表白墙和在线相册怎么实现

    7. 部署之后 运行截图

    浏览器输入对应的URL

    在数据库为空的时候界面如下

    JavaWeb表白墙和在线相册怎么实现

    JavaWeb表白墙和在线相册怎么实现

    在输入几个数据之后 如下

    JavaWeb表白墙和在线相册怎么实现

    此时的数据库中表的内容

    JavaWeb表白墙和在线相册怎么实现

    重新部署再进入URL发现数据还是存在.

    JavaWeb表白墙和在线相册怎么实现

    二. 案例: 在线相册 (使用模板引擎)

    1. 首先创建 maven 项目

    引入必要的依赖,已经必要的目录

    JavaWeb表白墙和在线相册怎么实现

    JavaWeb表白墙和在线相册怎么实现

    2. 创建好模板文件

    image.html

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>相册</title>    <link rel="stylesheet" href="./style.css"></head><body>    <div class="nav">        <form action="upload" method="POST" enctype="multipart/form-data" >            <input type="file" name="myImage">            <input type="submit" value="上传图片">        </form>    </div>    <div class="parent">            <!-- 第一组图片 -->        <figure class="sample" th:each="image : ${images}">             <img th:class="lazy" data-src="${image.url}" alt="sample1" />            <figcaption>                <div>                    <h3 th:text="${image.name}">Deconovo</h3>                </div>            </figcaption>            <a th:href="${image.url}"></a>        </figure>    </div>    </body></html>

    style.css

    @import url(https://fonts.googleapis.com/css?family=Raleway:400,700);*{    margin: 0 auto;    padding: 0 auto;    box-sizing: border-box;}html,body{    width: 100%;    height: calc(100% - 50px);    background-color: #212121;}.parent{    display: flex;    justify-content: center;    align-items: center;    flex-flow: wrap;    margin: 0;    height: 100%;}.nav{    background-color: rgba(255,255,255,0.3);    height: 50px;    width: 100%;    display: flex;    justify-content: left;    align-items: center;}.sample {    font-family: 'Raleway', Arial, sans-serif;    position: relative;    overflow: hidden;    margin: 10px;    min-width: 230px;    max-width: 315px;    width: 100%;    color: #ffffff;    text-align: center;    font-size: 16px;    background-color: #000000;}.sample *,.sample *:before,.sample *:after {    -webkit-box-sizing: border-box;    box-sizing: border-box;        -webkit-transition: all 0.55s ease;    transition: all 0.55s ease;}.sample img {    max-width: 100%;    backface-visibility: hidden;    vertical-align: top;}.sample figcaption {    position: absolute;    bottom: 25px;    right: 25px;    padding: 5px 10px 10px;}.sample figcaption:before,.sample figcaption:after {    height: 2px;    width: 400px;    position: absolute;    content: '';    background-color: #ffffff;}.sample figcaption:before {    top: 0;    left: 0;    -webkit-transform: translateX(100%);    transform: translateX(100%);}.sample figcaption:after {    bottom: 0;    right: 0;    -webkit-transform: translateX(-100%);    transform: translateX(-100%);}.sample figcaption div:before,.sample figcaption div:after {    width: 2px;    height: 300px;    position: absolute;    content: '';    background-color: #ffffff;}.sample figcaption div:before {    top: 0;    left: 0;    -webkit-transform: translateY(100%);    transform: translateY(100%);}.sample figcaption div:after {    bottom: 0;    right: 0;    -webkit-transform: translateY(-100%);    transform: translateY(-100%);}.sample h3,.sample h5 {    margin: 0;    text-transform: uppercase;}.sample h3 {    font-weight: 400;}.sample h5 {    display: block;    font-weight: 700;    background-color: #ffffff;    padding: 5px 10px;    color: #000000;}.sample a {    position: absolute;    top: 0;    bottom: 0;    left: 0;    right: 0;}.sample:hover img,.sample.hover img {    zoom: 1;    filter: alpha(opacity=50);    -webkit-opacity: 0.5;    opacity: 0.5;}.sample:hover figcaption:before,.sample.hover figcaption:before,.sample:hover figcaption:after,.sample.hover figcaption:after,.sample:hover figcaption div:before,.sample.hover figcaption div:before,.sample:hover figcaption div:after,.sample.hover figcaption div:after {    -webkit-transform: translate(0, 0);    transform: translate(0, 0);}.sample:hover figcaption:before,.sample.hover figcaption:before,.sample:hover figcaption:after,.sample.hover figcaption:after {        -webkit-transition-delay: 0.15s;    transition-delay: 0.15s;}

    3. 这是通过访问文件夹里的图片的

    在webapp下创建一个文件夹 image,里面存放图片.

    通过 getServletContext().getRealPath("/image") 来获取绝对路径

    JavaWeb表白墙和在线相册怎么实现

    4. 使用 监视器 来初始化 Thymeleaf

    这里的代码不变

    import org.thymeleaf.TemplateEngine;import org.thymeleaf.templateresolver.ServletContextTemplateResolver;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;@WebListenerpublic class ThymeleafConfig implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent servletContextEvent) {        System.out.println("ServletContext 初始化完毕");        ServletContext context = servletContextEvent.getServletContext();        TemplateEngine engine = new TemplateEngine();        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver(context);        resolver.setPrefix("/WEB-INF/template/");        resolver.setSuffix(".html");        resolver.setCharacterEncoding("utf-8");        engine.setTemplateResolver(resolver);        context.setAttribute("engine",engine);    }    @Override    public void contextDestroyed(ServletContextEvent servletContextEvent) {    }}

    5. 编写加载页面的 Servlet代码

    创建一个 Image 类

    class Image {    public String name;    public String url;}

    创建一个类,重写 doGet 方法

    @WebServlet("/Image")public class OnlineImageServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html;charset=utf-8");        // 1. 扫描指定路径 /webapp/image 路径        List<Image> images = loadImage();        // 2. 构造到模板页面        TemplateEngine engine = (TemplateEngine) getServletContext().getAttribute("engine");        WebContext webContext = new WebContext(req,resp,getServletContext());        webContext.setVariable("images",images);        String html = engine.process("image",webContext);        resp.getWriter().write(html);    }}

    实现 loadImage 方法

    注意使用 getRealPath 方法

    以及注意使用 file.listFiles()方法

        private List<Image> loadImage() {        List<Image> images = new ArrayList<>();        // 首先得到 /webapp/image 的绝对路径        ServletContext context = this.getServletContext();        // 这里是将 webapp下的目录转换成一个绝对路径        String path = context.getRealPath("/image");        // 根据路径 看里面有哪些图片.        File file = new File(path);        File[] files = file.listFiles();        for(File f:files){            Image image = new Image();            image.name = f.getName();            image.url = "image/"+f.getName();            images.add(image);        }        return images;    }

    6. 编写提交图片的 Servlet 代码

    ① 创建一个类,重写 doPost 方法

    注意一定要加上注解@MultipartConfig

    import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;import java.io.IOException;// 这个注解在上传文件的功能中是必要的@MultipartConfig@WebServlet("/upload")public class UploadServlet extends HttpServlet {    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        String path = getServletContext().getRealPath("/image");        Part part = req.getPart("myImage");        part.write(path + "/" + part.getSubmittedFileName());        resp.sendRedirect("Image");    }}

    7. 注意事项

    主要是得到文件夹,找到路径的步骤复杂点.重点掌握这几种方法的使用

    JavaWeb表白墙和在线相册怎么实现

    JavaWeb表白墙和在线相册怎么实现

    前后端约定好的名称要对应.

    JavaWeb表白墙和在线相册怎么实现

    传文件需要加上注解,否则会报500的错误.@MultipartConfig

    关于“JavaWeb表白墙和在线相册怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JavaWeb表白墙和在线相册怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    JavaWeb表白墙和在线相册怎么实现

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    JavaWeb表白墙和在线相册怎么实现

    这篇文章主要介绍了JavaWeb表白墙和在线相册怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaWeb表白墙和在线相册怎么实现文章都会有所收获,下面我们一起来看看吧。一. 案例: 表白墙 (使用模
    2023-07-05

    Java Servlet怎么实现表白墙

    本篇内容主要讲解“Java Servlet怎么实现表白墙”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Servlet怎么实现表白墙”吧!一、表白墙简介在表白墙页面中包含三个文本框,分别
    2023-07-05

    怎么用HTML+CSS+JavaScript实现在线表白神器

    这篇文章主要介绍了怎么用HTML+CSS+JavaScript实现在线表白神器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用HTML+CSS+JavaScript实现在线表白神器文章都会有所收获,下面我们
    2023-06-27

    怎么用javaweb实现在线聊天工具

    本篇内容主要讲解“怎么用javaweb实现在线聊天工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用javaweb实现在线聊天工具”吧!写这个玩意儿就是想练练手, 用户需要登陆才能在线聊天
    2023-06-17

    怎么在HTML5中实现一个3D旋转相册

    今天就跟大家聊聊有关怎么在HTML5中实现一个3D旋转相册,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。HTML5 代码如下:2023-06-09

    android中怎么实现在相册中选择图片

    这期内容当中小编将会给大家带来有关android中怎么实现在相册中选择图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先在 activity_main.xml 文件中增加一个 Button,用来触发从
    2023-05-30

    怎么在android中实现拍从相册中选取图片

    这篇文章将为大家详细讲解有关怎么在android中实现拍从相册中选取图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片方式: (类似更换头像的效果)1、手机拍照 选择图片;2、相册选
    2023-06-14

    怎么使用Python和OpenCV实现在线打乒乓球

    本篇内容介绍了“怎么使用Python和OpenCV实现在线打乒乓球”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!捕捉屏幕第一件事就是捕捉屏幕
    2023-06-16

    怎么在Django中使用channels和websocket实现一个在线聊天室

    本篇文章为大家展示了怎么在Django中使用channels和websocket实现一个在线聊天室,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Channels是Django团队研发的一个给Djan
    2023-06-15

    怎么在C#项目中实现并行和多线程编程

    这期内容当中小编将会给大家带来有关怎么在C#项目中实现并行和多线程编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 一、Task的嵌套   Task中还可以再嵌套Task,Thread中能不能这样做,我
    2023-06-06

    怎么在c#中使用Parallelx实现并行和多线程编程

    本篇文章给大家分享的是有关怎么在c#中使用Parallelx实现并行和多线程编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、 Parallel的使用1、Parallel.
    2023-06-06

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录