静态 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
<%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%--Created by IntelliJ IDEA.User: LenovoDate: /7/28Time: 9:52To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Home</title></head><body><%//这里面可以写 java 代码List<String> list =new ArrayList<>();list.add("张飞");list.add("赵云");list.add("关羽");%><%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%><table border="1"><thead><th>编号</th><th>姓名</th></thead><tbody><%for (int i = 0; i < list.size(); i++) {%><tr><td><%= (i+1) %></td><td><%= list.get(i) %></td><%-- <%= 对Java 取值输出的代码 --%></tr><%}%></tbody></table></body></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
package com.iweb.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的// 重写 doGet 方法 直接打 doGet 回车// 怎么让浏览器访问这个类,需要给这个类绑定一个地址@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Hello servlet");}}
给 Servlet 类配置一个网络URL地址的方式有2种
1.在web.xml 文件中配置(老版本中使用的)
2.使用注解配置(Servlet-api 三方库的版本需要 4.0以上)
报错的话
看这个人的链接
(1条消息) 配置过程中常见的错误+url地址到Servlet程序的访问和原理_你好牛蛙的博客-CSDN博客_url 访问servlet
我的是这样子解决的
变成这样子
运行
在网页
输入
会在这里显示 s1 和 s2 所显示的东西
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("hello servlet");// 假设这一行数据从Dao获取的List<String> list = new ArrayList<>();list.add("张飞");list.add("关羽");list.add("赵云");list.add("马超");list.add("刘备");// 把数据放在 req 一起带过去req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list// 把数据交给 jsp 展示// 获取一个调度器对象RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");// 调用调度器dispatcher.forward(req,resp);}
从下面取出
为了 html 代码和 java 代码 分开
先
安装这两个三方库
<%--Created by IntelliJ IDEA.User: LenovoDate: /7/28Time: 9:52To change this template use File | Settings | File Templates.--%><%@ taglib prefix="c" uri="/jsp/jstl/core"%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Home</title></head><body><%//这里面可以写 java 代码// List<String> list =new ArrayList<>();// list.add("张飞");// list.add("赵云");// list.add("关羽");%><%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%><table border="1"><thead><th>编号</th><th>姓名</th></thead><tbody><%-- <%--%><%-- for (int i = 0; i < list.size(); i++) {--%><%-- %>--%><%-- <tr>--%><%-- <td><%= (i+1) %></td>--%><%--<td><%= list.get(i) %></td><%– <%= 对Java 取值输出的代码 –%>--%><%-- </tr>--%><%-- <%--%><%-- }--%><%-- %>--%><c:forEach items="${list}" var="user" > <%-- 遍历list 每遍历一个将list 取出值给 user--%><tr><td>${user.id}</td><td>${user.name}</td></tr></c:forEach></tbody></table></body></html>
package com.iweb.servlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.ArrayList;import java.util.List;@WebServlet(urlPatterns = "/s1")public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的// 重写 doGet 方法 直接打 doGet 回车// 怎么让浏览器访问这个类,需要给这个类绑定一个地址// private Servlet01(){// System.out.println("创建Servlet对象");// }@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("hello servlet");// 假设这一行数据从Dao获取的List<User> list = new ArrayList<>();list.add((new User(1,"张飞")));list.add((new User(2,"关羽")));list.add((new User(3,"赵云")));list.add((new User(4,"马超")));list.add((new User(5,"刘备")));// 把数据放在 req 一起带过去req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list// 把数据交给 jsp 展示// 获取一个调度器对象RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");// 调用调度器dispatcher.forward(req,resp);}public class User{private Integer id;private String name;public User() {}public Integer getId() {return id;}public String getName() {return name;}public User(Integer id, String name) {this.id = id;this.name = name;}}}
这时候不支持 ${}
直接请求Home.jsp 没有数据
需要请求 Servlet (url="s1")
Home.jsp
<%--Created by IntelliJ IDEA.User: LenovoDate: /7/28Time: 9:52To change this template use File | Settings | File Templates.--%><%@ taglib prefix="c" uri="/jsp/jstl/core"%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Home</title></head><body><%//这里面可以写 java 代码// List<String> list =new ArrayList<>();// list.add("张飞");// list.add("赵云");// list.add("关羽");%><%-- 这里可以写 HTML CSS JS 代码 ,不能写 Java 代码--%><table border="1"><thead><th>编号</th><th>姓名</th><th>性别</th></thead><tbody><%-- <%--%><%-- for (int i = 0; i < list.size(); i++) {--%><%-- %>--%><%-- <tr>--%><%-- <td><%= (i+1) %></td>--%><%--<td><%= list.get(i) %></td><%– <%= 对Java 取值输出的代码 –%>--%><%-- </tr>--%><%-- <%--%><%-- }--%><%-- %>--%><c:forEach items="${list}" var="user" > <%-- 遍历list 每遍历一个将list 取出值给 user--%><tr><td>${user.id}</td><td>${user.name}</td><c:if test="${user.sex == 0 }"> <%--test = 条件--%><td>女</td></c:if><c:if test="${user.sex == 1 }"><td>男</td></c:if></tr></c:forEach></tbody></table></body></html>
servlet01
package com.iweb.servlet;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.ArrayList;import java.util.List;@WebServlet(urlPatterns = "/s1")public class Servlet01 extends HttpServlet {//需要继承这个类 , 这个类是三方库里面的// 重写 doGet 方法 直接打 doGet 回车// 怎么让浏览器访问这个类,需要给这个类绑定一个地址// private Servlet01(){// System.out.println("创建Servlet对象");// }@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("hello servlet");// 假设这一行数据从Dao获取的List<User> list = new ArrayList<>();list.add((new User(1,"张飞",0)));list.add((new User(2,"关羽",0)));list.add((new User(3,"赵云",1)));list.add((new User(4,"马超",1)));list.add((new User(5,"刘备",0)));// 把数据放在 req 一起带过去req.setAttribute("list",list);//k 数据的名字字符串 v 指针名list// 把数据交给 jsp 展示// 获取一个调度器对象RequestDispatcher dispatcher = req.getRequestDispatcher("Home.jsp");// 调用调度器dispatcher.forward(req,resp);}public class User{private Integer id;private String name;private Integer sex;public User() {}public Integer getId() {return id;}public String getName() {return name;}public void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}public User(Integer id, String name, Integer sex) {this.id = id;this.name = name;this.sex = sex;}}}
总结
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