JavaWeb笔记

JavaWeb笔记

1、JavaWeb

2、Tomcat

2.1、Tomcat是什么

​ Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

下载地址:https://tomcat.apache.org/

2.2、Tomcat文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aVaYbIxr-1614848913281)(C:\Users\jixiaoyun\Desktop\tomcatfile.png)]

几个重要的文件夹

  • bin文件夹:主要存放开启Tomcat和关闭服务的文件(windows:.bat文件,linux:.sh文件)
  • conf文件夹:放置Tomcat配置文件
  • lib文件夹:依赖库文件夹
  • webapps文件夹:放置网站

2.3、启动

windows:执行bin目录下的startup.bat文件

linux:执行bin目录下的startup.sh文件

2.3.1、可能出现问题
  1. 闪退:查看8080端口是否被其他程序占用
  2. 乱码:解码问题,并无关系

2.4、关闭

windows:关闭窗口

linux:执行shutdown.sh

3、Maven

3.1、Maven是什么

百度百科:

Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。

简单点讲就是管理jar包的工具。

3.2、约定大于配置

3.3、Maven下载

官网地址:https://maven.apache.org/

3.4、配置

3.4.1、环境变量(windows)

​ 此电脑右键-》属性-》高级系统设置-》环境变量-》系统变量中

新建俩条系统变量:

变量名:M2_HOME
变量值:Maven压缩后存放的位置\bin(例:D:\Maven\apache-maven-3.6.3\bin)

变量名:MAVEN_HOME
变量值:Maven压缩后存放的位置(例:D:\Maven\apache-maven-3.6.3\bin)

在系统变量Path中添加

%MAVEN_HOME%\bin

3.5、Maven仓库

3.5.1、网址

网址:https://mvnrepository.com/

找下载量多的下载,若更新年份较为久远可选新一些的下载量较多的版本。

3.5.2、pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
    <groupId>com.jiuzhao73</groupId>
    <artifactId>javaweb-01-servlet03ALL</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
</project>
3.5.3、导入

例子:

<dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

这也是servlet和jsp需要的jar包

4、Servlet

4.1、Servlet是什么

Servlet是一个java接口,用于处理网络的接口

俩个子类:

  • HttpServlet
  • GenericServlet

4.2、HttpServlet

UML关系图:
在这里插入图片描述

4.3、Servlet原理

Servlet由web服务器(Tomcat)调用,web服务器在收到浏览器请求:

在这里插入图片描述

4.4、servlet-mapping

将servlet的class路径映射到url中。

4.4.1、一个servlet-mapping映射一个路径
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
4.4.2、一个servlet-mapping映射多个路径
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>
4.4.3、一个servlet-mapping映射通用路径
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>
4.4.4、默认映射设置
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
4.4.5、后缀实现
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>.jiuzhao</url-pattern>
</servlet-mapping>
4.4.6、优先级问题

指定固有路径的映射优先级最高,如果找不到会前往默认的请求。

4.5、HttpServlet几个方法

4.5.1、方法
//getServletConfig()        获取Servlet配置
//getServletContext()       获取Servlet上下文
//getInitParameter()        获取初始化参数
4.5.2、web.xml参数

全局参数:

<!--全局上下文参数-->
<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306</param-value>
</context-param>

servlet参数:

<!--servlet的参数-->
<init-param>
    <param-name></param-name>
    <param-value></param-value>
</init-param>

4.6、ServletContext

在这里插入图片描述

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

多个servlet可以访问共同的ServletContext以达到以下几个目的:

4.6.1、共享数据

web.xml映射配置块

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.jiuzhao73.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>getName</servlet-name>
    <servlet-class>com.jiuzhao73.GetUserNameContextServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>getName</servlet-name>
    <url-pattern>/getName</url-pattern>
</servlet-mapping>

可以看成servlet1(作为写入上下文节点的Servlet类):

public class HelloServlet extends HttpServlet {
    //getServletConfig()        获取Servlet配置
    //getServletContext()       获取Servlet上下文
    //getInitParameter()        获取初始化参数
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter w = resp.getWriter();
        w.print("<h1>WELCOME!</h1>");
        getServletContext().setAttribute("UserName", "久曌");
        w.close();
    }

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

可以看成Servlet(作为读取上下文节点的servlet类)

public class GetUserNameContextServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter w = resp.getWriter();
        ServletContext context = getServletContext();
        Object val = context.getAttribute("UserName");
        if (val instanceof String) {
            w.print("姓名:" + val);
        }
        w.close();
    }

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

结果:在/getName中看到(姓名:久曌),说明多个Servlet共享同一个ServletContext,并且ServletContext可以进行数据共享。

4.6.2、获取初始化参数

创建getContextParam类:

public class getContextParam extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String val = getServletContext().getInitParameter("url");
        PrintWriter w = resp.getWriter();
        w.print(val);
        w.close();
    }

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

web.xml配置,让getContextParam可以读取

<!--配置参数-->
<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306</param-value>
</context-param>
<servlet>
    <servlet-name>getParam</servlet-name>
    <servlet-class>com.jiuzhao73.getContextParam</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>getParam</servlet-name>
    <url-pattern>/getParam</url-pattern>
</servlet-mapping>
4.6.3、请求转发
4.6.3.1、重定向与请求转发

请求转发:
在这里插入图片描述

重定向:

在这里插入图片描述

请求转发不需要知道C,重定向需要知道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值