JavaWeb基础(二)——服务器,Socket网络编程和Servlet
服务器,服务器与Servlet1.软件结构C/S: Customer/Server 基于客户端和服务端的软件。例如:QQ,酷狗音乐等等。B/S: Browser/Server基于浏览器和服务器的软件。例如:网站、OA管理系统、ERP管理系统、售票系统等等。C/S和B/S结构软件的优缺点:1)CS结构:优点:CS结构软件可以在本地上存储数据,减少数据在网络上传输;可以不依赖网络。...
服务器,服务器与Servlet
1.软件结构
C/S: Customer/Server 基于客户端和服务端的软件。例如:QQ,酷狗音乐等等。
B/S: Browser/Server 基于浏览器和服务器的软件。例如:网站、OA管理系统、ERP管理系统、售票系统等等。
C/S和B/S结构软件的优缺点:
1)CS结构:
优点:CS结构软件可以在本地上存储数据,减少数据在网络上传输;可以不依赖网络。
缺点:要安装客户端。不能够跨平台。
2)BS结构:
优点:不需要安装客户端,可以实现跨平台。
缺点:必须要依赖网络。
2 服务器
2.1 服务器介绍
服务器也是一个应用软件。任何一台计算机上只要安装了该软件,那么这台计算机就是一台服务器。
常见的服务器:Websphere、WebLogic、JBOSS、Tomcat等等。
2.2 自定义服务器(socket网络编程)
浏览器与服务器之间的通信使用的是HTTP协议。HTTP协议是TCP的一个子协议。下面演示如何使用TCP协议实现服务器的网络通信。
package demo01实现简单服务器;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* tcp网络通信的实现步骤:
* 第一步:创建一个服务端的Socket,监听某一个端口。
* 第二步:等待客户端的连接;
* 第三步:如果有客户端连接进来,服务端就需要开启一个线程处理客户端的请求。
* 第四步:处理完成后,向客户端返回数据;
* 第五步:关闭客户端的Socket。
*/
class ServerThread extends Thread {
//创建客户端的Socket
Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
// 运行要执行的任务代码
// run方法不能够直接调用
// 线程启动的时候自动调用
@Override
public void run() {
// 如果浏览器请求过来,就给浏览器返回一张图片
try {
// 1.读取图片
FileInputStream fis = new FileInputStream("d:/hello.html");
// 2.获取客户端输出流
OutputStream out = socket.getOutputStream();
// 3.向客户端的输出写数据
byte[] buf = new byte[8 * 1024];
int len = fis.read(buf);
// 如果len不等于-1,代表读取到图片数据,否则读完
while (len != -1) {
// 向客户端写数据
out.write(buf, 0, len);
// 读取图片数据
len = fis.read(buf);
}
// 4.关闭文件输入流和客户端的socket
fis.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ServerDemo {
public static void main(String[] args) throws IOException {
System.out.println("服务器启动了...");
// 创建一个服务端的Socket,并监听8080端口
ServerSocket ss = new ServerSocket(8080);
while (true) {
// 调用ServerSocket对象的accept方法监听客户端的连接,
// 如果有客户端连接进来,该方法返回客户端的Socket
Socket socket = ss.accept(); // 阻塞方法
// 启动一条线程,处理客户端的请求
ServerThread st = new ServerThread(socket);
st.start();
}
}
}
2.3 Tomcat服务器安装
第一步:下载并解压缩apache-tomcat-8.0.49.zip到本地磁盘的任意目录下。
第二步:配置JAVA_HOME环境变量。
第三步:进入bin目录下,双击startup.bat启动tomcat服务器。
第四步:通过浏览器访问localhost:8080,如果可以看到tomcat管理平台,就代表安装成功。
2.4 Tomcat的目录结构
bin:存放可执行文件。
conf:存储Tomcat的配置文件。
lib:第三方jar包。
logs:Tomcat运行过程中产生的日志文件。
temp:存放临时文件的目录。
webapps:存放web项目的目录,该目录下的每一个文件夹都是一个Web项目。
work:存放jsp的翻译文件。
2.5 URL地址
URL地址的格式:
http://localhost:8888/aa/hello.html
http:// 协议名称
localhost: 域名,localhost代表本地IP地址(127.0.0.1)
8888:端口号,Tomcat默认端口号为8080
- mysql:3306
- Oracle:1521
- ftp:21
特殊的端口号:80,如果是80端口,URL地址可以不写端口号。
/aa:上下文路径,默认就是项目的名称。
/hello.html : 访问资源的路径。如果是静态资源,那么访问资源路径就是静态资源的目录所在路径。如果是动态资源(如Servlet),那么访问路径就是web.xml中url-pattern指定的路径。
静态资源和动态资源的区别?
静态资源的内容是写死在文件中,如果要修改文件的内容,就要修改源码。动态资源的数据一般都是保存数据库中,并且一般都会有一个后台管理系统。如果要修改动态资源的数据,一般都是通过后台管理系统进行修改。
3 Web和Servlet
3.1 Web项目的目录结构
在Tomcat的webapps目录下,按照以下结构创建一个Web项目。
web
|- jsp
|- resourses
|- css
|- js
|- WEB-INF
|- classes
|- lib # 存放项目依赖的第三方jar包
|- web.xml
3.2 编写和配置Servlet
第一步:定义一个Java类,继承HttpServlet。
public class HelloServlet extends HttpServlet {
}
第二步:重写doGet或doPost方法。
- doGet方法:接收Get请求;
- doPost方法:接收Post请求;
/*
request: 代表请求,它保存所有的请求的数据
response:代表响应,可以向浏览器发送数据。
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("doPost...");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
第三步:在web.xml文件中配置Servlet的请求路径。
<?xml version="1.0" encoding="ISO-8859-1"?>
<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_3_1.xsd"
version="3.1"
metadata-complete="true">
<!-- 配置Servlet -->
<servlet>
<!-- Servlet的名字,可以是任意 -->
<servlet-name>HelloServlet</servlet-name>
<!-- Servlet的完整类名(包名+类名) -->
<servlet-class>demo02Servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 必须要与上面的servlet-name相同 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 访问资源路径 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
3.3 Servlet的访问过程
- 当浏览器请求服务器的时候,浏览器会根据url地址的ip和端口号找到对应的服务器。
- 服务器接收到浏览器发送过来的请求后,会根据url地址的上下文路径查找webapps目录下是否存在与上下文名称相同的文件夹
- 如果存在,那么服务器就会在文件夹下查找web.xml文件,然后在该文件中查找所有的url-pattern节点。
- 如果url-pattern节点内容与url地址的访问路径相匹配,那么就通过servlet-name节点找到对应的Servlet-class节点。
- 获取Servlet-class节点内容,使用反射技术创建Servlet对象,并调用service方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j6Hg3UmF-1569584853091)(C:\Users\lmc\Desktop\我的笔记\images\assets\1563845050730.png)]
3.4 在Eclipse中查看Servlet源码
第一步:按下Ctrl + t ,输入HttpServlet。
第二步:点击attachment按钮,在弹出对话框中选择external file,然后选择apache-tomcat-8.0.47-src.zip文件。最后点击确定即可。
通过查看HttpServlet源码看到,service方法会从request中获取请求方式,然后再根据不同的请求方式调用不同的doXxx方法。比如说,如果是get请求,就调用doGet方法,如果是Post请求,就调用doPost方法。
更多推荐
所有评论(0)