基于java得web服务器实现[Z]

JAVA web实现密码登录跳转 首先新建webproject并添加Tomcat Server 网页主体设置 <%-- Created by IntelliJ IDEA. User: 25477 Date: 2020/6/29 Time: 10:25 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java 阅读详情
  基于Java的Web服务器工作原理1

  一个 Web 服务器也被称为 HTTP 服务器,它通过 HTTP 协议与客户端通信。这个客户端通常指的是 Web 浏览器。一个基于 Java 的 Web 服务器用到二个重要的类,java.net.Socket 与 java.net.ServerSocket ,并通过 HTTP 消息通信。因此,本文从讨论 HTTP 与这二个类开始,然后我将解释一个与本文相关的简单的 Web 应用。

  The Hypertext Transfer Protocol(HTTP)

  HTTP 是一种让 Web 服务器与浏览器(客户端)通过 Internet 发送与接收数据的协议。它是一个请求、响应协议--客户端发出一个请求,服务器响应这个请求。HTTP 运用可靠的 TCP 连接,通常用的 TCP 80 端口。它的第一个版本是 HTTP/0.9 ,然后被 HTTP/1.0 取代。当前的版本是 HTTP/1.1 ,由 RFC2616(.pdf) 定义。

  本节主要对应 HTTP 1.1 ,足够使你充分理解由 Web 服务器程序发出的消息。如果你对更加详细的知识有兴趣,可以参考 RFC2616 。

  在 HTTP 中,客户端总是通过建立一个连接与发送一个 HTTP 请求来发起一个事务。服务器不能主动去与客户端联系,也不能给客户端发出一个回叫连接。客户端与服务器端都可以提前中断一个连接。例如,当用一个浏览器下载一个文件时,你可以通过点击“停止”键来中断文件的下载,关闭与服务器的 HTTP 连接。

  HTTP 请求

  一个 HTTP 请求包含三个部分:

Method-URI-Protocol/Version 方法-地址-版本
Request header 请求头
Entity body 请求实体


  下面是一个 HTTP 请求实例:

POST /servlet/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/ch8/SendDetails.htm
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate

LastName=Franks&FirstName=Michael


  The Method-URI-Protocol/Version 在这个请求的第一行:

POST /servlet/default.jsp HTTP/1.1


  其中 POST 是请求的类型。每个客户端 HTTP 请求可以是 HTTP 规范中指定的许多请求类型中的一种。HTTP 1.1 支持七种类型的请求,它们是 GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE。其中 GET 与 POST 是 Internet 应用中经常用到的二种请求类型。

  URI 完整地指定了 Internet 资源。一个 URI 通常被解析为相对服务器的根目录。这样,它应该总是以一个 '/' 前缀开始。一个 URL 实际上是 URI 的一种类型。

  Version 指的是该 HTTP 请求所用到的 HTTP 协议版本。

  请求头包含了客户端环境与请求实体的一些有用的信息。例如它包含浏览器设定的语言、实体的长度等等。每条请求头用回车换行符(CRLF)分开。

  一个非常重要的空行分开了请求头与实体,它标志着实体内容的开始。一些 Internet 开发书籍认为这个 CRLF 空行是 HTTP 请求的第四个部分。

  在上面的 HTTP 请求中,实体只是简单以下的一行:

LastName=Franks&FirstName=Michael


  在一个典型的 HTTP 请求中,请求实体内容会长得多。

  HTTP 响应

  与请求相似,HTTP 响应也由三部分组成:

Protocol-Status code-Description 协议状态 描述代码
Response headers 响应头
Entity body 响应实体


  以下是一个 HTTP 响应的实例:

HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112

<html>
<head>
<title>HTTP Response Example</title></head><body>
Welcome to Brainy Software
</body>
</html>


  响应头的第一行类似请求头的第一行,告诉你所用的协议是 HTTP 1.1 ,请求成功(200=success),以及没有任何问题。

  响应头类似请求头也包含了一些有用的信息。响应的实体响应本身的 HTML 内容。头与实体之间由回车换行的空行(CRLF)分开。

  Socket 类

  一个 socket 是一个网络连接的端点,它使得一个应用可以从网络读与写。在不同电脑上的二个应用软件能够通过收发字节流而彼此通信。要发一个信息到另一个应用程序,你需要知道它的IP地址,以及它的 socket 端口号。在 Java 中,一个 socket 用 java.net.Socket 来实现。

  要创建一个 socket ,你可以用 Socket 类中几个构建方法中的一个。其中一个接受主机名与端口号作为参数:

new Socket("yahoo.com", 80);


  一旦你成功地创建了一个 Socket 类的实例,你就可以用它去发送与接收字节流了。要发送字节流,你需要呼叫 Socket 类的 getOutputStream 方法来得到一个 java.io.OutputSteam 对象。要发送文本到远程的程序,你通常需要从返回的 OutputStream 创建一个 java.io.PrintWriter 对象。要从连接的另一端接收字节流,你需要呼叫 Socket 类的 getInputStream 方法,它返回一个 java.io.InputStream 对象。

  以下代码创建一个可以与本地 HTTP 服务器通信的 socket (127.0.0.1 表示一个本地的主机),发送一个 HTTP 请求,并接收从服务器的响应。它还创建一个 StringBuffer 对象来接受响应,并打印到控制台。

Socket socket = new Socket("127.0.0.1", "8080");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter( socket.getOutputStream(),
autoflush );
BufferedReader in = new BufferedReader(
new InputStreamReader( socket.getInputStream() ));

// send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection: Close");
out.println();

// read the response
boolean loop = true;
StringBuffer sb = new StringBuffer(8096);

while (loop) {
if ( in.ready() ) {
int i=0;
while (i!=-1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
Thread.currentThread().sleep(50);
}

// display the response to the out console
System.out.println(sb.toString());
socket.close();


  注意要从 web 服务器得到正确的响应,你必须要发送用 HTTP 协议编译了的 HTTP 请求。如果你看了上面的 HTTP 部分,你应该能够理解上面代码中的 HTTP 请求。

编者注:这篇文章节选自 budi 自己出版的书<Tomcat 内幕>。你可以在他的网站得到更多的相关资料。


基于Java的Web服务器工作原理2
作者:fajaven译 发文时间:2003.09.12 17:00:38
ServerSocket 类

  Socket 类描述的是“客户端” socket,当你需要创建与远程服务程序连接时需要用到它。如果你想实现一个服务程序,如 HTTP 服务器或者 FTP 服务器,则需要另外不同的方法。这是因为你的服务器必须随时服务,它不知道什么时候会有一个客户端程序需要连接它。

  因为这个目的,你需要用到 java.net.ServerSocket 这个类,它是服务器端 socket 的一个实现。服务器端 socket 等待来自客户端的连接请求。一旦它收到一个连接请求,它创建一个 socket 实例来与客户端进行通信。

  要创建服务器端 socket ,需要用到 ServerSocket 类提供的四个构建方法中的一个。你需要指定服务器端 socket 侦听的 IP 地址与端口号。比较典型地,这个 IP 地址可以是 127.0.0.1 ,意思是该服务器端 socket 侦听的是本地机器。服务器端 socket 侦听的 IP 地址指的是绑定地址。服务器端 socket 另一个重要的属性是队列长度,即它拒绝请求前所接受的最大请求排队长度。

  ServerSocket 类的构建方法之一如下:

public ServerSocket(int port,int backLog,InetAddress bindingAddress);


  对于这个构建方法,绑定地址必须是 java.net.InetAddress 类的实例。创建一个 InetAddress 类的对象的简单方法是呼叫其静态方法 getByName ,传递一个包含主机名的字符串。

InetAddress.getByName("127.0.0.1");


  以下行的代码创建了一个服务器端 socket ,它侦听本地机器的 8080 端口,限制队列长度为 1 。

new ServerSocket(8080,1,InetAddress.getByName("127.0.0.1"));


  一旦有了一个 ServerSocket 实例,就可以通过呼叫其 accept 方法来让它等待进来的链接请求。这个方法只有当接收到请求时才返回,它返回的是 Socket 类的实例。这个 Socket 对象就可以用来从客户端应用程序发送与接收字节流,正如上节据说的那样。实际上,accept 方法是本文例子中用到的唯一方法。

应用实例

  我们的 web 服务器程序是 ex01.pyrmont 包的一部分,它包含三个类:HttpServer;Request;Response。

  整个程序的入口(静态 main 方法)是 HttpServer 类。它创建一个 HttpServer 的实例,并呼叫其 await 方法。正如名字表达的,await 在一个特定的端口等待 HTTP 请求,处理它们,并返回响应给客户端。它保持等待状态,直到收到停止命令。(用方法名 await 代替 wait ,是因为 System 中有一个重要的与线程相关的方法)

  这个程序只从一个特定的目录发送静态资源,如 HTML 与图像文件。它只支持没有文件头(如日期与 cookie)的情况。现在我们将在如下的几节中看一下这三个类。

HttpServer 类

  HttpServer 实现了一个 web 服务器,它可以提供(serve)特定目录及其子目录下的静态资源。这个特定的目录由 public static final WEB_ROOT 指定。

  WEB_ROOT 初始化如下:

public static final String WEB_ROOT =
System.getProperty("user.dir") + File.separator + "webroot";


  代码列表中包含了一具叫做 webroot 的目录,里面有一些静态的资源,你可以用来测试本应用。你也可以看到一个 servlet ,在我的下一篇文章将会被用到:“Servlets 容器是怎样工作的”。

  为了请求一个静态的资源,在浏览器的地址栏输入如是地址:http://machinename:port/staticResources

  如果你从不同的机器上发送请求到运行本应用的机器,则 machinename 是运行应用机器的机器名或 IP 地址,port 是 8080 ,staticResources 是被请求的文件名称,它必须包含在 WEB_ROOT 目录内。

  例如,如果你用同一台电脑来测试这个应用,你想要 HttpServer 发送 index.html 这个文件,用以下的地址:http://localhost:8080/index.html

  要停止服务,只需要从浏览器发送一个停止(shutdown)命令,即在浏览器的地址栏输入 host:port 字段后,加上预先定义好的字符串。在我们的 HttpServer 类中,停止命令被定义为 SHUTDOWN ,一个 static final 变量。

private static final String SHUTDOWN_COMMAND = "/SHUTDOWN";


  因此,要停止服务,你可以这样:http://localhost:8080/SHUTDOWN

  现在,让我们看一下列表 1.1 中给出的 await 方法。代码列表后面将对这段代码做一些解释。

Listing 1.1. The HttpServer class' await method

public void await() {
ServerSocket serverSocket = null;
int port = 8080;
try {
serverSocket = new ServerSocket(port, 1,
InetAddress.getByName("127.0.0.1"));
}
catch (IOException e) {
e.printStackTrace();
System.exit(1);
}

// Loop waiting for a request
while (!shutdown) {
Socket socket = null;
InputStream input = null;
OutputStream output = null;
try {
socket = serverSocket.accept();
input = socket.getInputStream();
output = socket.getOutputStream();

// create Request object and parse
Request request = new Request(input);
request.parse();

// create Response object
Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();

// Close the socket
socket.close();

//check if the previous URI is a shutdown command
shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
}
catch (Exception e) {
e.printStackTrace();
continue;
}
}
}


  await 方法以创建一个 ServerSocket 实例开始,然后进入一个 while 的循环。

serverSocket = new ServerSocket(
port, 1, InetAddress.getByName("127.0.0.1"));
...
// Loop waiting for a request
while (!shutdown) {
...
}


  在 while 循环中的代码,运行到 ServerSocket 的 accept 方法即停止。这个方法只有在 8080 端口接收到 HTTP 请求才返回:

socket = serverSocket.accept();


  收到请求后,await 方法从 accept 方法返回的 Socket 实例中等到 java.io.InputStream 与 java.io.OutputStream:

input = socket.getInputStream();
output = socket.getOutputStream();


  然后 await 方法创建一个 Request 对象,呼叫它的 parse 方法来解析这个原始的 HTTP 请求:

// create Request object and parse
Request request = new Request(input);
request.parse();


  下一步,await 方法创建一个 Response 对象并把 Request 对象设置给它,呼叫它的 sendStaticResource 方法:

// create Response object
Response response = new Response(output);
response.setRequest(request);
response.sendStaticResource();


  最后,await 方法关闭 Socket ,呼叫 Request 的 getUri 方法来检查 HTTP 请求的地址是否是一个停止命令。如果是,则 shutdown 变量被设置为 true ,程序退出 while 循环:

// Close the socket
socket.close();
//check if the previous URI is a shutdown command
shutdown = request.getUri().equals(SHUTDOWN_COMMAND);




基于Java的Web服务器工作原理3
作者:fajaven 发文时间:2003.09.12 17:11:54

Request 类

  Request 类对应 HTTP 请求。创建这个类的实例,并传给它从 Socket 获得的 InputStream 对象,从而捕获与客户端的通信。呼叫 InputStream 对象的 read 方法中的一个就可以得到 HTTP 请求的原始数据。

  Request 类有二个 public 方法 parse 与 getUri。parse 方法解析 HTTP 请求的原始数据。它做的事情不多--唯一它使之有效的信息是 HTTP 请求的 URI ,这个通过呼叫私有方法 parseUri 来获得。parseUri 方法把 URI 作为一个变量。调用 getUri 方法可以得到 HTTP 请求的 URI 。

  要明白 parse 与 parseUri 的工作原理,你需要知道 HTTP 请求的结构,由 RFC2616 定义。

  一个 HTTP 请求包括三个部分:Request line;Headers;Message body 。

  现在,我们只需要关注 HTTP 请求的第一部分--请求行。请求行以方法记号开始,接着是请求的 URI 与协议版本,以回车换行符结束。请求行的元素之间以空格分开。例如,一个用 GET 方法的 index.html 文件的请求行如下:

 
GET /index.html HTTP/1.1




  parse 方法从 socket 的 InputStream 传递给 Request 对象中读取字节流,把这个字节数组存在缓冲里。然后,它把 buffer 字节数组里的字节放入叫做 request 的 StringBuffer 对象中,再把 StringBuffer 替换成 String 传递给 parseUri 方法。

  parse 方法的代码如列表 1.2

Listing 1.2. The Request class' parse method

 
public void parse() {
// Read a set of characters from the socket
StringBuffer request = new StringBuffer(2048);
int i;
byte[] buffer = new byte[2048];

try {
i = input.read(buffer);
}
catch (IOException e) {
e.printStackTrace();
i = -1;
}

for (int j=0; j<i; j++) {
request.append((char) buffer[j]);
}

System.out.print(request.toString());
uri = parseUri(request.toString());
}


  parseUri 方法查找请求行的第一个与第二个空格,从而从请求行获得了 URI 。列表 1.3 展示了 parseUri 方法的代码。

Listing 1.3. The Request class' parseUri method

private String parseUri(String requestString) {
int index1, index2;
index1 = requestString.indexOf(' ');

if (index1 != -1) {
index2 = requestString.indexOf(' ', index1 + 1);
if (index2 > index1)
return requestString.substring(index1 + 1, index2);
}

return null;
}


Response 类

  Response 类描述 HTTP 响应。它的构建方法接受 OutputStream 对象,如下:

public Response(OutputStream output) {
this.output = output;
}


  Response 对象通过传递从 socket 获得的 OutputStream 对象到 HttpServer 类的 await 方法而创建。

  Response 类有二个公共方法 setRequest 与 setStaticResource 。setRequest 用来传递 Request 对象到 Response 对象。它比较简单,代码如列表 1.4 所示:

Listing 1.4. The Response class' setRequest method

public void setRequest(Request request) {
this.request = request;
}


  sendStaticResource 方法用来发送静态的资源,例如 HTML 文件。它的实现如列表 1.5 所示:

Listing 1.5. The Response class' sendStaticResource method

public void sendStaticResource() throws IOException {
byte[] bytes = new byte[BUFFER_SIZE];
FileInputStream fis = null;

try {
File file=new File(HttpServer.WEB_ROOT, request.getUri());
if (file.exists()) {
fis = new FileInputStream(file);
int ch = fis.read(bytes, 0, BUFFER_SIZE);

while (ch != -1) {
output.write(bytes, 0, ch);
ch = fis.read(bytes, 0, BUFFER_SIZE);
}
}
else {
// file not found
String errorMessage="HTTP/1.1 404 File Not Found/r/n"+
"Content-Type: text/html/r/n" +
"Content-Length: 23/r/n" +
"/r/n" +
"<h1>File Not Found</h1>";
output.write(errorMessage.getBytes());
}
}
catch (Exception e) {
// thrown if cannot instantiate a File object
System.out.println(e.toString() );
}
finally {
if (fis != null)
fis.close();
}
}


  SendStaticResource 方法非常简单。它首先通过传递父与子目录到 File 类的构建方法从而实例化 java.io.File 类。

File file new File(HttpServer.WEB_ROOT, request.getUri());


  然后检查这个文件是否存在。如果存在,则 sendStaticResource 方法传递 File 对象创建 java.io.FileInputStream 对象。然后调用 FileInputStream 的 read 方法,并把字节数组写到 OutputStream 对象 output 。就这样,静态资源的内容作为原始数据被发送到浏览器。

if (file.exists()) {
fis = new FileInputStream(file);
int ch = fis.read(bytes, 0, BUFFER_SIZE);

while (ch != -1) {
output.write(bytes, 0, ch);
ch = fis.read(bytes, 0, BUFFER_SIZE);
}
}


  如果文件不存在,sendStaticResource 发送一个错误信息到浏览器。

String errorMessage = "HTTP/1.1 404 File Not Found/r/n" +
"Content-Type: text/html/r/n" +
"Content-Length: 23/r/n" +
"/r/n" +
"<h1>File Not Found</h1>";
output.write(errorMessage.getBytes());


编译与运行应用程序

  要编辑与运行本文的应用,首先你需要解压源码 zip 文件。直接解压出来的目录被称为工作目录,它有三个子目录:src/,classes/,lib/。要编译应用,从工作目录输入如下命令:

javac -d . src/ex01/pyrmont/*.java


  -d 选项把结果写到当前目录,而不是 src/ 目录。

  要运行应用,在当前工作目录输入如下命令:

java ex01.pyrmont.HttpServer


  测试这个应用,打开你的浏览器,在地址栏输入如下地址:http://localhost:8080/index.html

  你将在你的浏览器看到 index.html 显示出来,如图1所示。



图1:web 服务器的输出显示

  在控制台,你看到如下的内容:

GET /index.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Host: localhost:8080
Connection: Keep-Alive

GET /images/logo.gif HTTP/1.1
Accept: */*
Referer: http://localhost:8080/index.html
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Host: localhost:8080
Connection: Keep-Alive


总结

  在这篇文章中(分为三个部分),你看到了一个简单的 web 服务器的工作原理。本文相关的应用只包括了三个类,功能是不全面的。然而,它仍不失为一个好的学习工具。
咱们继续学Java——高级篇 第七十三篇:之与Web服务器的数据交互 大家好呀!我一直走在Java学习的道路上,深知学习过程中相互交流、共同探讨的重要性。在之前的博客中,我们已经对Java网络编程的一些基础知识有了一定了解,今天我们要更上一层楼,深入学习如何与Web服务器进行数据交互。我希望通过这篇博客,把我对这些知识的理解和实践经验分享给大家,让我们一起攻克这个在Java编程中非常重要的部分。在学习过程中,我会尽量用简单易懂的语言解释复杂的概念,结合实际代码帮助大家更好地掌握。希望大家能在阅读后有所收获,也期待大家在评论区分享自己的想法和经验,让我们共同进步! 阅读详情

相关推荐

阿里云CentOS部署Java Web项目步骤

阿里云CentOS部署Java Web项目步骤 简介         这是我第一次使用阿里云的服务器,之前使用的是腾讯云的Windows Server,最近刚过期,所以想转手试一下阿里云,看看两者的区别吧,不过使用的阿里云镜像并不是Windows Server,而是选择了CentOS,所以也没什么好比较的了。。。折腾了算是两天吧,终于搞好了,本来是想打算写个word文档记录下方便自己以后重

Dahr Allen的博客 3869

Java Web工作原理

HTTP(HyperTextTransferProtocol)超文本传输协议是万维网客户端(Browser)与服务器端(Server)交互遵守的协议,是一个应用层的协议,TCP三次握手四次挥手,通过发包拆包的方式建立连接使用TCP连接进行可靠的传输。1、HTTP协议是一种请求/应答协议,它通过客户机和服务器相互发送消息的方式工作。2、使用HTTP消息头,可以实现客户机与服务器之间的HTTP请求和HTTP响应3、消息头分为通用头,请求头,响应头和实体头等4类。...

weixin_44057803的博客 1209

利用云服务器(Centos)和tomcat搭建简易web网站

利用云服务器(Centos)和tomcat搭建web网站 文章目录 1 为云服务器添加Java jdk 如果已经安装好java jdk请忽略第1条 1,安装jdk 在命令行输入:yum install java-1.8.0-openjdk* -y 开始下载jdk 2,检查jdk 在命令行输入:java -version ![java 环境](https://img-blog.csdnimg.cn/20200724074921649.png) 可以查看jdk是否安装成功 2 上传tomcat

weixin_47327232的博客 594

云服务器部署 Web 项目

之前说过 这个命令了,是"包管理器",可以理解为他就像是"应用商店",我们需要,当然,我们下载需要用 ,必须使用管理员权限(root)首先,我们先搜索一下,看看 yum 上关于 jdk 有没有,以及叫什么名字,我们可以通过 命令就能列出来 相应的服务器上所有的软件包的名字(当然不要就这样敲,这样敲会把所有东西都列出来,会非常多,我们搭配 grep 来使用:),只搜寻jdk的: 我们发现yum上面虽然有 tomcat,但是版本比较老,是 7.0系列的,而我常用的是 8.5系列的,因为我们也知这种版本都要匹配才

chenbaifan的博客 1万+

【Linux\云服务器\Java】十分钟带你征服阿里云Java Web环境部署

该教程面向于刚刚开始自己服务器运营或者是运行的童鞋,对于Linux操作不是很熟悉,以及对Linux环境下安装Java Web环境不是很懂或者有些小疑问的童鞋,本文应该能够提供给你解决这些问题的一些机会或者是思路。

o0DarkNessYY0o的博客 2201

避开新手第一个坑:手把手教你正确安装Perforce服务器与客户端(P4d/P4V)

本文详细指导如何正确安装和配置Perforce服务器与客户端(P4d/P4V),避免新手常见的安装顺序错误。从环境准备到分步安装,再到常见问题排查和性能优化,帮助开发者快速搭建稳定的版本控制环境,提升团队协作效率。

weixin_26804345的博客 668

Java web 服务器 搭建_搭建一个java web服务端

最近也是做了一个简单的java web 项目,由于以前也是没接触过,在这里记录下搭建一个web服务端的过程。一般我们做一个服务端要么在本地自己的电脑上先安装环境,一般是windows系统,主要安装jdk + tomcat + mysql,这些安装教程网上都有,也很简单,我这里就不多说了,我要讲的是在一个远程linux服务器上搭建web服务端环境。对于一个liunx服务器,我们可以使用xshell等...

weixin_34993796的博客 1412

程序员的自我修养

一个好的程序员的自我修养需要从不同角度出发,工作能力是一个方面,对自身的定位和了解也是一个方面,程序员的工作能力修养包括需求理解、功能设计、沟通确认、代码规范、成果验证、代码重构优化等,通过自我剖析来对自身进行定位并了解自身的优缺点,如去除劣根性、端正意识形态与态度、提升自己的核心竞争力等。 自我剖析 一个成功的人,必须要先了解自己,只有了解自己是什么样的人,了解自身有哪些优缺点,了解自己更合适做什么工作,知道自己做什么才能发挥出自身的优势,这样才能使自己在工作中发光发热,在职业生涯的道路上走的更远。

数通畅联 1677

Ubuntu server搭建Java web服务器

在这里为大家介绍如何在Ubuntu server搭建Java web服务器,输入命令时请留意作者的Ubuntu路径的变化 1、 在Ubuntu server中安装ssh,如果是购买服务器的话,这已经是安装的了,包括vim 获取超级权限 先更新安装包 开始安装ssh ssh已经启动了 2、 安装Xshell并创建连接 安装Xshell

夜雨飘零 5360

RDD2022 数据格式转换与清洗

Rdd2022数据集,是关于道路损伤的数据集,与rdd2020相比增加了两万多张图片但是由于格式不能被yolo直接使用且其中有大量的图片没有符合要求的标注,特写此文章记录数据清洗与格式化的过程。

蓝胖子的博客 9957

【科研数据获取】根据Excel表个中的企业/公司信息批量获取经纬度坐标,并进行地图可视化

批量获取企业/公司的经纬度坐标,并进行地图可视化1 需求2 实现途径3 需求逐步实现 1 需求 在做项目的时候,老板或者项目答辩时候甲方最喜欢看到的就是可视化结果,尤其是涉及到地图可视化。很多时候会遇到企业/公司的数据,想要做地图可视化,必不可少的就是要获取它们具体地址:第一种就是像查户口一样精准一下具体的城镇街道,还有一种就是经纬度信息,前一种属于文字内容往往用于管理方面,第二种数字信息多用于数据处理与分析。 2 实现途径 获取地理信息数据,自然需要使用到地图的功能,这里直接采用百度地图的拾取坐标系统,

lys_828的博客 2337

web项目部署运行到阿里云服务器

做了一个毕设,尝试将项目运行在阿里云服务器,以下是效果图 搭建项目所需工具 连接Linux服务器工具 Xmanager Enterprise 4 jdk jdk-8u161-linux-x64 tomcat apache-tomcat-8.5.55 前提 项目可以在本地运行 1.搭建Linux Java环境,配置环境变量 ①打开Xshell,连接服务器 ②上传jdk压缩包(压缩包上传快)我将压缩包放在 /usr/local/software ...

不懂一休 1万+

【功能安全】【AutoSAR】程序流监控机制

目录 一、程序流执行的常见故障 二、程序流的监控机制 1、监控功能的实现 2、三种监督机制 a、生命监测机制 b、截止时间监测机制 c、逻辑程序流监测机制 一、程序流执行的常见故障 与程序流相关的故障,在ISO26262中第六章附录D中定义如下: — 执行阻塞; — 死锁; — 活锁; — 执行时间的不正确分配; — 软件要素间的不正确同步。 二、程序流的监控机制 1、监控功能的实现 AutoSAR中对程序流的监控功能的实现主要有“看门狗”栈(Watchdog Stack).

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 4519

手把手教你将web项目部署到华为云服务器

l

CSL201816080304的博客 1万+

联想开天N70z/N79Z G1d笔记本Win驱动下载

本文介绍了联想开天N70Z/N79Z G1d笔记本在Win11系统下的驱动安装方法。提供了WiFi网卡驱动(RealtekWlan)和显卡驱动(ZX C960 GPU)的详细安装步骤,包括手动更新驱动和卸载流程。驱动安装后成功支持5G WiFi连接并正确识别显卡型号。文中附有系统信息和安装效果截图,同时提供了官方驱动下载地址及备用下载链接。该指南适用于需要为联想开天N70Z/N79Z G1d笔记本安装Win11驱动的用户参考。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 3890

phpMyAdmin | mysqli::real_connect(): (HY000/2002): No such file or directory

第一次安装宝塔mysql服务是默认关闭的,需要手动打开,打开服务再次进入phpMyAdmin发现可以进入了。

吻等离子的博客 2873

web服务器架构

HTTP 概述 超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。 请求方法 HTTP/1.1 定义的请求方法有 8 种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。最常的两种是 GET 和 POST,如果是 RESTful 接口的话一般会用到 GET、...

江小白 1899

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

用HttpClient来对付各种顽固的WEB服务器 (z)

httpClient的例子不错,不过在网上找到一篇中文的,里面的例子非常实用。 一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等。所访问的这些页面有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需要认证以及是一些通过加密方式传输,例如HTTPS。目前我们使用的浏览器处理这些情况都不会构成问题。不过你可能在某些时候需要

bon_jovi的专栏 1612

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java web项目自动化编译打包发布脚本

Java web项目自动化编译打包发布脚本 介绍如何通过shell脚本,将上传到gitlab上的代码pull到本地,通过maven编译打包,然后将生成的war包上传到中间服务器,之后通过远程调用中间服务器上的shell脚本,将war包传到项目部署服务器上,并完成tomcat的重启。 代码发布流程 实现脚本: 总共分为本地发布脚本和中间服务器上的发布脚本,实现功能分别为: 本地脚本: 切换到代码...

李永昌的博客 6089

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java使用TCP实现Web文件下载页面

com.zxy97.server.Httpserver.java com.zxy97.server.Request.java com.zxy97.server.Response.java com.zxy97.server.file.Config.java com.zxy97.server.file.Create.java com.zxy97.server.Httpserver.j...

zhaoxuyang1997的博客 683

使用 DB2 for z/OS 存储过程和 Data Web Services 公开业务功能

概述 本文讨论 DB2 for z/OS 存储过程以及把它们包装在 Web 服务中的好处。讨论如何使用 IBM Data Studio Developer 创建和部署使用 Data Web Services 特性的 Web 服...

294

【Java Web】Javaweb开发入门-学习小总结(很实用)

学习Java Web怎么可能少得了视频,下面是来自动力节点的老师【人称杜公公 】 所出的教程!!! https://www.bilibili.com/video/BV1Z3411C7NZ/https://www.bilibili.com/video/BV1Z3411C7NZ/ 一、基本概念 1.1、WEB开发的相关知识   WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。   Internet上供外界访问的Web资源分为: 静态web资源(如ht...

d5821476的博客 995
上一篇: [转贴] hibernate入门 - Transaction
下一篇: JSP 最佳实践:用 jsp:include 控制动态内容
zaowei21
博客等级 码龄25年 38粉丝 517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值