【JavaWeb】循序渐进做项目——水果库存系统01

本文项目代码见码云:JavaWeb项目

项目流程图

  • JavaWeb_01
    演示了简单的项目搭建流程、项目执行逻辑。
    在这里插入图片描述
  • JavaWeb_02
    演示了session的获取、向session的保存作用域中保存(读取)数据、服务器端转发和客户端重定向。
  • JavaWeb_03
    使用Thymeleaf技术进行视图渲染——将从数据库中拿到的数据对应到页面上。
    在这里插入图片描述
  • JavaWeb_04
    实现水果系统的CRUD功能。

Tomcat

Tomcat:服务器端的Web容器。

  • BS/CS:
    浏览器服务器架构 与 客户端服务器架构。
    BS:优点:不需要安装、维护成本低
    缺点:服务器负荷较重。
    CS:优点:充分利用客户端机器的资源。(安全要求不高的项目放到客户端执行。)
    缺点:需要安装、升级维护。

  • Tomcat 目录结构说明
    目录:
    D:\MySQL\Tomcat\apache-tomcat-8.5.76-windows-x64
    bin:可执行文件目录。
    conf:配置文件。
    lib:依赖的Java类。
    logs:存放日志的文件夹。
    temp:临时文件夹。
    webapps:部署项目的空间。
    work:工作目录。

注意:

  1. 因为tomcat也是用Java和C来写的,所以需要配置环境变量。具体的操作可以自己搜索。

  2. 手动部署Web项目(一般不用): 在配置好环境变量的前提下,双击bin目录下startup.bat文件即可启动tomcat。在webapps下新建文件夹,在文件夹下创建文件夹名:WEB-INF和所需项目即可。然后就可以通过浏览器访问了。

  3. 在容器中部署项目时,项目称为context root。

  • IDEA下部署Web项目的几个必要步骤
  1. 创建Web项目:新建项目后,右键项目——添加框架支持——web应用程序。

  2. 部署Tomcat。

  3. 导入MySQL驱动。(记得将lib添加到工件,进行更新)。启动数据库。

  4. 导入Tomcat的jar包。

  • 常用名词解释:
  • pojo
    Plain Old Java Object。“普通Java对象”
  • dao
    DAO(Data Access Object):数据访问层。封装对数据库的访问,不涉及业务逻辑。
  • impl
    impl的全称为implement,表示实现的意思。
    即用来存放接口的实现类。
  • 其他注意事项:
    1. 注意,IDEA比较特殊,项目部署在out目录下,而不是在webapps目录下。
    2. BaseDAO中要记得修改数据库的Driver等为自己的。
    3. Html文件创建在web目录下。
    4. 点击调试按钮执行程序,这样可以随时debug。

session会话

因为Http协议是无状态的,服务器无法判断两次请求是否都由同一客户端发出。
所以通过会话跟踪技术来解决无状态问题。

  • 会话跟踪技术
    客户端第一次发请求给服务器,服务器获取session,获取不到,则创建新的sessionID。响应给客户端。下次客户端发送请求时,会把session带给服务器,那么服务器就可以判断是哪台客户端。

  • 常用API

    //获取当前会话,如果没有创建一个新的会话。
    request.getSession();
    request.getSession(true);
    //获取当前会话,如果没有返回null。
    request.getSession(false);
    //获取会话ID
    session.getId();
    //判断当前session是否是新的
    session.isNew();
    //获取/设置session的最大非激活间隔时长,默认1800秒
    session.getMaxInactiveInterval();
    session.setMaxInactiveInterval(16000);
    //强制让会话失效
    session.invalidate();
    
    //向session的保存作用域中保存数据
    session.setAttribute(key,value);
    //读取session保存作用域中key对应的value。
    session.getAttribute(key);
    
  • session保存作用域

    session保存作用域是和具体的某一个sessionID对应的。

    比如下图:浏览器通过demo04向服务器发送请求,获得了一个sessionID并且通过session.setAttribute(key,value);在保存作用域保存了数据。

    那么只要sessionID一致,都可以通过session.getAttribute(key);直接获取保存作用域的数据。
    在这里插入图片描述

服务器内部转发及客户端重定向

  • 服务器内部转发:
    API:req.getRequestDispatcher("demo07").forward(req,resp);
    是一次请求响应的过程,对于客户端而言,内部经过了多少次转发,客户端不知道。
    在这里插入图片描述
  • 客户端重定向:
    API:resp.sendRedirect("demo07");
    两次请求响应的过程,客户端知道请求的url有变化。
    在这里插入图片描述

Thymeleaf

视图模板技术:可以在你的页面上加载保存作用域中的数据。

  • 在服务器端引入Thymeleaf技术的步骤

    1. 在项目中加入Thymeleaf jar包
    2. 在web.xml中添加配置(配置前缀prefix和后缀suffix)
        <context-param>
          <param-name>view-prefix</param-name>
          <param-value>/</param-value>
      </context-param>
      <context-param>
          <param-name>view-suffix</param-name>
          <param-value>.html</param-value>
      </context-param>
    
    1. 新建Servlet类ViewBaseServlet——>代码直接复制即可。
    2. 使得我们的Servlet继承ViewBaseServlet。
    3. 在do方法/service方法中加入下面这句话:
    //thymeleaf会将这个逻辑视图名称 对应到 物理视图 名称上去。
    //逻辑视图名称: index
    //物理视图名称: view-prefix + 逻辑视图名称 + view-suffix
    //真正的视图名称:  /           index        .html
    super.processTemplate("index",req,resp);
    
    1. 在html页面中使用thymeleaf的标签:
      th:if、th:unless、th:each、th:text等。

三种保存作用域

  • request:一次请求响应范围有效。
    在这里插入图片描述
  • session:一次会话范围有效。
    使用request.getSession()方法获取session。
    在这里插入图片描述
  • application:一次应用程序范围有效。
    使用request.getServletContext()方法获取application。
    ServletContext:Servlet上下文。Tomcat启动,上下文开始,Tomcat关闭,上下文停止。
    在这里插入图片描述

路径问题

相对路径下,使用../可以返回上一级。以下面的图片为例:红色即为相对路径。蓝色为绝对路径。
一般情况下最好写绝对路径,所以用th : ... = @{ }
在这里插入图片描述

水果库存系统实现CRUD、分页功能

  1. 编辑和修改功能的实现逻辑:
    index.html(点击水果名称的超链接进行跳转,th:href=edit.do)——>
    EditServlet(获取要编辑的水果的fid,将该水果的信息放入保存作用域中,使用thymeleaf,执行super.processTemplate(“edit”,request,response) )——>edit.html(编辑完成后,提交表单,action=update.do)——>UpdateServlet(获取表单数据,使用FruitDAO与数据库进行交互,客户端重定向)——>index.html
  2. 删除功能的实现逻辑:
    index.html(点击删除图片,绑定th:οnclick=delFruit方法,在js中实现该方法,执行del.do)——>DelServlet(获取fid,使用FruitDAO与数据库进行交互,客户端重定向)——>index.html

th:onclick="|delFruit(${fruit.fid})|" 的解释:

  1. 使用th:onclick而不是简单的onclick。

    因为fruit.fid要随着不同水果fid的变化而变化,所以要用th:onclick。

  2. 在thymeleaf使用方法时,添加竖线可以自动实现字符串拼接。

  1. 添加功能的实现逻辑:
    index.html(点击添加按钮,绑定action=add.html,直接访问静态网页。)——>add.html(表单绑定action=add.do,直接访问AddServlet)
    ——>AddServlet(获取表单数据,使用FruitDAO与数据库进行交互,客户端重定向)——>index.html(最终回到index.html)

  2. 分页功能的实现逻辑:
    JavaWeb_04.1

    index.html(点击下一页按钮,绑定th:οnclick=pageNo方法,在js中实现该方法,执行index)——>IndexServlet(按页数显示)——>index.html

  3. 查询功能:
    JavaWeb_04.2,暂时最终的IndexServlet版本。

    index.html(点击查询,form表单传入index)——>IndexServlet(具体见注释)——>index.html

注意事项/技巧:

  • 这里默认从index.html开始,其实是使用index,访问IndexServlet,使用thymeleaf将index——>index.html。

  • 如果修改后页面没有更新,可以检查out文件夹中的文件是否都齐全。或者清除浏览器缓存。

  • 查看div边距,可以使用border:1px solid red来实现。

  • 使用ctrl+F5可以快捷刷新页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sivan_Xin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值