web开发概述
Web服务器是指驻留于因特网上某种类型计算机的程序
Web服务器:狭义 服务器指的是一款软件,放文件,可以远程请求访问,服务器就会做出响应。
广义 电脑+软件
服务器是一个容器(部署项目)是一个连接客户端与程序之间的中间件
环境配置
1.下载apache-tomcat-9.0.43
2.安装JDK
设置JAVA_HOME(到根目录例如:D:\Program Files\JDK)
设置PATH环境变量
点击apache-tomcat-9.0.43/bin中的startup.bat启动tomcat服务器(shutdown.bat关闭服务器)
打开浏览器:输入127.0.0.1:8080(8080是tomcat服务器的端口)会出现tomcat的界面
解压之后的目录含义:
bin:存放启动和关闭Tomcat的脚本文件
conf:存放Tomcat服务器的各种配置文件
server.xml:<Connecto port="8080 protocol="HTTP/1.1connectionTimeout="20000" redirectPort="8443"> 8080可以修改,但修改后服务器的端口就变了,以后运行也就要用新的端口号
lib:存放Tomcat服务器的支撑jar包
logs:存放Tomcat的日志文件
temp:存放运行时产生的临时文件
webapps:部署web项目
work:Tomcat的工作目录
创建web项目
创建一个webback项目(back是后端的意思),然后右键有一个Add Framework Support...,点击Web Application,之后项目会出现一个web的目录。
发布web应用到服务器,发布应用有两种方式:
方式1:手动(太麻烦,每次改变都要重新弄,而且还有重新启动服务器)
方式2:自动(要集成tomcat,每写一个项目就要配置一次)
注意:Application context /webback后面的要删掉,一定要等服务器启动完之后在运行浏览器,不然会出错
创建web项目-->创建一个index.html-->发布项目(自动,集成tomcat)-->启动服务器-->浏览器打开,就能显示index.html写的东西。
Servlet(javaEE)
Servlet是Server Applet的简称,意思为用Java编写的服务器端的程序。
它运行在web服务器中,web服务器负责Servlet和客户的通信以及调用Servlet方法,Servlet和客户通信采用“请求/响应”的模式。
前后端交互过程:
Servlet创建和使用
把tomcat里面lib中的serclet-api.jar复制到web/lib里面
package webback;
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;
/*
* 创建一个类,继承HttpServlet
* 重写方法
* */
public class demoServlet extends HttpServlet {
/*
* 构造方法
* */
public demoServlet() {
System.out.println("无参构造方法");
}
/*
* 提供服务
* */
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
}
/*
*初始化
* */
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
}
/*
* 销毁
* */
@Override
public void destroy() {
System.out.println("destroy");
}
}
然后在web.xml中做个配置
<?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 可扩展标记语言
web.xml 是web项目的配置文件,在服务器启动时,由服务器读取
-->
<!--配置注册Servlet-->
<servlet>
<servlet-name>demoServlet</servlet-name>
<servlet-class>webback.demoServlet</servlet-class>
</servlet>
<!--为Servlet配置访问地址-->
<servlet-mapping>
<servlet-name>demoServlet</servlet-name>
<url-pattern>/demoServlet</url-pattern><!--/demoServlet 供外界访问的地址 /表示到项目名 ip+端口/webback//demoServlet-->
</servlet-mapping>
</web-app>
Servlet声明周期
package webback;
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;
/*
* 创建一个类,继承HttpServlet
* 重写方法
* 配置Servlet
*
* Servlet
接收客户端请求
调用其他的java程序处理请求
响应
Servlet对象生命周期
servlet对象创建:
默认 在第一次访问Servlet时,由服务器创建对象,只创建了一次.
<load-on-startup>0</load-on-startup> 在服务器启动时........
调用构造方法,只调用一次
Servlet对象初始化: init 在servlet对象创建成功后,紧接着会初始化Servlet
服务阶段 : service 每次请求都会到达service
接收
处理
响应
销毁阶段: 当servlet对象销毁时(正常关闭服务器,卸载servlet对象), 执行destroy() 只执行一次
* */
public class demoServlet extends HttpServlet {
/*
* 构造方法
* */
public demoServlet() {
System.out.println("无参构造方法");
}
/*
* 提供服务,多次执行
服务器将请求中的数据封装到HttpServletRequest对象中
jdbc java只提供了标准接口 具体的实现由不同的数据库开发商实现
servlet 定义了两个接口HttpServletRequest请求,HttpServletResponse响应
由tomcat中的类具体实现 org.apache.catalina.connector.RequestFacade
* */
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println("service");
System.out.println("service"+":"+req);
}
/*
* 初始化,例如获取配置文件中的参数信息
只执行一次,在构造方法执行完成后执行
* */
@Override
public void init(ServletConfig config) throws ServletException {
// System.out.println("init");
System.out.println("init"+config.getInitParameter("name"));
}
/*
* 销毁: 在servlet对象销毁前,执行一些操作
例如保存日志
* */
@Override
public void destroy() {
System.out.println("destroy");
}
}
HTTP协议
超文本传输协议 (HyperText Transfer Protocol),用于定义客户端浏览器和服务器之间交换数据的过程。
HTTP是一个基于TCP/IP通信协议来传递数据。
HTTP请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。
请求包括:
请求行,请求头,请求体
请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中参数以键值形式传递,多个用&链接,服务器接收到后再解析
GET方式和POST方式
package webback;
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, 会调用父类中的init
//service 请求过来后,会先调用父类中的service,service中根据不同的请求方式,判断调用哪个方法处理
//destroy 如果销毁前没有什么可以执行的操作,destroy()可以不重写,会调用父类中的destroy.
/*
dopost() 处理post方式的http请求
请求中的数据到达服务器之后,会将数据封装到HttpServletRequest中(实际是一个子类对象)
通过此对象接收请求中的数据
响应对象HttpServletResponse
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("dopost");
}
/*
doget()处理get方式的http请求
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<!--
http请求
包含请求行,请求头 由浏览器提交
请求体: post方式向服务器发送的数据
http的常用两种请求方式
get : 超链接, form method="get"
post: form method="post"
区别:
get
主要用于从服务器获取数据, 传少量的信息,有限制
post
主要用于向服务器发送数据,大量发送,没有限制
-->
<form action="http://127.0.0.1:8080/webback/loginServlet" method="post">
账号:<input type="text" name="account" /><br/>
密码:<input type="password" name="password" /><br/>
<input type="submit" value="登录" />
</form>
</body>
</html>
注:Get方式与post方式的区别
Get方式主要是从服务器获取信息;post主要是想服务器提交信息
Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在请求体中提交。
GET方式提交的数据大小受限制一般1kb(不同浏览器也会有不同);而POST则没有此限制。