JavaWeb开发_首领ろ荆棘的博客-程序员信息网_java的web开发

JAVAWEB开发

一、环境集成

1.1、创建项目

创建项目-选择开发模块
在这里插入图片描述

完成源码的关联

​ 在web-inf下创建文件夹classes,用来存储编译后java源码。

在这里插入图片描述

引入jar包

1.引入servlet和jsp的jar。

在这里插入图片描述

2.将需要的第三方jar包导入到web-inf下的lib

在这里插入图片描述

1.2、测试项目

启动项目访问首页,不会出现500404即为成功!

在这里插入图片描述

可以通过web配置和开发工具设置来改变,部署项目名。

在这里插入图片描述

二、流程搭建

2.1、全局配置

设置欢迎页面

在web.xml里找到标签 welcome-file-list ,来配置默认首页。

<!--配置项目首页-->
<welcome-file-list>
	<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

2.2、布局

项目设计分为前端和后端,整体架构使用MVC,前端由HTML 、css、 js 、jsp组成。整体构成如下:

css:全局样式

js:JavaScript

page:jsp和html页面

images:图片资源

在这里插入图片描述

后端由数据库操作工具类和servlet还有POJO等组成。

在这里插入图片描述

bean:数据实体层

dao:数据库连接,完成数据库连接和增删改查

service:业务操作,长于到层交互数据,与servlet层进行路径交互。

servlet:控制流程层

tools:业务工具层

2.3、开发

2.3.1、View导航

首页使用 超链接进入登录页面;index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
  String Path = request.getContextPath();
%>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
    <a href="<%=Path%>/page/login.jsp">登录</a>
    <a>注册</a>
  </body>
</html>

到达登陆页面

<%
    String Path = request.getContextPath();
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="<%=Path%>/login" method="post">
        用户名:<input type="text" name="username"/><br/>
        密码:<input type="password" name="pwd"/><br/>
        <input type="submit" value="登录"/>
    </form>
</body>
</html>

2.3.2、model层逻辑编写

开发POJO和相关dao层

  1. 创建user实体。
  2. 设置访问方式
  3. 创建登录需要查询方法
public class User {
    
    private int id;
    private String username;
    private String password;
    private int age;
    private String sex;
}
public class UserDao {
    
    JDBCTools jt = JDBCTools.getInstance();// JDBC工具类
    // 根据信息查询单个用户
    public User getUserByMessage(String username,String password) throws SQLException {
    
        // 通过用户名&密码查询出一个对象
    }
}

2.3.3、Controller层逻辑编写

首先书写登录业务

​ loginservice根据表单提交的用户名和密码来调用数据库完成查询操作,之后根据查询结果选择跳转路径。

public class LoginService {
    
    UserDao uDao = new UserDao();// user相关数据库层操作
    public String loginSer(HttpServletRequest request) throws UnsupportedEncodingException, SQLException {
    
        // 调用数据库,进行判断导航
        String str = "page/login.jsp";// 登录页
        if (user!=null&&!"".equals(user.getUsername())){
    
            str = "show";// 信息查询servlet
        }
        return str;
    }
}

完成servlet和service的交互

​ 使用loginservice来获取登录后的信息跳转。

@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    
    LoginService lser = new LoginService();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        String s = "";
        try {
    
            s = lser.loginSer(request);// 调用业务处理
        }catch(Exception e){
    
        }
        request.getRequestDispatcher(s).forward(request,response);
    }
}

2.3.4、逻辑梳理

首页----登录页----登录的servlet

​ ----成功:跳转到showservlet查询所有用户进行展示----展示页面

​ ----失败:重新回到登录页面

showservlet 代码

@WebServlet(name = "ShowServlet",urlPatterns = "/show")
public class ShowServlet extends HttpServlet {
    

    LoginService lser = new LoginService();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        List<User> allUser = null;
        try{
    
            allUser = lser.getAllUser();
        }catch(Exception e){
    
        }
        request.setAttribute("ulist",allUser);
        request.getRequestDispatcher("page/users.jsp").forward(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        doPost(request, response);
    }
}

三、数据渲染

jsp页面使用jstl渲染数据

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户展示</title>
    <style>
        /*单线条*/
        table{
    
            border-collapse:collapse;
        }
        /*样式并列使用[,]*/
        table,td{
    
            border:1px dotted red;/*边框像素 实虚线(solid实 dotted虚) 颜色 */
        }
    </style>
</head>
<body>

    <table>
        <tr align="center">
            <th><input type="checkbox"/></th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
            <th>性别</th>
        </tr>
        <c:forEach items="${ulist}" var="us">
            <tr align="center">
                <td><input type="checkbox" value="${us.id}"/></td>
                <td>${
    us.username}</td>
                <td>${
    us.password}</td>
                <td>${
    us.age}</td>
                <td>${
    us.sex}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_48336929/article/details/110941732

智能推荐

云文档能代替服务器吗,云存储能代替服务器存储吗_mogego七海的博客-程序员信息网

云存储能代替服务器存储吗 内容精选换一换本章节主要介绍云硬盘、弹性文件服务、对象存储服务等存储服务,让您更好的了解这些存储服务。使用存储容灾服务前,请您先了解表1中描述的使用限制。在生产站点可用区整个AZ故障时,可通过容灾演练功能恢复服务器业务。首次切换/故障切换和容灾演练操作后,登录弹性云服务器有哪些注意事项?云存储能代替服务器存储吗 相关内容ModelArts为用户提供了多种常见的预置引擎,但...

数据建模步骤文档_二维溃坝洪水模拟(五)二维模型建模_weixin_39811478的博客-程序员信息网

1 前言本文主要说明案例中水库下游区域HEC-RAS二维建模的过程。文章首先给出建模的基本原则与建模的注意事项,确定了大致的研究区域。其次,整个下游洪水演进区域由单一二维模型模拟,下游存在一条较大的城市内河,沿河堤线对网格调整加密重生成。HEC-RAS2D建模功能较为丰富,本文远未穷尽全部功能,仅供参考2 建模原则建模的原则其实很简单,首先是针对研究区域分析,确认所有需水动力模拟的现实对象。之后抽...

实现微信小程序中间部分导航滑动--swiper组件_在路上`的博客-程序员信息网_swiper组件

一、实现效果图二、实现方法 swiper组件主要点在于组件中的 display-multiple-items 属性以及 float: left浮动图标,下面的指示点是另外加的新样式三、事例代码wxml&lt;!--头部导航开始 --&gt;&lt;view class="headerModel"&gt; &lt;swiper indicator-dots="{{indicatorDots}}" display-multiple-items="5" bindchange="mddotCh

tars学习_虚拟的伪装者的博客-程序员信息网

rpc微服务框架涉及的问题:高效、可靠的调度器同步调用和异步调用的设计适当的发送协议已经解析结果提供不同的服务选择节点的策略-轮询、hash、权重管理服务节点状态,节点是否已连接,是否连接中,是否超时,是否重连,超时时间设置,重连时间设置等,如何可靠的接受请求,发送结果,请求量的控制,接受到1.5个请求怎么办,发送请求,未收到结果怎么办;rpc-client...

Spring中的@Valid 和 @Validated注解_yzc_sky的博客-程序员信息网_spring validate注解

Spring中的@Valid 和 @Validated注解文章目录Spring中的@Valid 和 @Validated注解1. 概述2. @Valid和@Validate注解3. 例子4. 使用@Valid批注标记嵌套对象5. 总结1. 概述本文我们将重点介绍Spring中 @Valid和@Validated注解的区别 。验证用户输入是否正确是我们应用程序中的常见功能。Spring提供了@Valid和@Validated两个注解来实现验证功能,下面我们来详细介绍它们。2. @Valid和@Val

3D游戏编程与设计-游戏的本质hw1_zhangxy389的博客-程序员信息网

游戏的本质游戏的分类游戏热点游戏的分类游戏的分类标准很多,以下主要以六个标准进行分类游戏载体:游戏除指代电子游戏之外,还可以指代诸如棋类、运动以及沙壶球这类基于现实的游戏。游戏方式:游戏地区游戏内容游戏平台:以游戏平台区分,电子游戏可分为街机游戏(使用大型游戏机进行游玩的游戏)、电脑游戏(使用PC和其他运算计算机进行游玩的游戏)、主机游戏(利用家庭用游戏主机进行游玩的游戏,如Xbox和Switch)、移动端游戏(使用掌上游戏机或手机等移动游戏设备进行游玩的游戏)游戏玩家人数游戏热点

随便推点

seata源码解析:TM RM 客户端的初始化过程_Java识堂的博客-程序员信息网

TM和RM初始化过程上一篇文章说过,在Spring启动的过程中就会就会初始化TM和RM,建立与TC的长连接。TM,RM,TC都是用netty来处理网络连接的,初始化netty客户端和服务端的过程也非常类似。本篇文章只分析TM的初始化过程,RM和TM复用了很多方法// TmNettyRemotingClientpublic void init() { // registry processor // 注册消息处理器 registerProcessor(); if (i.

学习Linux踩过的那些坑_互联网老辛的博客-程序员信息网

(1)进行linux实战训练的时候,改动了/etc/fstab文件,导致Linux无法正常运行。故障截图;故障原因:我们都知道/etc/fstab 文件识用来挂载分区的,...

Flutter学习笔记-IOS心型图标的颜色和大小_yyxgs的博客-程序员信息网

import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';void main() =&gt; runApp(MyApp());class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp ( title: 'flutter Demo'.

Multi-Model多模数据库引擎设计与实现_欧晨eli的博客-程序员信息网_多模数据库

如今,随着业务“互联网化”和“智能化”的发展以及架构“微服务”和“云化”的发展,应用系统对数据的存储管理提出了新的标准和要求,数据的多样性成为了数据库平台面临的一大挑战,数据库领域也催生了一种新的主流方向。数据库多模Multi-Model是指同一个数据库支持多个存储引擎,可以同时满足应用程序对于结构化、半结构化、非结构化数据的统一管理需求。数据库云化需求催生Multi-Model多模企业使用云数据库对接的应用越来越多,需求多种多样,传统的做法是在dbPaaS里面提供十几个不同的数据库产品.

刷脸考勤来势汹汹 各大企业争当尝鲜者_xiao10120620的博客-程序员信息网

大到全球500强,小到创业工作室,普遍需要签到考勤。需求的膨胀促进发展提速,近些年来,考勤方式不断推陈出新,上了好几个台阶。经历了手写签到、卡片签到、指纹签到,如今,考勤方式也随着人工智能的进步逐渐向刷脸签到发展。许多大型企业,机关、事业单位甚至在两三年前就已经用上刷脸签到,可想而知,当下刷脸签到的市场会有多广阔。人脸识别究竟有什么吸引力,引得各大企业争当尝鲜者呢?这大概与它的便捷性和高...

推荐文章

热门文章

相关标签