javaweb

本文详细介绍了JavaWEB开发的基础概念,包括静态和动态web、web应用程序、web服务器、Tomcat的安装与配置,以及HTTP协议。接着讲解了Maven的使用、Servlet的原理与实践、Cookie和Session的管理,JSP的基础语法和应用,以及MVC架构。此外,还涵盖了过滤器、监听器、JDBC和单元测试等方面,最后以一个超市订单管理系统的项目为例,展示了实际开发流程。
摘要由CSDN通过智能技术生成

JavaWEB

1.1.基本概念

web开发:

  • web:网页

  • 静态web

    • html,css
    • 提供给所有人看的数据始终不会发生改变
  • 动态web

    • 提供给所有人看的数据始终会发生改变
    • 技术栈:servlet/jsp,asp,php

在Java中,动态web资源开发的技术称为JavaWEB

1.2.web应用程序

web应用程序:可以提供浏览器访问的程序

  • a.html,b.html…多个web资源,这些web能被外部访问
  • 能访问到的任何一个页面或者资源,都存在某一个计算机上
  • url:
  • 这些统一的web资源会被放在同一个文件夹下,web应用程序----->Tomcat:服务器
  • 一个web应用由多部份组成(静态web,动态web)
    • html,css,js
    • jsp,servlet
    • Java程序
    • jar包
    • 配置文件(Properties)

web应用程序编写完毕后,若想提供给外界访问,需要一个服务器

1.3.静态web

  • *.html网页后缀,如果服务器上一直存在这些东西,我们就可以直接访问

  • 静态web的缺点
    • web页面无法更新,所有用户看到的都是同一个页面
    • 无法和数据库交互,数据无法持久化,用户无法交互

1.4.动态web

页面会动态展示:“web的页面展示的效果因人而异”

缺点:

  • 假如服务器的动态web资源出现错误,我们需要重写编写我们的后台程序,重新发布
    • 停机维护

优点:

  • 可以动态更新
  • 可以与数据库交互(数据持久化)

2.web服务器

2.1技术

asp,

  • 微软:国内最早流行的是asp
  • 在html中嵌入了vb脚本,asp+com;
  • 在asp开发中,基本一个页面都有几千行的业务逻辑代码
  • 维护成本高
  • C#
  • iis服务器

php

  • PHP开发速度快,功能很强大,跨平台,代码简单
  • 无法承载大访问量的情况

jsp/servlet

  • sun公司主推的B/S架构
  • 基于Java语言,所有的大公司和开源的组件都是Java开发
  • 可以承载三高问题带来的影响

2.2web服务器

服务器是一种被动操作,用来处理用户的一些请求和一些响应信息

IIS

微软的:运行asp程序

Tomcat

下载Tomcat:

1.安装

2.了解配置文件及目录结构

3.这个东西的作用

3.Tomcat

3.1安装Tomcat

3.2Tomcat启动和配置

启动,关闭Tomcat

测试连接

localhost:8080

可能遇到的问题:

  1. Java环境变量没有配置
  2. 闪退问题:需要配置兼容性
  3. 乱码问题:配置文件中的设置

3.3配置

可以配置启动的端口号

可以配置主机名称

面试题:

1.输入域名:

2.查找本机的dns缓存

​ 找不到再去找本机的host文件

​ 再找不到就去访问dns服务器

3.4发布一个web网站

4.HTTP

4.1.什么是HTTP

超文本传输协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器传送协议

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

4.2.两个时代

  • http1.0
    • http/1.0:客户端可以与web服务器连接,只能获得一个资源,请求一次就断开连接
  • http2.0
    • http/1.1:客户端可以与web服务器连接,可以获得多个资源

4.3.http请求

客户端–请求–服务器

1.请求行

  • 请求行中的请求方式:GET
  • 请求方式:Get,post
    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的url地址栏显示数据内容,不安全,但高效
    • post:请求能够携带的参数没有限制,大小没有限制,不会会在浏览器的url地址栏显示数据内容,安全,但不高效

2.消息头

4.4.http响应

服务器–响应–服务器

1.响应体

2.响应的状态码

200:请求响应成功

3**:请求重定向

  • 重定向:你重新到我给你的新的位置

4xx:找不到资源 404

  • 资源不存在

5xx:服务器代码错误 500

​ 网关错误:502

常见面试题:

当你的浏览器中地址栏输入地址并回车的一瞬间能够展示回来,经历了什么

5.Maven

为什么要学maven?

1.在Javaweb开发中,需要使用大量的jar包

2.如何能够让一个东西自动帮助我们导入和配置这个jar包

​ 由此,maven诞生

5.1maven项目架构管理工具

我们目前用它来方便导入jar包的

maven的核心思想:约定大于配置

  • 有约束,不要去违反

maven会规定好你如何去编写我们的Java代码,必须按照这个规范来

5.2安装

下载完成后解压即可

5.3环境变量配置

在我们系统环境变量中进行如下配置

  • M2_HOME maven目录下的bin目录
  • MAVEN_HOME maven的目录
  • 在系统的path中的配置%MAVEN_HOME%\BIN

5.4配置镜像

  • 镜像:
    • 作用:加速我们的下载
    • 建议使用阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<!--mirrorOf>central</mirrorOf-->
<mirrorOf>*</mirrorOf>
</mirror>

5.5本地仓库

在本地的仓库,远程仓库

建立一个本地仓库:

/path/to/local/repo

5.6在idea中使用maven

1.启动IDEA

2.创建一个maven web项目

4.观察maven仓库的变化

5.idea中的maven设置

idea项目创建成功后,看一眼maven设置

6.到这里,maven在idea中的配置就完成了

5.7创建一个普通的maven项目

不使用模板直接创建

这个只有在web应用下才会有的

5.8在idea中标记文件夹功能

在使用模板建好的maven项目下我们在建一个Java和resources目录,并指定他们的功能

5.9在idea中配置tomcat

上面warning解决:

为什么会出现这个警告:我们访问呢一个网站,需要指定一个文件夹的名字,所以我么一定要配置

5.10pom文件

pom.xml是maven的核心配置文件

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

<?xml version="1.0" encoding="UTF-8"?>

<!--maven版本和头文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!--这里是我们刚才配置的GAV-->
  <groupId>com.cyz</groupId>
  <artifactId>javaweb-01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!--package:项目的打包方式
  jar:Java应用程序
  war:Javaweb应用
  -->
  <packaging>war</packaging>

  <name>javaweb-01-maven Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <!--配置-->
  <properties>
    <!--项目的默认构建版本-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--编码版本-->
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <!--项目依赖-->
  <dependencies>
    <!--具体依赖的jar包配置文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>

  <!--项目构建用的东西-->
  <build>
    <finalName>javaweb-01-maven</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

我们在bulid下建立resource

5.13解决遇到的问题

1.maven 3.6.2不能导出项目

2.Tomcat闪退

3.idea中每次都要重复配置maven

4.maven项目中的tomcat无法配置

5.maven导出文件问题

6.servlet

6.1.servlet简介

  • servlet就是sun公司开发动态web的一门技术
  • sun公司在这些api中提供了一个接口叫做:servlet,如果想开发一个servlet程序,只需要完成两个小步骤:
    • 编写一个类,实现servet接口
    • 把开发好的Java类部署到web服务器中

把实现了servlet接口的Java程序叫做servlet

6.2,HelloServlet

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

参考博客:https://www.cnblogs.com/logsharing/p/8448446.html

servlet接口在sun公司有两个默认的实现类:HttpServlet,GenericServlet

步骤:

1.构建一个普通的maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立moudel,这个空的工程就是maven的主工程

2.关于maven父子工程的关系

​ 父项目中会有一个

    <modules>
        <module>javaweb-01-moudl-maven</module>
    </modules>

​ 子项目中会有一个

    <parent>
        <artifactId>javaweb-03-maven</artifactId>
        <groupId>com.cyz</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

父项目中的Java子项目可以使用

3.maven环境优化

​ 【1】修改web.xml为最新的

​ 【2】将maven的结构搭建完整

4.编写一个servlet程序

​ 【1】编写一个普通类

​ 【2】实现servlet接口,我们直接继承HttpServlet

public class HelloServlet extends HttpServlet {
   
    //由于get或post只是请求的方式不同,所以可以相互调用,业务逻辑一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        PrintWriter writer = resp.getWriter();
        writer.print("hello word");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        doGet(req,resp);
    }
}

5.编写servlet的映射

为什么需要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的servlet,还需要给他一个浏览器能够访问的路径

由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用元素和元素完成。
  元素用于注册Servlet,它包含有两个主要的子元素:和,分别用于设置Servlet的注册名称和Servlet的完整类名。
一个元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:和,分别用于指定Servlet的注册名称和Servlet的对外访问路径。
————————————————
原文链接:https://blog.csdn.net/honghailiang888/article/details/50585475

    <!--注册Servlet-->
  <servlet>
    <servlet-name>servlet</servlet-name> <!--注册servlet的名称,以什么名称注册-->
    <servlet-class>com.cyz.servlet.HelloServlet</servlet-class><!--注册的servlet的类的全名称,包括包名-->
  </servlet>
<!--映射servlet到url上-->
  <servlet-mapping>
    <servlet-name>servlet</servlet-name> <!--已经注册的servlet的名称-->
    <url-pattern>/*</url-pattern><!--映射到的url路径-->
  </servlet-mapping>

6.配置tomcat

注意:配置项目发布的路径

7.启动测试

6.3servlet原理

servlet是由web服务器调用,web服务器在收到浏览器请求后,会:

6.4mapping

1.一个servlet可以指定一个映射路径

2.一个servlet可以指定多个映射路径

3.一个servlet可以指定通用映射路径

4.指定一些后缀或前缀,如:*.cyz注意:*前面不能加请求路径

6.优先级问题

​ 指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

  <servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.cyz.servlet.ErrorServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

6.5 ServletContext

ServletContext:web应用程序的上下文

web程序和上下文的关系,这里引用一下来说明:如果对“上下文”不太了解的,我这边说下,程序里面所谓的“上下文”就是程序的执行环境,打个比方:你有家吧?如果家都没有就别学编程了,租的也行啊!你就相当于web程序,家就相当于web程序的上下文,你可以在家里放东西,也可以取东西,你的衣食住行都依赖这个家,这个家就是你生活的上下文环境。

web容器在启动的时候,他会为每个web程序都创建一个对应的servletContext对象,他代表了当前的web应用

servletContext在servlet之上,由下图可知,他们拿的都是同一个servletcontext

1.共享数据

我在这个servlet中保存的数据,可以在另外一个servlet中拿到

存放数据的类
    package com.cyz.servlet;

import javax.servlet.ServletContext;
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 PutServlet extends HttpServlet {
   

    /*
    public ServletContext getServletContext() {
        ServletConfig sc = this.getServletConfig();
        if (sc == null) {
            throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
        } else {
            return sc.getServletContext();
        }
    }
    */
    //this.getServletContext()  servlet上下文
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
       //在ServletContext中放入数据
        String name = "陈颍州";
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("username", name); //将一个数据保存在servletcontext中 键值对 key:value
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        doGet(req, resp);
    }
}

获取数据的类
    package com.cyz.servlet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值