章二十、Servlet ——

news2024/11/15 9:39:06

一、 web开发概述


所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互,流程如下:

  什么是服务器?

        Web服务器是指驻留于因特网上某种类型计算机的程序,它可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览; 它是一个容器,是一个连接用户与程序之间的中间件

WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、 WebLogic、Jboss等

        在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Apache 的Tomcat,该服务器支持全部JSP以及Servlet规范

二、 web开发环境搭建


Tomcat官方站点:http://tomcat.apache.org

注:JDK8 对应的版本为 Tomcat 9

  获取Tomcat安装程序包

tar.gz文件是Linux操作系统下的安装版本

zip文件是Windows系统下的压缩版本

  安装JDK

设置JAVA_HOME环境变量

设置PATH环境变量

  安装Tomcat

解压tomcat压缩文件

  Tomcat 的目录层次结构

  运行

双击 bin 目录下的 startup.bat 文件

输入:

http://localhost:端口号 (一般是8080)

或http:127.0.0.1:端口号

或局域网ip:端口号

        先打开startup.bat,再打开浏览器,在地址栏中输入http://localhost:8080或localhost:8080回车,如果看到Tomcat自带的一个JSP页面,说明JDK和Tomcat已搭建成功。

  常见问题

乱码

问题描述:打开 startup.bat 后汉字乱码

解决方法:在 .\apache-tomcat-9.0.43\conf下打开logging.properties文件

将 java.util.logging.ConsoleHandler.encoding = UTF-8
替换为 java.util.logging.ConsoleHandler.encoding = GBK

与其他服务的端口号冲突

        tomcat端口号默认8080,如果和其他服务的端口号冲突,则可对端口号进行修改在.\apache-tomcat-9.0.43\conf下打开server.xml文件,在文件的69行左右,将port="8080"修改为指定某一端口号,重新启动。

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

三、 web开发环境搭建


创建并发web项目

1.创建javaWeb项目

2.发布web应用到服务器

自动将web应用发布到web服务器下,需要在开发工具中集成 tomcat进来

  打开IDEA,创建新项目:

 

 junit 的配置这部分可以直接删除

  新建Web后端项目

  在IDEA部署Tomcat

在IDEA中集成Tomcat后,修改代码后,可以直接部署到Tomcat 中

注意是Tomcat Server 中的 Local

选择bin的上级目录 

OK

把这个取消掉

删掉后缀,避免后续麻烦(至于会有什么麻烦,我也不到哇,老师是这么教的)

OK,添加成功 

  运行,测试

点击运行,等待,在webapps中找到该项目,点击index.html,打开

四、 Servlet


        Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序,它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法。

  Servlet的作用

1、接收用户发送的请求数据

2、调用其他的java程序来处理请求

3、根据处理结果,将结果响应给客户端

  Servlet创建和使用

1、创建一个类继承javax.servlet.http包下的HttpServlet

2、在web.xml文件中配置Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置Servlet程序-->
    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>com.ffyc.dormServer.web.DemoServlet</servlet-class><!-- 全类名 -->
    </servlet>

    <!-- 为servlet程序配置一个地址 -->
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

</web-app>

3、运行Servlet程序

通过浏览器访问http:localhost:8088/项目名/配置的url

例如我的项目名也是 dormServer 配饰的url是 /demo

控制台:

        由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在 web.xml 文件中使用<servlet>元素和<servlet-mapping>元素完成

问题:

解决: 前面的端口号是正确的,不然会是直接无法访问,那么错误的就会是 /项目名/配置的url 中的项目名错误或者URL错误

如果部署后修改了代码,然后发现怎么编译都不行,这个时候就要用maven 中的clean来清除部署,然后重新加载

五、 Servlet生命周期


  创建

只被调用一次,只有第一次访问Servelt时创建Servlet实例,由服务器创建

  初始化

构造方法执行完成后,调用init()执行一些初始化操作

  服务

每次请求时调用service()方法

  销毁

服务器关闭时,会销毁Servlet对象,并且在销毁servlet对象时,会自动调用destroy()方法,执行一些最总操作

六、 http协议


什么是HTTP?

        超文本传输协议 (HyperText Transfer Protocol)服务器传输超文本到本地浏览器的传送协议,是互联网上应用最为流行的一种网络协议,用于定义客户端浏览器和服务器之间交换数据的过程。

        HTTP是一个基于TCP/IP通信协议来传递数据.

        HTTP是一个属于应用层的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

七、 http请求


  http请求?

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。

请求包括:请求行,请求头,请求体 

请求行包含:http请求方式,请求资源名称,http版本

请求头包含主机地址,以及客户端的一些环境信息,以键值对的形式传递:

Host: 127.0.0.1:8088 请求的主机地址

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

浏览器能够处理的内容类型

Accept-Encoding: gzip, deflate, br 浏览器能够处理的压缩编码

Accept-Language: zh-CN, zh; q = 0.9 浏览器当前设置的语言

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like

Gecko) Chrome/69.0.3497.100 Safari/537.36 使用的浏览器和操作平台信息

Connection: keep-alive 浏览器与服务器之间连接的类型

请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析

username=admin&userpwd=123

  http请求!

GET方式:

        超链接访问,默认是GET方式

        form提交,不指定method,默认为GET方式

POST方式:

        form提交,指定method=“POST”

Get方式与post方式的区别:

        Get方式主要是从服务器获取信息;post主要是想服务器提交信息

        Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在请求体中提交。

get方式:

post方式:

        GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而 POST则没有此限制。

  http请求~

请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest来表示请求。

HttpServletRequest :封装了请求的信息,可以从中获取任何请求信息。

getParameter( "name" ) --- String 通过name获得值

处理post请求中文乱码 request.setCharacterEncoding(编码格式)

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("dopost");
        //设置解码的编码格式
        req.setCharacterEncoding("utf-8");

        String account = req.getParameter("account");
        String password = req.getParameter("password");
        System.out.println(account);
        System.out.println(password);

    }

  http请求。

都是 HttpServletRequest req 中的方法

getMethod()得到客户机请求方式

getScheme()请求协议

getRemoteAddr()返回发出请求的客户机的IP地址

getServerName()服务器名(ip或域名)

getServerPort()服务器端口

八、 http响应


  http响应?

一个http响应代表服务器向客户端回送的数据,它包括:响应行,响应头,响应体。

响应行里包含了http协议版本,以及用于描述服务器对请求的处理结果。

HTTP/1.1 (协议版本) 200(状态吗) OK(状态码描述)

状态码:服务器和浏览器用于确定状态的固定数字号码

200:请求成功

302:请求重定向

400:语义有误,当前请求无法被服务器理解或请求参数有误

404:请求资源不存在,通常是路径写错了或者服务器资源删除了

500:服务内部错误(代码异常)

响应头用于描述服务器的基本信息,以及数据描述

Server        Apache-Coyote/1.1

Content-Type        text/html;charset=UTF-8

Content-Length         0

Date        Wed, 13 Sep 2017 02:26:07 GMT

响应体代表服务器向客户端浏览器回送的正文

  http响应

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个代表响应的HttpServletResponse 对象。

九、 过滤器


  过滤器

        Filter 也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过 Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)

Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。

使用场景:

1、统一编码过滤

2、权限验证

3、跨域过滤

  过滤器接口

Servlet API 中,与过滤器有关的API共有三个接口,分别是

Filter

FilterChain

FilterConfig

  Filter

Filter接口是过滤器类必须实现的接口,该接口中有三个方法。

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数 FilterConfig可以获得filter的初始化参数。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对 request 和 response 进行预处理。其中FilterChain可以将处理后的 request 和 response 对象传递到过滤链上的下一个资源。

destroy():该方法在容器销毁过滤器对象前被调用。

法一:只通过重写 doFilter方法来实现编码过滤器(编译后不好修改,智能通过对原码进行修改后重编译)

定义类,实现Filter接口,在接口中重写doFilter方法

package com.ffyc.dormServer.filter;

import javax.servlet.*;
import java.io.IOException;

/*
定义统一编码过滤
 */
public class EncodFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest,servletResponse);//让请求离开当前过滤器项目
    }
}

然后再web,xml中将过滤器导入

法二:直接定义 requncod 和 respencod ,然后通过重写 init 方法来获取 web.xml文件中定义的参数,再在 doFilter方法中直接通过变量实现编码过滤器(程序编译后,仍可通过修改web.xml文件来修改编码过滤器的条件)

package com.ffyc.dormServer.filter;

import javax.servlet.*;
import java.io.IOException;

/*
定义统一编码过滤
 */
public class EncodFilter implements Filter {
    String requncod = "";
    String respencod = "";

    //可以通过调用web.xml中的来修改
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        requncod = filterConfig.getInitParameter("reqencod");
        respencod = filterConfig.getInitParameter("respencod");
        System.out.println(requncod);
        System.out.println(respencod);
    }

//    //编译后难以修改
//    @Override
//    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//        System.out.println("编码过滤器");
//        servletRequest.setCharacterEncoding("utf-8");//设置请求数据编码格式
//        servletResponse.setContentType("text/html;charset=utf-8");//设置相应内容编码格式
//        filterChain.doFilter(servletRequest,servletResponse);//让请求离开当前过滤器项目
//    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("编码过滤器");
        servletRequest.setCharacterEncoding(requncod);//设置请求数据编码格式
        servletResponse.setContentType(respencod);//设置相应内容编码格式
        filterChain.doFilter(servletRequest,servletResponse);//让请求离开当前过滤器项目
    }

}

相比上一个多了两个参数 reqencod ,respencod

  FilterChain

  FilterConfig

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法的学习笔记—反转链表(牛客JZ24)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是一个常见的考点&#xff0c;而反转链表更是其中的经典题目之一。本篇文章将通过具体的代码实现和思路解析&#xff0c;带你深入理解反转链表的解法。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;反…

【前端】NodeJS:项目上线

文章目录 1 项目上线1.1 搭建本地仓库1.1.1 初始化仓库1.1.2 全局忽略1.1.3 提交 1.2 连接远程仓库1.2.1 新建仓库1.2.2 复制地址1.2.3 添加远程存储库 1.3 发布项目 2 配置HTTPS证书2.1 HTTPS2.2 操作流程: 1 项目上线 1.1 搭建本地仓库 1.1.1 初始化仓库 1.1.2 全局忽略 1.…

福泰轴承股份有限公司进销存系统pf

TOC springboot413福泰轴承股份有限公司进销存系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#…

Idea里配置Maven版本

一、安装Maven 1. 官网下载maven地址&#xff1a; Maven – Download Apache Maven Binary是可执行版本&#xff0c;已经编译好可以直接使用。 Source是源代码版本&#xff0c;需要自己编译成可执行软件才可使用。tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是…

AWS域名注册服务:为您的在线业务打下坚实基础

在如今的数字时代&#xff0c;域名是每个在线业务的基础。一个好的域名不仅可以提升品牌形象&#xff0c;还能为用户提供便捷的访问体验。亚马逊网络服务&#xff08;AWS&#xff09;提供了强大的域名注册服务&#xff0c;帮助企业轻松获取和管理域名。我们九河云将深入探讨AWS…

Spring:IOC的详解☞Bean的实例化、Bean的生命周期

1、Bean基础配置 bean的基础配置&#xff1a; <bean id"" class""/> Bean的别名&#xff1a;name属性 Bean的作用范围&#xff1a;scope配置 使用bean的scope属性可以控制bean的创建是否为单例&#xff1a; singleton 默认为单例prototype 为非单…

HiveSQL:提取json串内容——get_json_oject和json_tuple

提取json串中内容&#xff0c;json格式示例如下 方法&#xff08;运行环境Hive&#xff09; get_json_objectjson_tuple get_json_object select json_data,get_json_object(json_data,$.price) as price -- 取第一层,get_json_object(json_data,$.inquiry_params) as in…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整&#xff0c;设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

wordpress资源下载博客站微信小程序源码v1.0

小程序说明&#xff1a; 本套源码基于hbuilder制作&#xff0c;支持QQ小程序&#xff0c;微信小程序等各大平台小程序版本&#xff0c;小程序需要配合后端wordpres系统管理发布&#xff0c;带有广告功能&#xff0c;非常适合运营。 功能说明&#xff1a; 1.全新pods rest a…

IDEA中如何配置Gradel加速与相关依赖找不到如何解决?

如何配置依赖加速 参考文章: https://www.cnblogs.com/yongdaimi/p/17892882.html 配置步骤 新版本的IDEA中进行插件开发需要单独下载开发插件 具体配置一下镜像加速 安装好上面的插件,进行下面这些配置。 在上面本地安装路劲在进行镜像加速的配置 新建一个init.gra…

数学建模——评价决策类算法(熵权法、模糊综合评价)

一、熵权法&#xff08;求解权重&#xff09; 概念原理 代码 import numpy as np # 导入numpy库&#xff0c;并简称为np# 定义一个自定义的对数函数mylog&#xff0c;用于处理输入数组中的零元素 def mylog(p):n len(p) # 获取输入向量p的长度lnp np.zeros(n) # 创建一个…

C语言典型例题42

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题3.2 有3个整数a&#xff0c;b&#xff0c;c&#xff0c;由键盘输入&#xff0c;输出其中最大的数&#xff0c;请编程序。 代码&#xff1a; //《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 //习…

URP 2022.3 custom render pass

这里需要注意&#xff0c;有两个部分要做&#xff0c;一步是写脚本和shader&#xff0c;一步是在editor里进行绑定 这里有个概念上需要注意的&#xff0c;他这个pass啊&#xff0c;实际依赖问题都需要你自己在execute处理的&#xff0c;比如你要画N次东西&#xff0c;就要在exe…

管易云·奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单)

管易云奇门与MySQL对接集成历史发货单查询连通执行操作-v1(管易历史发货单) 接通系统&#xff1a;管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌&#xff0c;先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务&#xff0c…

算法力扣刷题记录 八十三【96.不同的二叉搜索树】

前言 动态规划第9篇。记录 八十三【96.不同的二叉搜索树】。 一、题目阅读 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输…

开箱即用的企业级CICD工具-云效流水线 Flow

开箱即用的企业级CICD工具-云效流水线 Flow 开箱即用的企业级CICD工具-云效流水线 Flow资源领取实操来啦编排流水线新建主机组运行流水线运行结果 关于 云效流水线 Flow 的一些看法操作感受新人建议满意与建议流水线Flow 优势 开箱即用的企业级CICD工具-云效流水线 Flow 看到这…

短视频SDK解决方案,降低行业开发门槛

美摄科技匠心打造了一款集前沿技术与极致体验于一体的短视频SDK解决方案&#xff0c;它不仅重新定义了短视频创作的边界&#xff0c;更以行业标杆级的短视频特效&#xff0c;让每一帧画面都闪耀不凡光芒。 【技术赋能&#xff0c;创意无限】 美摄科技的短视频SDK&#xff0c;…

OceanBase V4.3 列存引擎之场景问题汇总

在OceanBase 4.3版本发布后&#xff08;OceanBase社区版 V4.3 免费下载&#xff09;&#xff0c;其新增的列存引擎&#xff0c;及行列混存一体化的能力&#xff0c;可以支持秒级实时分析&#xff0c;引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…

Linux系统top命令参数说明

目录 一、top命令概览 二、参数说明 一、top命令概览 二、参数说明 第一行&#xff1a;系统的整体情况概览 top:表示这是个top命令 10:53:55:表示当前系统时间 up 17 days, 19:10:表示系统运行时间 1user:表示当前登录用户人数 load average:表示1分钟/5分钟/15分钟 系统负载…

LangChain 实战案例:老喻干货店的 TextToSql 应用解析

前言 当我们在做项目开发时&#xff0c;数据库设计是项目早期的核心工作之一。我们要考虑业务需要用到的表、关联、索引&#xff0c;并预想出未来核心需求或易产生瓶颈的SQL。当这些事情做完&#xff0c;就可以喝杯咖啡&#xff0c;到前台摸鱼会儿了… 如果你是刚入门数据库学…