• IDEA 整合 Tomcat 开发 Javaweb 工程 2022-7-28


    静态 Web 工程和动态 Web 工程

    Web 1.0时代 - 静态 Web 工程

    只有 HTML ,CSS 网页中的内容都是写死的,用户只能浏览,不能修改

    Web 2.0 时代 - 动态 Web 工程

    网页中内容都是动态的,用户可以查询,可以增删改

    Web 3.0 时代 - 动态 Web 工程

    开发环境

    IDEA  整合 Tomcat 开发 Javaweb 工程

    !!!这是提醒我自己的得换一个

     

    需要联网 

     

     

     

    Java 工程

    默认访问 index.jsp 目录 

    访问自己的目录

    新建

    这里创建的是 Home 目录

     

     不行的话就在 maven 里面 清除 编译  先停掉 Tomcat

    compile 只编译 java 代码 ,所以需要 package 打包 ,然后 将这个javaweb-01 .war 布置到Tomcat 里面 会自动解包 

    JavaWeb 工程的配置文件 web.xml

    工程目录结构

    所有目录都在 src 里面

    src/main/java              主工程的java代码

    src/main/resources     主工程的资源文件

    src/main/webapp        主工程与前端相关的文件(jsp | html | css | js | 图片 |  ...)

    src/test/java                主工程的

    src/test/resources

    compile -- target/classes

    package 打包 先做 complie

    右击src    新建 会显示四个目录  把里面目录 全部双击 建立起来

    就变成这个样了

     

    什么是 jsp

    Java Server Page  Java 服务端页面

    可以写 Java 代码的 HTML 文件

    运行原理

    重新运行

    动作幅度从上到下越来越大

     改变默认的选择 

    外部运行和内部运行

    外部运行

    打包 package

    复制到 webapps里面 

     运行 startup.bat

     会自动解包

    这里是已经解包好的图 

    正常没有解包是没有 javaweb-01 文件夹

    解包好

    试试外部运行 外部需要加 javaweb-01 目录名

    在idea 内部运行 不需要 加 javaweb-01

    外部运行 需要一直启动 startup.bat

    1. <%@ page import="java.util.ArrayList" %>
    2. <%@ page import="java.util.List" %><%--
    3. Created by IntelliJ IDEA.
    4. User: Lenovo
    5. Date: 2022/7/28
    6. Time: 9:52
    7. To change this template use File | Settings | File Templates.
    8. --%>
    9. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    10. <html>
    11. <head>
    12. <title>Hometitle>
    13. head>
    14. <body>
    15. <%
    16. //这里面可以写 java 代码
    17. List<String> list =new ArrayList<>();
    18. list.add("张飞");
    19. list.add("赵云");
    20. list.add("关羽");
    21. %>
    22. <%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%>
    23. <table border="1">
    24. <thead>
    25. <th>编号th>
    26. <th>姓名th>
    27. thead>
    28. <tbody>
    29. <%
    30. for (int i = 0; i < list.size(); i++) {
    31. %>
    32. <tr>
    33. <td><%= (i+1) %>td>
    34. <td><%= list.get(i) %>td><%-- <%= 对Java 取值输出的代码 --%>
    35. tr>
    36. <%
    37. }
    38. %>
    39. tbody>
    40. table>
    41. body>
    42. html>

    试试外部运行 外部需要加 javaweb-01 目录名

    Tomcat文件里面 哪些可以删

    webapps 里面除了自己的文件都可以删掉 (提高性能)

    work 里面 可以删掉Catalina 

    为什么Tomcat 里面 可以 编译 java 程序

    HTML + CSS + JS

    是因为 Home.jsp 通过 Tomcat 执行引擎 翻译变成了 Home_jsp.java 再通过 JDk编译器 编译变成了 Home_jsp.class

    监测 jsp文件发生变化 会重新翻译 编译

     

    加了一行  刘备 保存

    原来的 修改时间是7.28

    原来的浏览器

    现在的浏览器 

    运行后 修改时间是 11:39

    这就是监测  jsp文件 发生变化 会重新 翻译 编译

     运行后 会出现 work 运行目录 可以删除里面的Catalina  但是,重新运行的话需要重新

    假如不删的话只需要

    什么是 servlet

    需要安装这个三方库

     换一个版本!!!!!

    打包的时候跳过单元测试方法

    开始敲代码

    JSP 可以写 Java + HTML

    JSP 被Tomcat 翻译成 Java 文件 --> Servlet

    自己写Servlet

    1. package com.iweb.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的
    8. // 重写 doGet 方法 直接打 doGet 回车
    9. // 怎么让浏览器访问这个类,需要给这个类绑定一个地址
    10. @Override
    11. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. System.out.println("Hello servlet");
    13. }
    14. }

    给 Servlet 类配置一个网络URL地址的方式有2种

    1.在web.xml 文件中配置(老版本中使用的)

    2.使用注解配置(Servlet-api 三方库的版本需要 4.0以上)

     

     报错的话

    看这个人的链接

    (1条消息) 配置过程中常见的错误+url地址到Servlet程序的访问和原理_你好牛蛙的博客-CSDN博客_url 访问servlet

    我的是这样子解决的

    变成这样子

     运行

     在网页

    输入

     会在这里显示 s1 和 s2 所显示的东西

    1. @Override
    2. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    3. System.out.println("hello servlet");
    4. // 假设这一行数据从Dao获取的
    5. List list = new ArrayList<>();
    6. list.add("张飞");
    7. list.add("关羽");
    8. list.add("赵云");
    9. list.add("马超");
    10. list.add("刘备");
    11. // 把数据放在 req 一起带过去
    12. req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list
    13. // 把数据交给 jsp 展示
    14. // 获取一个调度器对象
    15. RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");
    16. // 调用调度器
    17. dispatcher.forward(req,resp);
    18. }

    从下面取出

    为了 html 代码和 java 代码 分开

    安装这两个三方库 

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: Lenovo
    4. Date: 2022/7/28
    5. Time: 9:52
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    9. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    10. <html>
    11. <head>
    12. <title>Hometitle>
    13. head>
    14. <body>
    15. <%
    16. //这里面可以写 java 代码
    17. // List<String> list =new ArrayList<>();
    18. // list.add("张飞");
    19. // list.add("赵云");
    20. // list.add("关羽");
    21. %>
    22. <%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%>
    23. <table border="1">
    24. <thead>
    25. <th>编号th>
    26. <th>姓名th>
    27. thead>
    28. <tbody>
    29. <%-- <%--%>
    30. <%-- for (int i = 0; i < list.size(); i++) {--%>
    31. <%-- %>--%>
    32. <%-- <tr>--%>
    33. <%-- <td><%= (i+1) %>td>--%>
    34. <%-- <td><%= list.get(i) %>td><% <%= 对Java 取值输出的代码 %>--%>
    35. <%-- tr>--%>
    36. <%-- <%--%>
    37. <%-- }--%>
    38. <%-- %>--%>
    39. <c:forEach items="${list}" var="user" > <%-- 遍历list 每遍历一个将list 取出值给 user--%>
    40. <tr>
    41. <td>${user.id}td>
    42. <td>${user.name}td>
    43. tr>
    44. c:forEach>
    45. tbody>
    46. table>
    47. body>
    48. html>

    1. package com.iweb.servlet;
    2. import javax.servlet.RequestDispatcher;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. @WebServlet(urlPatterns = "/s1")
    12. public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的
    13. // 重写 doGet 方法 直接打 doGet 回车
    14. // 怎么让浏览器访问这个类,需要给这个类绑定一个地址
    15. // private Servlet01(){
    16. // System.out.println("创建Servlet对象");
    17. // }
    18. @Override
    19. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    20. System.out.println("hello servlet");
    21. // 假设这一行数据从Dao获取的
    22. List list = new ArrayList<>();
    23. list.add((new User(1,"张飞")));
    24. list.add((new User(2,"关羽")));
    25. list.add((new User(3,"赵云")));
    26. list.add((new User(4,"马超")));
    27. list.add((new User(5,"刘备")));
    28. // 把数据放在 req 一起带过去
    29. req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list
    30. // 把数据交给 jsp 展示
    31. // 获取一个调度器对象
    32. RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");
    33. // 调用调度器
    34. dispatcher.forward(req,resp);
    35. }
    36. public class User{
    37. private Integer id;
    38. private String name;
    39. public User() {
    40. }
    41. public Integer getId() {
    42. return id;
    43. }
    44. public String getName() {
    45. return name;
    46. }
    47. public User(Integer id, String name) {
    48. this.id = id;
    49. this.name = name;
    50. }
    51. }
    52. }

    这时候不支持 ${}

    直接请求Home.jsp 没有数据

     需要请求 Servlet (url="s1")

    Home.jsp

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: Lenovo
    4. Date: 2022/7/28
    5. Time: 9:52
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    9. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    10. <html>
    11. <head>
    12. <title>Hometitle>
    13. head>
    14. <body>
    15. <%
    16. //这里面可以写 java 代码
    17. // List<String> list =new ArrayList<>();
    18. // list.add("张飞");
    19. // list.add("赵云");
    20. // list.add("关羽");
    21. %>
    22. <%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%>
    23. <table border="1">
    24. <thead>
    25. <th>编号th>
    26. <th>姓名th>
    27. <th>性别th>
    28. thead>
    29. <tbody>
    30. <%-- <%--%>
    31. <%-- for (int i = 0; i < list.size(); i++) {--%>
    32. <%-- %>--%>
    33. <%-- <tr>--%>
    34. <%-- <td><%= (i+1) %>td>--%>
    35. <%-- <td><%= list.get(i) %>td><% <%= 对Java 取值输出的代码 %>--%>
    36. <%-- tr>--%>
    37. <%-- <%--%>
    38. <%-- }--%>
    39. <%-- %>--%>
    40. <c:forEach items="${list}" var="user" > <%-- 遍历list 每遍历一个将list 取出值给 user--%>
    41. <tr>
    42. <td>${user.id}td>
    43. <td>${user.name}td>
    44. <c:if test="${user.sex == 0 }"> <%--test = 条件--%>
    45. <td>td>
    46. c:if>
    47. <c:if test="${user.sex == 1 }">
    48. <td>td>
    49. c:if>
    50. tr>
    51. c:forEach>
    52. tbody>
    53. table>
    54. body>
    55. html>

     servlet01

    1. package com.iweb.servlet;
    2. import javax.servlet.RequestDispatcher;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. @WebServlet(urlPatterns = "/s1")
    12. public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的
    13. // 重写 doGet 方法 直接打 doGet 回车
    14. // 怎么让浏览器访问这个类,需要给这个类绑定一个地址
    15. // private Servlet01(){
    16. // System.out.println("创建Servlet对象");
    17. // }
    18. @Override
    19. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    20. System.out.println("hello servlet");
    21. // 假设这一行数据从Dao获取的
    22. List list = new ArrayList<>();
    23. list.add((new User(1,"张飞",0)));
    24. list.add((new User(2,"关羽",0)));
    25. list.add((new User(3,"赵云",1)));
    26. list.add((new User(4,"马超",1)));
    27. list.add((new User(5,"刘备",0)));
    28. // 把数据放在 req 一起带过去
    29. req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list
    30. // 把数据交给 jsp 展示
    31. // 获取一个调度器对象
    32. RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");
    33. // 调用调度器
    34. dispatcher.forward(req,resp);
    35. }
    36. public class User{
    37. private Integer id;
    38. private String name;
    39. private Integer sex;
    40. public User() {
    41. }
    42. public Integer getId() {
    43. return id;
    44. }
    45. public String getName() {
    46. return name;
    47. }
    48. public void setId(Integer id) {
    49. this.id = id;
    50. }
    51. public void setName(String name) {
    52. this.name = name;
    53. }
    54. public Integer getSex() {
    55. return sex;
    56. }
    57. public void setSex(Integer sex) {
    58. this.sex = sex;
    59. }
    60. public User(Integer id, String name, Integer sex) {
    61. this.id = id;
    62. this.name = name;
    63. this.sex = sex;
    64. }
    65. }
    66. }

    总结

    1.创建javaweb-02工程

       安装依赖

              servlet-api

              jstl 

              standard

        修改 web.xml 文件 (配置首页,替换版本让 EL 表达式生效)
        创建 Servlet 类 ,注册 URL 地址

        创建 JSP

        创建一个商品类 Product 

        id 

        name

        price

        stock  

        在Servlet 中创建一个list ,添加5个商品对象,调用JSP传递list

       在jsp中用jstl 和EL 表达式把数据取出来遍历到网页

       如果stock = 0 显示库存不足

    把 shop-dao 工程打包,作为三方库安装给javaweb-02工程

    创建 Servlet 类,注册URL地址

    调用 shop-dao 工程的 ProductDao 接口的工厂方法,拿到 ProductDao 的子类对象调用查询方法

    返回商品list 

  • 相关阅读:
    C语言每日一题(27)链表中倒数第k个结点
    devops-5-jenkins
    计算机毕业论文java毕业设计选题源代码ssm的校园单车自行车租赁系统|租车系统
    优先级反转那些事儿
    Java获取随机数
    AIGC驱动产品开发创新,改变你所知的一切!
    基于SSM的医院门诊预约挂号系统的设计与
    【线性代数基础进阶】矩阵-part1
    互联网技术岗笔试基础题目练习①
    阿里P9大牛徒手编写的这份十亿级并发手册,教你彻底玩懂高并发,赶紧收藏
  • 原文地址:https://blog.csdn.net/ZSDLZ37/article/details/126026885