【Java Web编程 十四】深入理解MVC架构模式(二)

简介: 【Java Web编程 十四】深入理解MVC架构模式(二)

success.jsp

<%--
  Created by IntelliJ IDEA.
  User: 13304
  Date: 2021/7/31
  Time: 17:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.example.GoldenManage.model.UserModel" %>
<jsp:useBean id="userModel" class="com.example.GoldenManage.model.UserModel" scope="request"></jsp:useBean>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>用户注册成功</title>
    <link rel="stylesheet" href="css/style.css" />
    <link rel="shortcut icon" type="image/x-icon" href="images/cugbIcon.ico"/>
<body>
<div class="register-container">
    <h1>黄金矿工</h1>
    <div class="connect">
        <p>welcome to cugb</p>
    </div>
    <%--onpaste是否运行粘贴;oncontextmenu 是否允许展开右键菜单;placeholder 输入提示;autocomplete是否允许浏览器自动补齐--%>
    <form action="" method="post" id="registerForm">
        恭喜您注册成功,您的注册信息如下,请牢记:
        <div>
            <input type="text" name="name" class="name" placeholder="您的用户名:    ${userModel.username}" autocomplete="off" readonly="readonly"/>
        </div>
        <div>
            <input type="password" name="password" class="password" placeholder="您的密码:    ${userModel.password}" oncontextmenu="return false" onpaste="return false"  readonly="readonly" />
        </div>
        <div>
            <input type="text" name="phone_number" class="phone_number" placeholder="您的手机号: ${userModel.phone}" autocomplete="off" id="number"  readonly="readonly"/>
        </div>
        <div>
            <input type="email" name="email" class="email" placeholder="您的邮箱地址: ${userModel.email}" oncontextmenu="return false" onpaste="return false"  readonly="readonly" />
        </div>
    </form>
    <a href="login.jsp">
        <button type="button" class="register-tis" style="width: 300px">返回登录</button>
    </a>
</div>
<script src="js/jquery.min.js"></script>
<!--背景图片自动更换-->
<script src="js/supersized.3.2.7.min.js"></script>
<script src="js/supersized-init.js"></script>
<!--表单验证-->
<script src="js/jquery.validate.min.js?var1.14.0"></script>
<script src="js/common.js"></script>
</body>
</html>

error.jsp

<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: 13304
  Date: 2021/7/31
  Time: 17:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% ArrayList<String> list=(ArrayList<String>)request.getAttribute("error") ;%>
<c:forEach items="${list}" var="item" varStatus="varIndex">
    <c:if test="${varIndex.count%2==0 }">
        <tr bgcolor=red>
    </c:if>
    <c:if test="${varIndex.count%2!=0 }">
        <tr bgcolor=yellow>
    </c:if>
    <td>${item}</td>
    </tr>
</c:forEach>
</body>
</html>

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 13304
  Date: 2021/7/31
  Time: 16:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
    <title>首页</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="shortcut icon" type="image/x-icon" href="images/cugbIcon.ico" />
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
<!--描述:导航条部分:用于放置重要的页面导航------------------------------------- -->
<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-header">
        <!--
                    作者:1330465864@qq.com
                    时间:2016-04-09
                    描述:按钮绑定导航栏要显示的东西,屏幕缩小时
                -->
        <!--导航栏与隐藏按钮绑定,屏幕缩小时导航栏隐藏-->
        <button type="button" class="navbar-toggle" data-toggle="collapse"
                data-target="#navbar-info">
            <span class="icon-bar"></span> <span class="icon-bar"></span> <span
                class="icon-bar"></span>
        </button>
        <div>
            <a href="##" class="navbar-brand">&nbsp;Welcome to
                CUGB&nbsp;&nbsp;&nbsp;</a>
        </div>
    </div>
    <!--导航栏设置显示-->
    <div class="collapse navbar-collapse  navbar-responsive-collapse"
         id="navbar-info">
        <div>
            <ul class="nav navbar-nav navbar-left">
                <li class="active"><a href="index.jsp"><span
                        class="glyphicon glyphicon-home"></span> 首页</a></li>
            </ul>
        </div>
        <div>
            <ul class="nav navbar-nav navbar-right" style="margin-right: 10px;" >
                <li class="active"><a href="loginout.jsp"><span
                        class="glyphicon glyphicon-globe"></span> 退出登录</a></li>
            </ul>
        </div>
    </div>
    </div>
</nav>
<div id="myCarousel" class="carousel slide">
    <ol class="carousel-indicators">
        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
        <li data-target="#myCarousel" data-slide-to="1"></li>
        <li data-target="#myCarousel" data-slide-to="2"></li>
        <li data-target="#myCarousel" data-slide-to="3"></li>
        <li data-target="#myCarousel" data-slide-to="4"></li>
        <li data-target="#myCarousel" data-slide-to="5"></li>
    </ol>
    <div class="carousel-inner">
        <div class="item active" style="background:#223240">
            <img src="images/slide1.jpg" alt="第一张" width="100%" height="">
        </div>
        <div class="item" style="background:#F5E4DC;">
            <img src="images/slide2.jpg" alt="第二张" width="100%" height="">
        </div>
        <div class="item" style="background:#DE2A2D;">
            <img src="images/slide3.jpg" alt="第三张" width="100%" height="">
        </div>
        <div class="item" style="background:#DE2A2D;">
            <img src="images/slide4.jpg" alt="第四张" width="100%" height="">
        </div>
        <div class="item" style="background:#DE2A2D;">
            <img src="images/slide5.jpg" alt="第五张" width="100%" height="">
        </div>
        <div class="item" style="background:#DE2A2D;">
            <img src="images/slide6.jpg" alt="第六张" width="100%" height="">
        </div>
    </div>
    <!--
            作者:1330465864@qq.com
            时间:2016-04-09
            描述:轮播左右控制组建
        -->
    <a href="#myCarousel" data-slide="prev" class="carousel-control left">
        <span class="glyphicon glyphicon-chevron-left"></span> </a> <a
        href="#myCarousel" data-slide="next" class="carousel-control right">
    <span class="glyphicon glyphicon-chevron-right"></span> </a>
</div>
<div class="container " id="timg">
    <div class="row ">
        <div class="col-md-3 col-sm-6 col-xs-12  img_box"
             style="margin-top: 15px ; ">
            <a href="" class="thumbnail"> <img src="images/thumbnail1.jpg " />
            </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照地质类型</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照地质地区类型的方式查找该区域所有金矿说明,我们为您提供我们提供该区域金矿的产量,品位,等金矿参数以及已在该区域发表过的论文集。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12 img_box "
             style="margin-top: 15px ; ">
            <a href="map.html" class="thumbnail "> <img
                    src="images/thumbnail2.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照行政区域</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照行政区域查找的方式,查找中华人民共和国33个行政区域(除上海市外)黄金矿产资源的数据,我们提供该区域金矿的产量,提交量等详细信息。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12 img_box "
             style="margin-top: 15px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail3.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照地质区域</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照地质区域查找的方式查找我国主要矿区东北北部砂金矿区,燕辽金矿区,山东金矿区,东南地区金矿区,秦岭-祁连山金矿区等重要矿区的信息。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12 img_box "
             style="margin-top: 15px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail4.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照开采技术</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照开采技术分类查找的方法如(矿体测伏规律,分支符合规律,地球化学叠加晕,大功率机电法,电磁技术等)查找采用该方法开采的所有矿区。</p>
            </div>
        </div>
    </div>
</div>
<!--
                作者:1330465864@qq.com
                时间:2016-04-11
                描述:第二行的四个元素
            -->
<div class="container" id="timg2">
    <div class="row ">
        <div class="col-md-3 col-sm-6 col-xs-12  img_box"
             style="margin-top: 5px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail5.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照期刊选编</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照期刊选编查找的方式,查找我们为您收录的各大重要期刊及论文检索机构已发表的截止至今所有该期刊收录的论文,并且会持续更新该项内容。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12  img_box"
             style="margin-top: 5px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail6.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照矿石类别</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照金矿类别查找的方式,查找我们为您收录的包括自然金,金银矿,银金矿,自然银主要四种类别在内的金矿类别集,并且会持续更新该项内容。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12  img_box"
             style="margin-top: 5px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail7.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照矿床类型</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照矿床类型查找的方式,查找我们为您已分类的地球各个主要地质年代的多种类型金矿(如卡林型)的详细信息集合,并且会持续更新该项内容。</p>
            </div>
        </div>
        <div class="col-md-3 col-sm-6 col-xs-12  img_box"
             style="margin-top: 5px ; ">
            <a href=" " class="thumbnail "> <img
                    src="images/thumbnail8.jpg " /> </a>
            <div class="well well-lg ">
                <p align="center">
                    <b>按照国际矿脉</b>
                </p>
                <p style="color:gray; ">&nbsp;&nbsp;&nbsp;您可以选择按照国际矿脉查找的方式,查找我们为您收录的国际上一些比较著名的大型金矿,包括其详细开采信息和涉及论文集合,并且会持续更新该项内容。</p>
            </div>
        </div>
    </div>
</div>
</div>
</div>
<footer id="footer">
    <div class="container" style="margin-top: 1px;">
        <div class="row">
            <div class="contact col-lg-1 col-sm-1 hidden-xs  img_box">
                <a href="" class="thumbnail"><img src="images/weixin.png" /> </a>
            </div>
            <div class="contact col-lg-1 col-sm-1 hidden-xs img_box">
                <a href="" class="thumbnail"><img src="images/weixin.jpg" /> </a>
            </div>
            <div class="col-lg-8 col-sm-8 col-xs-12" style="margin-top: 25px;">
                <p>
                    <a href="http://www.cugb.edu.cn/index.action "
                       style="color:lightblue; ">中国地质大学(北京)&nbsp;&nbsp;&nbsp;</a>|<a
                        href="http://www.cnki.net/ " style="color: lightblue; ">&nbsp;&nbsp;&nbsp;中国知网&nbsp;&nbsp;&nbsp;
                </a> | <a href="http://www.mlr.gov.cn/ " style="color:lightblue; ">中华人民共和国国土资源部</a>
                </p>
                <p>中国地质大学(北京)资源数据库</p>
            </div>
            <div class="contact col-lg-1 col-sm-1 hidden-xs hidden-xs img_box">
                <a href="" class="thumbnail"><img src="images/qq.png" /> </a>
            </div>
            <div class="contact col-lg-1 col-sm-1 hidden-xs img_box">
                <a href="" class="thumbnail"><img src="images/qq.jpg" /> </a>
            </div>
        </div>
    </div>
</footer>
<script src="js/jquery.min.js "></script>
<script src="js/bootstrap.min.js "></script>
<script src="js/index.js "></script>
</body>
</html>

Lisenter代码清单

监听器主要用来处理服务器启动和关闭时候的监听操作:

package com.example.GoldenManage.listener;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.time.LocalDate;
import java.util.Date;
@WebListener
public class CountListener implements HttpSessionListener,ServletContextListener,HttpSessionAttributeListener {
    public CountListener() {
    }
    //监听application销毁事件--即服务器关闭
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("application销毁, 服务停止,停止时间:"+ LocalDate.now());
    }
    //监听application创建事件--即服务器开启
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("application创建,服务启动,启动时间:"+ LocalDate.now());
    }
}

Filter代码清单

过滤器主要为了完成请求的拦截,只有登录后才会绕过拦截:

package com.example.GoldenManage.filter;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "LoginFilter",urlPatterns= "*.jsp")
public class LoginFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest requestServlet = (HttpServletRequest) request;
        HttpServletResponse responseServlet = (HttpServletResponse) response;
        HttpSession session=((HttpServletRequest) request).getSession();
        String loginStatus=(String)session.getAttribute("loginStatus");
        String url=requestServlet.getRequestURI();
        //登录和注册页面无需跳转登录页面,否则会一直报重定向的错误
        if(url.endsWith("login.jsp")||url.endsWith("register.jsp")){
            chain.doFilter(request, response);
            return;
        }
        if(loginStatus==null || !loginStatus.equals("true")){
            responseServlet.sendRedirect("login.jsp");
            return;
        }else{
            chain.doFilter(request, response);
        }
    }
}


相关文章
|
25天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
46 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
57 6
|
1月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
65 0
|
21天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
43 3
|
1月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
20天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
141 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
22天前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
51 8
|
1月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
54 1
服务架构的演进:从单体到微服务的探索之旅
|
27天前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
35 1