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,一经查实,立即删除!

相关文章

MySQL-SQL优化Explain命令以及参数详解

前言 在MySQL优化的众多手段中&#xff0c;EXPLAIN命令扮演着至关重要的角色。它是数据库管理员和开发者手中的利器&#xff0c;用于分析SQL查询的执行计划。通过执行EXPLAIN&#xff0c;MySQL会提供一份详细的查询执行计划报告&#xff0c;这份报告揭示了查询将如何执行&…

【GIT】GIT服务器迁移了之后如何重新映射

最近我的一个GIT服务器镜像迁移了&#xff0c;伴随着ip地址也发生了变化。 经过实践&#xff0c;发现执行一下三步即可解决&#xff1a; 1、进入客户端版本管理后的源码文件夹&#xff1b; 2、执行&#xff1a; git remote -v 如果目录不对会提示&#xff1a; fatal: not…

2024年6月个人工作生活总结

title: 2024年6月个人工作生活总结 urlname: code-for-2024-06 tags: 代码积累知识总结 categories:我的程序代码 date: 2024-06-30 00:00:00 photos:gallery/tech/c2.jpg 本文为 2024年6月工作生活总结。 研发编码 编码和注释 因某些需要&#xff0c;重拾了2019年的工程代码…

Scala 循环

Scala 循环 Scala,作为一种多范式的编程语言,提供了丰富的方式来处理循环和迭代。在Scala中,除了传统的for和while循环外,还有更高级的函数式编程特性,如集合操作和高阶函数,这些都可以用来实现循环和迭代的任务。本文将详细介绍Scala中的循环机制,包括基本语法、高级用…

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

【SQL】如何描述索引的分类

数据库中的索引种类多样&#xff0c;每种索引都有其特定的用途和特点。以下是常见的索引分类&#xff1a; 1. 单列索引 (Single-Column Index) 对单个列创建的索引。最基本的索引类型。 CREATE INDEX idx_column_name ON table_name (column_name);2. 多列索引 (Composite I…

联邦的基础配置

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

从Telnet到SSH:提升远程访问的安全性

前言 在计算机网络和远程通信中&#xff0c;Telnet和SSH是两种常用的协议&#xff0c;用于远程访问和管理服务器。然而&#xff0c;它们在安全性和功能方面有显著的区别。本文将详细讲述Telnet和SSH的区别&#xff0c;并探讨SSH在增强远程访问安全性中的重要性。 什么是Telne…

上门按摩SPA系统源码定制,专业搭建开发预约服务平台

在快节奏的现代社会&#xff0c;人们对放松和舒缓压力的需求日益增长。上门按摩SPA服务因其便捷性和私密性&#xff0c;受到了越来越多消费者的青睐。为了满足这一市场需求&#xff0c;专业的上门按摩SPA预约服务平台的搭建显得尤为重要。 我们的团队专注于为按摩SPA行业提供上…

MRTK 2.8.3

1.PC按键控制 移动摄像头:WSADQE、鼠标右键 模拟双手:左手(左Shift)、右手(右Shift) 将模拟的双手保持在视野中:T或Y 旋转模拟手部:按住Ctrl并移动鼠标 捏合手势:左Shift/空格 + 鼠标左键 2.常用脚本 (1)HandInteractionTouch(需搭配NearInteractionTouchableVolum…

python中方法的重写详解

python中对于类的继承的时候调用父类中一些方法的时候&#xff0c;会根据新的功能给方法增加一些新的内容&#xff0c;同时又要保留一些原有的父类里面的一些内容&#xff0c;此时就要对方法进行重写&#xff0c;这里面详细记录自己对于方法重写的心得 重写父类用两种&#xf…

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

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

元宇宙相关技术研究--由AR眼镜引发的人机交互思考

本文是继上一篇文章基础上,跟踪最新VR/AR/MR眼镜技术发展的总结文章。随着IT新技术的发展,眼镜作为一种全新的交互方式,未来将逐渐走到人机交互的核心位置,眼镜集成了人机交互过程中的视觉(即眼睛)、听觉(即声音)、手势(即代替键盘鼠标触摸等)及方向位置感知等。这些交…

免费的CMS指纹识别系统

以下是一些免费的CMS指纹识别系统&#xff1a; WhatCMS&#xff1a;WhatCMS 是一个免费的在线工具&#xff0c;可以帮助用户快速识别网站所使用的CMS系统&#xff0c;包括WordPress、Joomla、Drupal等常见的CMS系统。用户只需输入网站的URL&#xff0c;即可获得识别结果。 ht…

如何成为C#编程高手?

成为C#编程高手需要时间、实践和持续的学习。以下是一些建议&#xff0c;可以帮助你提升C#编程技能&#xff1a; 深入理解基础知识&#xff1a; 确保你对C#的基本语法、数据类型、控制结构、面向对象编程&#xff08;OOP&#xff09;原则有深刻的理解。学习如何使用Visual Stud…

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;而只关心对自己有…

【加密与解密】【07】SSL安全套件全解析

SSL/TLS协议 SSL&#xff0c;Secure Socket Layer&#xff0c;安全套接层 TLS&#xff0c;Transport Layer Security&#xff0c;传输层安全协议 TLS是SSL的最终完善版本&#xff0c;一般也可称为SSL协议 SSL是负责传输层安全&#xff0c;确定传输层数据如何封装的一套协议…