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.mzph.cn/news/864061.shtml

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

相关文章

JUC工具类: Semaphore详解

Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量&#xff0c;它允许n个任务同时访问某个资源&#xff0c;可以将信号量看做是在向外分发使用资源的许可证&#xff0c;只有成功获取许可证&#xff0c;才能使用资源。立刀旁 目录 # 带着BAT大厂…

EDA 虚拟机 Synopsys Sentaurus TCAD 2016.03 下载

下载地址&#xff08;制作不易&#xff0c;下载使用需付费&#xff0c;不能接受的请勿下载&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1baw0IhmnFOKVkJMI3zkD_A?pwdcheo 提取码&#xff1a;cheo

联邦的基础配置

一、联邦的定义 联邦&#xff1a;在AS内部部署全互联的IBGP对等体可以很好解决IBGP路由传递的问题&#xff0c;但是扩展性低&#xff0c;大型网络中会带来沉重负担&#xff0c;针对此问题可以用路由反射器解决&#xff0c;也可以利用联邦解决&#xff0c;联邦也被称为联盟。大…

使用Qt制作一个简单的界面

1、创建工程 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 选择 build system&#xff0c;有qmake、CMake 和 Qbs 三个选项。 CMake 很常用&#xff0c;功能也很强大&#xff0c;许多知名的项目都是用它&#xff0c;比如 OpenCV 和 VTK&#xff0c;但它的语法繁…

2024最新!将mysql的数据导入到Solr

Solr导入mysql的数据 如何安装导入数据前准备配置Solr的Jar包以及Mysql驱动包1.1、将solr-8.11.3\dist下的两个包进行移动1.2、将mysql-connect包也移动到该位置1.3、重启Solr项目 配置xml2.1、第一步我们需要创建核心2.2、第二步修改xml(这里是结合19年的教程)2.3、 创建data-…

mybatis延迟加载

mybatis延迟加载 1、延迟加载概述 应用场景 ​ 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求&#xff0c;当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 延迟加载的好处 ​ 先从单表查询、需要时再从关联表去关联查…

C++ 数据库MySQL 学习笔记(3) - 数据库操作

C 数据库MySQL 学习笔记(3) - 数据库操作 视图操作 视图是从一个或多个表中导出来的表&#xff0c;是一种虚拟存在的表。视图就像一个窗口&#xff0c;通过这个窗口可以看到系统专门提供的数据&#xff0c;这样用户可以不看整个数据库表中的数据&#xff0c;而只关心对自己有…

讨论Nginx服务器的反爬虫和反DDoS攻击策略

Nginx服务器是一个高性能的Web服务器和反向代理服务器&#xff0c;具有强大的反爬虫和反DDoS攻击能力。本文将讨论Nginx服务器的反爬虫和反DDoS攻击策略&#xff0c;并给出相关的代码示例。 一、反爬虫策略 爬虫是一种自动化程序&#xff0c;用于从互联网上收集特定网站的数据…

使用Petalinux设计linux系统

文章目录 1.通过 Vivado 创建硬件平台&#xff0c;得到 hdf 硬件描述文件2.设置 Petalinux 环境变量3.创建 Petalinux 工程4.配置Petalinux 工程5.配置Linux内核6.配置Linux根文件系统7.配置设备树文件8.编译 Petalinux 工程9.制作BOOT.BIN启动文件10.制作SD启动卡 1.通过 Viva…

GaussDB关键技术原理:高性能(三)

GaussDB关键技术原理&#xff1a;高性能&#xff08;二&#xff09;从查询处理综述对GaussDB的高性能技术进行了解读&#xff0c;本篇将从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行分享。 目录 3 高性能…

.secret勒索病毒详解,如何防御网络隐秘威胁

引言&#xff1a; 在数字化日益普及的今天&#xff0c;网络安全问题愈发凸显&#xff0c;其中勒索病毒作为一种极具破坏性的恶意软件&#xff0c;给个人用户和企业带来了巨大的损失和心理压力。.secret勒索病毒&#xff0c;作为这一威胁中的佼佼者&#xff0c;以其高度的隐蔽性…

Android Graphics 显示系统 - BufferQueue的状态监测

“ BufferQueue作为连接生产者和消费者的桥梁&#xff0c;时刻掌握队列中每一块Buffer的状态&#xff0c;对于解决一些卡死卡顿问题很有帮助&#xff0c;辨别是否有生产者或消费者长期持有大量Buffer不放导致运行不畅的情况。” 01 — 前言 在Android系统中&#xff0c;应用U…

Redis基础教程(四):redis键(key)

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

MicroBin好用的粘贴板工具

有时候你可能想从一台电脑上粘贴文本到另一台电脑上&#xff0c;或者是你想要分享一张图片或者是一些文件&#xff0c;某些设备上登陆qq和微信有不太方便&#xff0c;那么就可以使用MicroBin&#xff0c;它不但可以实现跨设备复制粘贴的功能&#xff0c;还支持文件上传等功能 …

微信小程序的在线客服系统源码 附带完整的源代码包以及搭建部署教程

系统概述 微信小程序的在线客服系统源码是一套专门为微信小程序开发的客服解决方案。它通过与微信小程序的紧密集成&#xff0c;为用户提供了便捷、高效的客服沟通渠道。该系统源码采用先进的技术架构&#xff0c;具备良好的稳定性和扩展性&#xff0c;能够满足不同规模企业的…

韩顺平0基础学java——第34天

p675-689 UDP网络编程 1.类 DatagramSocket和 DatagramPacket[数据包/数据报]实现了基于UDP协议网络程序。 2.UDP数据报通过数据报套接字DatagramSocket发送和接收&#xff0c;系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。 3.DatagramPacket对象…

【前端】从零开始学习编写HTML

目录 一、什么是前端 二、什么是HTML 三、HTML文件的基本结构 四、HTML常见标签 4.1 注释标签 4.2 标题标签 4.3 段落标签 4.4 换行标签 4.5 格式化标签 4.6 图片标签 4.7 超链接标签 4.8 表格标签 4.9 列表标签 4.10 表单标签 &#xff08;1&#xff09;form标…

MySQL高可用(MHA高可用)

什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

内容营销专家刘鑫炜:如何撰写一篇吸睛又能转化的医疗推广软文?

在我每天要处理的稿件中&#xff0c;有1/3以上是医疗软文&#xff0c;但稿件质量情况不容乐观&#xff0c;大部分医疗软文甚至用极其糟糕来形容都为过&#xff0c;互联网都到下半场了&#xff0c;很多医疗机构营销人员的营销思维还是停留在二十几年前&#xff0c;投放的软文还是…

SpringMVC系列八: 手动实现SpringMVC底层机制-第三阶段

手动实现SpringMVC底层机制 实现任务阶段六&#x1f34d;完成控制器方法获取参数-RequestParam1.&#x1f966;将 方法的 HttpServletRequest 和 HttpServletResponse 参数封装到数组, 进行反射调用2.&#x1f966;在方法形参处, 指定 RequestParam, 将对应的实参封装到参数数组…