Servlet_Web小结

1.web开发概述

什么是服务器?

解释一:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.
可以在服务器中部署文件,让他人访问

解释二:也可以把运行服务器软件的计算机也可以称为服务器。

web开发: 指的是从网页中向后端程序发送请求 , 与后端程序进行
交互 .
流程图如下 :
Web服务器是指驻留于因特网上某种类型计算机的程序。
可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界
浏览; 它是一个容器,是一个连接用户与程序之间的中间件。
WEB服务器有很多,流行的WEB服务器有Tomcat 、 WebSphere 、
WebLogic、Jboss等

2.web开发环境搭建

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

1.获取Tomcat安装程序包:

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

2.安装JDK

  设置JAVA_HOME环境变量
设置PATH环境变量
安装Tomcat
解压tomcat压缩文件
Tomcat 的目录层次结构
双击 bin 目录下的 startup.bat 文件(出现下图,说明已经安装成功,若错误,得重新配置环境变量)
输入 http://localhost:端口号(打开conf文件,修改server.xml文件,打开Notepad++可以修改端口号)
或http:127.0.0.1:端口号
或局域网ip:端口号

3.创建并发web项目

1.创建javaWeb项目
2.发布web应用到服务器
自动将web应用发布到web服务器下,需要在开发工具中集成tomcat进来
结果

3.Servlet

1.概述

Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序.
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用
Servlet方法。
Servlet的作用:
1.接收用户发送的请求数据
2.调用其他的java程序来处理请求
3.根据处理结果,将结果响应给客户端

2.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"><!--.xml文件:ml结尾的,也是一种标记语言,设计的目的是用来在项目中存储配置信息的,制定好就可以使用那些标签即可web.xml文件:存储web后端的配置信息,在服务器启动时,由服务器加载读取的,--><!--配置servlet程序 把我们开发的servlet程序注册到服务器,有服务器启动时加载,在第一次访问时,由服务器创建对象,--><servlet><servlet-name>demo</servlet-name><servlet-class>com.ffyc.dormServer.web.DemoServlet</servlet-class>
<init-param><!-- 向servlet中配置一些参数--><param-name>count</param-name><param-value>10</param-value>
</init-param></servlet><!--为servlet配置一个访问地址--><servlet-mapping><servlet-name>demo</servlet-name><!--为指定name的servlet程序配置访问地址--><url-pattern>/demo</url-pattern><!--配置的供外界访问的地址 必须以/开头--></servlet-mapping><!--注册登录处理的servlet程序--><servlet><servlet-name>login</servlet-name><servlet-class>com.ffyc.dormServer.web.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
</web-app>
3.运行Servlet程序
通过浏览器访问 http:localhost:8080/ 项目名 / 配置的 url
web端:
后端:

3.Servlet对象生命周期

创建(实例化):
第一访问Servlet程序时,由服务器创建

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

服务:
每次请求调用service()

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

执行代码:(及注意事项)

import javax.servlet.ServletConfig;
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 LoginServlet extends HttpServlet {//无参构造默认是存在/*init()方法在没有需要初始化操作时可以不用重写,但是服务器会调用父类中的init()*//* @Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);}*/@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("执行登录处理");}
//destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()/*@Overridepublic void destroy() {super.destroy();}*/
}

4.HTTP协议

1.http请求概述

http请求?
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器
发送了一个http请求。
请求包括:
请求行,请求头,请求体 .
请求行:请求的方式,请求资源名称
请求头:包含客户端的一些环境信息,这些信息都是由浏览器自动发送的,以键值对形式传递
请求体:以表单post方式向后端发送的请求数据,在请求体中包含请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析.
例如:username=admin&userpwd=123
get请求:
 get请求主要是从后端获取信息,例如网页上的超链接,向后端传递少量信息,获得大量信息。
 请求数据在请求地址中直接拼接,所以传输的数据量有限的,并且敏感数据不安全。
 
 post请求:主要用于向后端发送大量数据,请求数据在请求体中,可以传输大量数据,不会在地址中显示,所以相对安全。
Get方式与post方式的区别
  Get方式主要是从服务器获取信息;post主要是想服务器提交信息
  Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据
放置在请求体中提交。
  GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而
POST则没有此限制

2.简单的交互代码

web前端

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
      <a href=" http://127.0.0.1:8008/dormServer/login?account=1111&&password=2222">登录</a>
        <form action="http://127.0.0.1:8008/dormServer/login" method="post">
        账号:<input  type="text" name="account" value=""/><br/>
        密码:<input type="password" name="password" value=""/><br/>
        <input type="submit" value="登录"/>
        </form>
    </body>
</html>

点击登录按钮,向后端提交你输入的账号和密码。

浏览器的网络断端检测到的对login发送的信息,及请求类型POST

web后端

package com.ffyc.dormServer.web;import javax.servlet.ServletConfig;
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 LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("执行登录处理");//接受前端提交的数据String account=req.getParameter("account");String password=req.getParameter("password");System.out.println(account);System.out.println(password);}}

后端显示前端输入的账号和密码。

由于前端请求有get 和post两种,在后端的处理略有不同,所以在父类的方法中,会根据请求方式的不同,会调用doGet或者doPost方法,分别处理。
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 LoginServlet extends HttpServlet {/*用来处理get请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doGet()");String name=req.getParameter("name");String age=req.getParameter("age");Integer.parseInt(age);System.out.println(name);System.out.println(age);}
/*用来处理post请求*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//设置解码的编码格式System.out.println("doPost()");String account=req.getParameter("account");String password=req.getParameter("password");System.out.println(account);System.out.println(password);}//destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()/*@Overridepublic void destroy() {super.destroy();}*/}

3.Http请求的常用方法

System.out.println(req.getMethod());//获取请求方式
System.out.println(req.getProtocol());//获取请求协议
System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名
System.out.println(req.getServerPort());//获得服务端口号
System.out.println(req.getRemoteAddr());//获得客户端ip
System.out.println(req.getRemotePort());//获得客户端端口
System.out.println(req.getHeader("User-Agent"));//获得客户机信息
System.out.println(req.getHeader("Accept-Language"));
req.setCharacterEncoding("utf-8");//设置解码的编码格式

实验代码:

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 LoginServlet extends HttpServlet {/*用来处理get请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受我们自己向后端发送的数据System.out.println("doGet()");String name=req.getParameter("name");String age=req.getParameter("age");Integer.parseInt(age);System.out.println(name);System.out.println(age);//接收请求行和请求头的数据。System.out.println(req.getMethod());//获取请求方式System.out.println(req.getProtocol());//获取请求协议System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名System.out.println(req.getServerPort());//获得服务端口号System.out.println("====================");System.out.println(req.getRemoteAddr());//获得客户端ipSystem.out.println(req.getRemotePort());//获得客户端端口System.out.println(req.getHeader("User-Agent"));//获得客户机信息System.out.println(req.getHeader("Accept-Language"));}}

运行结果:

4.Http响应

代码:

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class LoginServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("执行登录处理");//接受前端提交的数据String account=req.getParameter("account");String password=req.getParameter("password");System.out.println(account);System.out.println(password);}
*/
/*用来处理get请求*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//接受我们自己向后端发送的数据System.out.println("doGet()");String name=req.getParameter("name");String age=req.getParameter("age");Integer.parseInt(age);System.out.println(name);System.out.println(age);//接收请求行和请求头的数据。System.out.println(req.getMethod());//获取请求方式System.out.println(req.getProtocol());//获取请求协议System.out.println(req.getServerName());//获得服务名/可以是ip,也可以是域名System.out.println(req.getServerPort());//获得服务端口号System.out.println("====================");System.out.println(req.getRemoteAddr());//获得客户端ipSystem.out.println(req.getRemotePort());//获得客户端端口System.out.println(req.getHeader("User-Agent"));//获得客户机信息System.out.println(req.getHeader("Accept-Language"));}
/*用来处理post请求*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//设置解码的编码格式System.out.println("doPost()");String account=req.getParameter("account");String password=req.getParameter("password");System.out.println(account);System.out.println(password);//调用jdbc与数据库交互//作出响应。//设置响应内容编码格式/*resp.setHeader("content-type", "text/html;charset=utf-8");*/resp.setContentType("text/html;charset=utf-8");//设置响应内容编码格式PrintWriter printWriter=resp.getWriter();//获得打印输出字符流printWriter.write("<h2>登录成功</h2>");}//destroy()在没有最终执行的一些操作时,也可以不用重写,但是服务器会调用父类中的destroy()/*@Overridepublic void destroy() {super.destroy();}*/}

运行结果:


 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android LayoutInflater 深度解析

在 Android 开发中&#xff0c;LayoutInflater 是一个非常重要的工具。它允许我们从 XML 布局文件中动态地创建 View 对象&#xff0c;从而使得 UI 的创建和管理更加灵活。本文将深入解析 android.view.LayoutInflater&#xff0c;包括它的基本用法、常见问题以及高级用法。 什…

idea xml ctrl+/ 注释格式不对齐

处理前 处理后 解决办法 取消这两个勾选

【UE5.3】笔记6-创建可自由控制Pawn类

搭建场景 搭建一个场景&#xff1a;包含地板、围墙。可以根据喜好加一些自发光的效果。 增加食物 创建食物蓝图类&#xff0c;在场景里放置一些食物以供我们player去吃掉获取分值。 创建可控制的layer 我们先右键创建一个蓝图继承自pawn类&#xff0c;起名BP_Player&#xf…

深度学习之半监督学习:一文梳理目标检测中的半监督学习策略

什么是半监督目标检测&#xff1f; 传统机器学习根据训练数据集中的标注情况&#xff0c;有着不同的场景&#xff0c;主要包括&#xff1a;监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性&#xff0c;在介绍半监督目标检测方法之前&#xff0c;我…

视频融合共享平台LntonCVS统一视频接入平台智慧安防应用方案

安防视频监控平台LntonCVS是一款拥有强大拓展性和灵活部署能力的综合管理平台。它支持多种主流标准协议&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP等&#xff0c;同时兼容各厂家的私有协议和SDK&#xff0c;如海康Ehome、海大宇等。LntonCVS不仅具备传统安防视频监控功能&…

PHP电商系统开发指南最佳实践

电子商务系统开发的最佳实践包括&#xff1a;数据库设计&#xff1a;选择适合关系型数据库&#xff0c;优化数据结构&#xff0c;考虑表分区&#xff1b;安全&#xff1a;加密数据&#xff0c;防止 sql 注入&#xff0c;处理会话管理&#xff1b;用户界面&#xff1a;遵循 ux 原…

mysql-sql-第十四周

学习目标&#xff1a; sql 学习内容&#xff1a; 40.查询学过「哈哈」老师授课的同学的信息 Select * from students left join score on students.stunmscore.stunm where counm (select counm from teacher left join course on teacher.teanmcourse.teanm where teache…

【深度学习】Transformer

李宏毅深度学习笔记 https://blog.csdn.net/Tink1995/article/details/105080033 https://blog.csdn.net/leonardotu/article/details/135726696 https://blog.csdn.net/u012856866/article/details/129790077 Transformer 是一个基于自注意力的序列到序列模型&#xff0c;与基…

伺服调试三环讲解

在伺服调试过程中,有些项目要求不高,采用伺服自整定就可以调试好伺服,但有些项目对伺服有着比较高的要求,于是需要采取手动调试伺服参数,下面就介绍一下伺服三环参数的调试的方法。 三环指:电流环、速度环、位置环 带宽关系:电流环带宽>速度环带宽>位置环带宽 三环控…

C语言单链表的算法之插入节点

一&#xff1a;访问各个节点中的数据 &#xff08;1&#xff09;访问链表中的各个节点的有效数据&#xff0c;这个访问必须注意不能使用p、p1、p2&#xff0c;而只能使用phead &#xff08;2&#xff09;只能用头指针不能用各个节点自己的指针。因为在实际当中我们保存链表的时…

偏微分方程笔记

极小位能原理&#xff1a; C 2 C^2 C2 是一个集合符号&#xff0c;表示所有二阶连续可微函数的集合 弱导数 C 2 C^2 C2 是一个集合符号&#xff0c;表示所有二阶连续可微函数的集合。 C 0 ∞ ( I ) C^{\infty}_0(I) C0∞​(I)表示于 I I I上无穷可微&#xff0c;且在端点a&…

使用pyinstaller 如何打包python项目

参考&#xff1a;【python项目正确打包方法-哔哩哔哩】 https://b23.tv/EDB6zbG Pyinstaller 详解多种打包过程(去坑,填坑)。_pyinstaller -f -w-CSDN博客 1.打开命令提示符&#xff1a; 找到python项目所在位置&#xff0c;输入cmd即可 2. 安装pipenv: 在命令提示符&#…

【强化学习的数学原理】课程笔记--2(贝尔曼最优公式,值迭代与策略迭代)

目录 贝尔曼最优公式最优 Policy求解贝尔曼最优公式求解最大 State Value v ∗ v^* v∗根据 v ∗ v^* v∗ 求解最佳 Policy π ∗ \pi^* π∗一些证明过程 一些影响 π ∗ \pi^* π∗ 的因素如何让 π ∗ \pi^* π∗ 不 “绕弯路” γ \gamma γ 的影响reward 的影响 值迭…

UiPath+Appium实现app自动化测试

一、环境准备工作 1.1 完成appium环境的搭建 参考&#xff1a;pythonappiumpytestallure模拟器(MuMu)自动化测试环境搭建_appium mumu模拟器-CSDN博客 1.2 完成uipath的安装 登录官网&#xff0c;完成注册与软件下载安装。 UiPath业务自动化平台&#xff1a;先进的RPA及自动…

Visual Studio 中的键盘快捷方式

1. Visual Studio 中的键盘快捷方式 1.1. 可打印快捷方式备忘单 1.2. Visual Studio 的常用键盘快捷方式 本部分中的所有快捷方式都将全局应用&#xff08;除非另有指定&#xff09;。 “全局”上下文表示该快捷方式适用于 Visual Studio 中的任何工具窗口。 生成&#xff1…

第十四章 集合(List)

一、集合框架体系 集合&#xff1a; &#xff08;1&#xff09;可以动态保存任意多个对象 &#xff08;2&#xff09;提供了一系列方便的操作对象的方法 二、Collection 1. Collection 接口常用方法 &#xff08;1&#xff09;add&#xff1a;添加单个元素 &#xff08;2…

Cypress测试:7个快速解决问题的调试技巧!

以下为作者观点&#xff1a; 快速编写代码是一项宝贵的技能&#xff0c;但能够有效调试和解决错误和bug&#xff0c;更是一个软件开发人员具有熟练技能的标志。调试是开发过程中的一个关键环节&#xff0c;可以确保软件按预期运行并满足用户需求。 Cypress 调试简介 Cypress …

【Linux】—Xshell、Xftp安装

文章目录 前言一、下载Xshell、Xftp二、安装Xshell三、使用XShell连接Linux服务器四、修改windows的主机映射文件&#xff08;hosts文件&#xff09;五、远程连接hadoop102/hadoop103/hadoop104服务器六、安装Xftp 前言 XShell远程管理工具&#xff0c;可以在Windows界面下来访…

uniapp + vue3 + Script Setup 写法变动 (持续更新)

一、uniapp 应用生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutorial/vue3-composition-api.html 注意&#xff1a; 应用生命周期仅可在App.vue中监听&#xff0c;在其它页面监听无效。 二 、uniapp页面生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutori…

3.js - 色调映射(renderer.toneMapping)

// ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import * as TWEEN…