JavaWeb
现实生活中的互联网项目都是javaWeb项目, 包含网络, 多线程, 展示: HTML等其他的前端技术, 界面窗体展示(Swing包,AWT包 窗体), C#,
JAVAWeb架构:(面试重点:要求记忆)
-
B/S: 浏览器/服务器
优点: 以浏览器作为客户端, 使用这个软件, 用户不需要下载客户端, 程序更新,不需要更新客户端
缺点: 通信协议固定: https(http+安全策略) http, 安全性相对比较低, 一直改善 (javaWeb大部分是B/S)
-
C/S 客户端/服务器: 客户端,服务器都是软件提供商开发的, 用户需要下载客户端, 客户端更新, 用户也需要更新客户端
优点: 安全性高, 通信协议自定义, 窃取数据难度加大
资源
服务器存放的文件都称为资源, 代码,js,css,html,图片, 视频,音频, txt….
-
静态资源
-
动态资源
资源访问: URL
URL组成部分:
协议(http(开发阶段)/https)://服务器ip:端口/资源路径
服务器ip:
直接写真实ip
如果是本地访问, 真实ip, localhost, 127.0.0.1
如果是远程, 买/租域名,来绑定服务器ip, 通过域名访问
端口:
http通信协议默认端口: 80
https通信协议默认端口: 443
web服务器
硬件服务器: 类似一台电脑
软件服务器: 程序(发布项目, 接收请求, 响应)
web软件服务器:
-
Tomcat(Apache):Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的 学习
-
JBoss(JBOSS):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
-
Weblogic(Orcale):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
-
Websphere(IBM):IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
tomcat的使用 (软件)
-
下载: apache官网下载 Apache Tomcat® - Welcome!
-
安装
免安装版, 解压就可以使用, tomcat目录不要包含中文
启动tomcat: 在命令行的方式(了解),
在启动Tomcat之前,我们必须要配置环境变量 :
-
JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK;
-
CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:D: tomcat apache-tomcat-8.5.59。
启动:进入%CATALANA_HOME% bin目录,找到startup.bat,双击即可;
关闭:进入%CATALANA_HOME% bin目录,找到shutdown.bat,双击即可;
idea 整合tomcat 重点
idea2020之上, web项目删除了, 只能使用maven的方式
image-20231016101023299
Servlet
接收前端请求, 处理请求, 响应结果
创建Servlet的方式
实现javax.servlet.Servlet接口
继承javax.servlet.GenericServlet抽象类
继承javax.servlet.http.HttpServlet抽象类(实际开发都使用该方式), 专门处理Http请求
Servlet类编写由程序员完成, Servlet对象创建, 方法的调用 不需要程序员手动创建与调用
Servlet对象创建由web服务器创建(tomcat),保存tomcat容器中
调用servlet的方法, 通过访问url调用
Servlet开发
1.编写一个类实现Servlet接口,重写抽象方法
package com.fs.servlet;
import javax.servlet.*;
import java.io.IOException;/**
* Servlet创建方式1
* 实现javax.servlet.Servlet接口
* service 服务
* servlet
*/
public class AServlet implements Servlet {
/**
* 生命周期方法 由tomcat调用
* 创建该Servlet对象, 之后马上调用 初始化方法, 进行初始化操作
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("AServlet~创建成功了");
}
/**
* 生命周期方法 由tomcat调用
* 服务方法, 当前端发送请求该Servlet的url, 该方法就调用
* 接收前端请求, 处理请求, 响应结果
* 每请求一次,调用一次
* @param servletRequest
* @param servletResponse
* @throws ServletException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("AServlet为您服务....");
}/**
* 生命周期方法 由tomcat调用
* 该AServlet对象被销毁之前调用该方法 释放资源
* @throws ServletException
*/
@Override
public void destroy() {
System.out.println("AServlet正在死亡....");
}/**
* 获取ServletConfig对象(Servlet的配置),
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 获取ServletInfo信息(Servlet描述信息)
* 没有什么意义
* @return
*/
@Override
public String getServletInfo() {
return "AServlet是一个快乐的Servlet";
}
}
2.
在web.xml文件中配置Servlet, 后期使用注解替换
绑定一个能够访问它的url
<servlet>
<!--servlet-name: 名字, 一般就是类名-->
<servlet-name>AServlet</servlet-name>
<!--servlet-class: 对应Servlet类, 全限定名-->
<servlet-class>com.fs.servlet.AServlet</servlet-class>
</servlet><servlet-mapping>
<servlet-name>AServlet</servlet-name>
<!--绑定url 一般使用 /开头-->
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
提交方式:
get请求: 超链接, 浏览器地址栏输入, form的method=“get”
请求参数通过url传递 , 安全性低
get请求无法提交文件数据
get请求请求参数大小限制
post请求 form的method=“post”
请求参数通过请求体, url看不到, 安全性高
post请求,传递文件
put请求
delete请求
Http状态码:
100~500
200: 成功
404: 资源不存在
405: 方法不支持
500: 服务器内部出错, 后台抛出异常
HttpServlet执行流程:
Servlet细节
Servlet中包含其他接口
ServletConfig Servlet的配置信息
-
获取Servlet的初始化参数, 固定参数, 在Servlet配置的时候,进行参数配置
<servlet>
<!--servlet-name: 名字, 一般就是类名-->
<servlet-name>AServlet</servlet-name>
<!--servlet-class: 对应Servlet类, 全限定名-->
<servlet-class>com.fs.servlet.AServlet</servlet-class><!--初始化参数-->
<init-param>
<param-name>name</param-name>
<param-value>AServlet</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
-
获取ServletContext对象
getServletContext()
-
ServletContext: 域对象, Servlet的上下文, Servlet运行环境 当前Servlet运行项目
一个Tomcat部署多个项目, 每一个项目在tomcat启动的时候, 产生对应的项目的ServletContext
ServletContext: 一个项目只能有一个, tomcat启动的时候, 就会创建该项目ServletContext对象,
ServletContext销毁在Tomcat关闭的时候
ServletContext 全局的存放数据容器, javaWeb中,把这个容器称为 域对象:
ServletContext对象称为: Application域, 全局共享的, 任何客户端,任何请求,访问任何资源, 都可以共享同一个ServletContext对象的数据
域对象: 动态资源之间的数据传递, 一定有下面几个:
存数据
setAttribute(String name, Object value);
name唯一的, 如果调用setAttribute()方法存数据, key如果存在, 覆盖value
取数据
Object getAttribute(String name) 如果name不存在,返回null
删除数据
removeAttribute(String name)
获取所有的属性名
Enumeration<String> getAttributeNames()
JavaWeb中有四大域:
-
page域: 当前某个动态资源有效
-
request域: 在同一次请求内有效
-
session域: 在同一次会话中有效, 同一次会话,包含N个请求, 分用户
-
Application域: 全局共享
案例: 统计网站的访问量
访问网站任何动态资源, 访问量+ 1
访问量数据, 使用容器保存, 域对象, 使用Application域存放数据
得到ServletContext对象
-
ServletConfig接口: getServletContext()
-
如果继承HttpServlet, HttpServlet实现 ServletConfig接口, this.getServletContext()