javaWeb的概念
javaWeb是指通过java 语言编写可以通过浏览器访问的程序的总称,叫javaWeb
请求
请求(Request)是指客户端给服务器发送数据
响应
响应(Response)是指服务器给客户端回传数据
请求和响应是成对出现的,有请求就有响应。
web资源的分类
web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种。
静态资源:html、css、js、txt、mp4视频、jpg图片
动态资源:jsp页面、servlet程序
常用的web服务器
Tomcat:由Apache组织提供的一种web服务器。提供对jsp和servlet的支持。
Jboss:是一个遵从javaEE规范的、开放源代码的、纯java的EJB服务器
tomcat安装及使用
下载网址:https://tomcat.apache.org/
目录介绍
- bin:专门用来存放tomcat服务器的可执行程序
- conf:用来存放comcat服务器的配置文件
- lib:存放tomcat服务器的jar包
- logs:存放服务器运行时输出的日记信息
tomcat服务器启动
找到tomcat目录下的bin目录下的startup.bat文件,双击就可以了
启动失败时,可以使用vscode打开startup.bat,然后在末尾输入pause,然后再点击startup.bat启动,在cmd里查看它的报错原因
停止tomcat
把窗口关闭,tomcat就关闭了
修改tomcat 的端口号
找到conf里面的server.xml 的Connector port=”xxxx”
如何把web工程部署到tomcat服务器上
第一种方法:只需要把web工程的目录拷贝到tomcat的webapps目录下即可。
第二种方法:在tomcat下\conf\Catalina\localhost
文件夹,创建一个xml文档。
1 | <!-- Context 表示一个工程上下文 |
手拖html页面到浏览器和通过ip访问的区别
手拖html到浏览器,是使用的file:// 协议,告诉浏览器读取file协议后面的路径,解析展示到浏览器上
通过http://localhost:8080/工程名/资源名
所使用的协议是http协议。
root工程的访问
当我们在浏览器中输入访问地址http://ip:port/
–>没有工程名时,默认访问的是root工程。
idea整合tomcat
WEB-INF 目录是一个受服务器保护的目录,浏览器无法直接访问到此目录的内容。web.xml是整个动态web工程的配置部署描述文件可以在这些配置很多web工程的组件,比如:Servlet程序、Filter过滤器、Listener监听器、Session超时等。
Servlet
什么是servlet
- servlet是javaEE的规范(接口)之一
- 是javaWeb三大组件之一
- 是一个运行在Web服务器上的java小程序,它可以接受和响应客户端的请求,通常是通过HTTP协议来传输数据
手动实现Servlet程序
编写一个类去==实现==Servlet接口
实现service方法,处理请求,并响应数据
到web.xml中去配置servlet程序的访问地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29<?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">
<!-- servlet标签给Tomcat配置servlet程序-->
<servlet>
<!-- servlet-name 标签,给servlet程序起一个别名,一般是类名-->
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.xinyu.servlet.helloServlet</servlet-class>
</servlet>
<!-- mapping 标签,给servlet程序配置访问地址-->
<servlet-mapping>
<!-- servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个servlet程序使用 -->
<servlet-name>helloServlet</servlet-name>
<!--
url-pattern 标签配置访问地址
下面 hello前的斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
/hello 表示 http://ip:port/工程路径/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>servlet访问原理
浏览器通过/hello这个资源路径,找到对应的url-pattern,就可以找到对应的servlet名,然后找到servlet程序。
servlet生命周期
- 执行servlet构造器方法
- 执行init初始化方法
前面两步是第一次访问,创建servlet程序时会调用 - 执行service方法
每次访问的时候都会调用(刷新一次,调用一次) - 执行destroy方法
请求的分发处理
网页请求中一般会有两种请求;Get请求和Post请求。对于不同的请求,需要service来判断,然后执行不同的方法。
1 |
|
继承HttpServlet实现servlet程序
一般项目开发中,都是==继承(extends)==servlet 的子类-HttpServlet来实现servlet程序。
1 | public class helloServlet1 extends HttpServlet { |
servlet类的继承体系
GenericServlet类实现了Servlet接口,做了很多空实现。并持有一个ServletConfig类的引用,对ServletConfig的使用做了一些方法。
HttpServlet抽取类实现了service()方法并实现了请求的分发处理
我们只需要根据自己的业务需求,重写doGet或者doPost方法即可
ServletConfig类
Servlet程序的配置信息类
三大作用:
- 可以获取servlet程序的别名 servlet-name 的值
即web.xml中配置的name值 - 获取初始化参数 init-param
- 获取ServletContext对象
一般在初始化时,打印这些信息
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责使用。
Servlet程序默认是第一次访问的时候创建,每一个Servlet程序创建时,就创建一个对应的ServletConfig对象。
重写init方法之后,一定要调用super.init(config)
ServletContext类
servletContext是一个接口,它表示Serclet上下文对象。
一个Web工程,只有一个ServletContext对象实例.它在web工程部署启动的时候创建。在web工程停止的时候销毁。
它是一个域对象-可以像Map一样存取数据的对象
这里的域指的是存取数据的操作范围
无 | 存数据 | 取数据 | 删除数据 |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
四个常见作用
- 获取web.xml中配置的上下文参数context-param-它属于整个web工程
ServletContext context = getServletConfig().getServletContext();
String xxx = context.getInitParameter("xxx");
- 获取当前的工程路径,格式:/工程路径
context.getContextPath()
- 获取工程部署后在服务器硬盘上的绝对路径
context.getRealPath("/")
- 像Map一样获取数据
HTTP协议
客户端和服务器之间通信时,发送的数据,需要遵守的规则,交HTTP协议,HTTP中的数据,又叫报文
客户端给服务器发送数据叫请求,服务器给客户端回传数据叫响应。
请求
请求分为两种
GET请求
- 请求行
1、请求的方式 GET
2、请求的资源路径(+?+请求参数)
3、请求的协议的版本号 HTTP/1.1 - 请求头
key:value 组成,不同的键值对,表示不同的含义
1、Accept:告诉服务器,客户端可以接受的数据类型
2、User-Agent:就是浏览器的信息
3、Host:表示请求的服务器ip和端口号
- 请求行
POST请求
请求行
1、请求的方式 POST
2、请求的资源路径(+?+请求参数)
3、请求的协议的版本号 HTTP/1.1请求头
key:value 组成,不同的键值对,表示不同的含义
空行请求体—->发送给服务器的数据
1、Referer:表示请求发起时,浏览器地址栏中的地址(从哪来)
2、Content-Type:表示发送的数据的类型- application/x-www-form-urlencoded
表示提交的数据格式是:name=value&name=vlaue,然后进行url编码-把非英文内容转码为%xx%xx - multipart/form-data
表示以多段的形式提交数据给服务器(以流的形式提交,用于上传)
- application/x-www-form-urlencoded
区分GET请求和POST请求
GET
- form标签 method = get
- a标签
- link标签引入css
- script标签引入js文件
- img标签引入图片
- iframe引入html页面
- 在浏览器地址中输入地址回车
POST
- form标签 method = post
响应
1、响应行
- 响应的协议和版本号
- 响应状态码
- 响应状态描述符
2、响应头
- key:value 不同的响应头,有所不同
Server:表示服务器的信息
Content-Type:表示响应体的数据类型
Content-Length:响应体的长度
Date:请求响应的时间(这是格林时间) - 空行
3、响应体 ——>回传给客户端的数据
4、常见的响应码
- 200:表示请求成功
- 302:请求重定向
- 404:表示请求服务器收到了,但是你要的数据不存在(请求地址错误)
- 500:表示服务器已经收到请求,但是服务器内部错误
5、MIME
它是HTTP协议中的数据类型,全称是Multipurpose Internet Mail Extensions
多功能Internet邮件扩充服务。MIME类型的格式是大类型/小类型
,并与某一种文件的扩展名相对应。
HttpServletRequest类
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议解析封装到Request对象中,然后传递到service方法中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
这个类的常用方法
1、getRequestURI() 获取请求的资源路径
2、getRequestURL() 获取请求的统一资源定位符
3、getRemoteHost() 获取客服端的ip地址
4、getHeader() 获取请求头
5、getParameter() 获取请求的参数
6、getParameterValues() 多个参数时使用
7、getMethod() 获取请求的方式
8、setAttribute(key,value) 设置域数据
9、getAttribute(key) 获取域数据
10、getRequestDispatcher() 获取请求转发对象
获取客户端发送的请求参数
用户从网页上输入的账号和密码的获取方式
1 |
|
对于网页请求的字符集处理
1 | //这使得输入中文字符,也能传到服务器进行处理 |
请求转发
指服务器收到请求后,从一个资源跳到另一个资源得操作叫做请求转发。也就是可以从servlet1跳转到servlet2进行进一步的处理。servlet1和servlet2共同完成一个完整的业务功能。
请求转发的特点:
- 浏览器的地址栏没有变化
- 他们是一次请求
- 它们共享Request域中的数据
- 可以转发到WEB-INF目录下(访问这个目录下的资源)
Base标签的作用
使得servlet跳转到此页,想返回到主页的时候,把这一页作为基地址来跳转。
1 | //注意这里的a前面不能加/ 斜杠。应为它会被解析为http://ip:port |
1 | //主页跳转到的c网页。 |
使用html超链接跳转和servlet请求转发跳转,去的网页地址是不一样的。
超链接跳转。访问到的是c的源地址
servlet转发地址是servlet的地址
但是,跳回首页的命令只有一个,这里若是不同的基地址,则servlet这里不能返回首页,所以需要规定它的base。这样,就会先根据base地址来跳转。
Web中的相对路径和绝对路径
相对路径
. 表示当前目录
.. 表示上一级目录
资源名 表示当前路径/资源名
绝对路径
Web中 / 斜杠的不同意义
在web中,/ 斜杠是一种绝对路径
也就是说,在html或者jsp文件中,/ 斜杠如果被浏览器解析,得到的地址是http:ip:port/
在服务器中,/ 被解析为http:ip:port/项目名
。特殊情况 response.sendRediect(“/“) 把斜杠发送给浏览器解析。为http:ip:port/
HttpServletResponse类
和HttpServletRequest类一样,每次请求进来,Tomcat服务器,都会创建一个Response对象传递给servlet程序去使用。HttpServletResponse表示响应的信息。我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。
两个输出流的说明
- 字节流:getOutStream() 常用于下载(传递二进制数据)
- 字符流 :getWriter() 常用于回传字符串
两个流只能使用一个。使用了字节流,就不能使用字符流。
如何往客户端回传数据(字符流)
传给客户端数据,就是使用getWriter() 拿到PrintWriter对象。然后println() 就可以了。但是需要注意,传入的字符集和浏览器使用的字符集需要一样。而且这个字符集需要支持中文,才能正确打印中文。
1 | public class ResponseIOservlet extends HttpServlet { |
请求重定向
请求重定向:指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问。
1 | public class response1 extends HttpServlet { |
特点:
- 浏览器的地址栏会发生变化
- 会有两次请求
- 不共享Request域中的数据
- 不能跳转到WEB-INF目录下
- 可以访问项目外的地址。例如,可以跳转到goole、百度等:
www.google.com
区分一下它与请求转发的区别
另外一种实现方法(推荐使用):
1 | resp.sendRedirect("http://localhost:8080/项目名称/...") |
JSP
jsp的全称是java serverpages。java 的服务器页面
jsp 的主要作用是代替servlet程序回传html页面的数据.因为servlet程序回传html页面数据是一件非常繁琐的事情。它的本质其实是是个==servlet程序==。
当我们第一次访问jsp页面的时候,Tomcat服务器会帮我们把jsp页面翻译为一个java源文件。并对它进行编译为.class字节码程序。我们打开java源文件不难发现里面的内容是: