Java EE
文章目录
Servlet
服务器
狭义:指的是一种软件,里面可以存放文件,别人可以访问,服务器可以做出回应广义:硬件+软件(云服务器机房)
它是一个容器(部署项目),是连接用户与程序之间的中间件。
web环境搭建
1、下载安装Tomcat
解压、设置Java_HOME环境变量(依赖于JDK,根据JAVA_HOME找到jdk)
启动服务器(进入到bin目录中 startup.bat)、访问服务器(ip+端口 127.0.0.1:8080)
关闭服务器(bin shutdown.bat)
tomcat文件夹:bin 启动关闭的命令 logs 日志文件 work 工作目录
conf tomcat配置文件 temp 临时文件
lib 运行的jar包 webapps 发布web项目的
2、创建web项目
添加web依赖(web-WEB-INF-lib.web.xml)
3、发布web项目到服务器
把Tomcat集成到IDEA中
Servlet==java EE
servlet applet==用java写的服务器端程序
作用:接收客户端请求、调用其他程序处理dao jdbc、根据处理的结果向客户端作出响应
web.xml 是web项目中的配置文件,在服务器启动时,由服务器加载读取
配置注册servlet
<servlet>
<servlet-name>demo</servlet-name>//生成的对象名只有一个,只创建一个servlet对象
<servlet-class>***</servlet-class>//配置类的地址,由服务器来创建Servlet对象,通过反射机制创建
<load-on-startup>0</load-on-startup>//配置服务器启动时,创建Servlet对象为Servlet提供一个前端访问地址
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>//定义一个请求地址
</servlet-mapping>
servlet的生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCsKXX6Y-1677571537252)(C:\Users\ycj\AppData\Roaming\Typora\typora-user-images\1650107031312.png)]
http协议(应用层)
基于TCP(传输层)/IP 通信协议传输数据
前端网页:
action=“后端地址” method="post /get"请求方式
在网页中点击超链接,提交表单都是向服务器端发送http请求
一个http请求,包含3个部分:
请求头:包含请求地址,方式.客户端信息···由浏览器发送完成
请求行
请求体:post请求中的数据都在请求体中
get:主要用于从服务器端获取数据,传递少量的数据,获取大量数据
post:主要用于向服务器发送数据,注册,登录提交表单
get 数据在地址中拼接携带的,一个是不安全(相对于post),传递的数据量小
post 数据在请求体中存储,相对安全,且传输的数据量大,上传文件都是post
超链接是get,表单post
构造方法 默认存在 init().service().destroy() 父类有
在servlet中常用doGet和doPost
处理get请求
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp)······{
}
处理post请求
@Override
protected void doPost(······){
}
HttpServletRequest对象表示请求,所有请求数据都包装在此对象中
HttpServletRequest是接口,谁来实现?是由某个子类实现。
现在直接通过submit提交表单到后端服务器,这种方式属于同步提交,服务器响应回来的内容会将整个网页覆盖,会影响前端网页中的正常操作
在现在的前后端分离开发模式后,前端向后端发送请求,都是异步发送
何为异步发送?
异步发送本质是使用浏览器中提供的一个js对象,就是XMLHttpRequest.
使用此对象异步向服务器发送请求,后端响应的内容会反馈给XMLHttpRequest对象,再从js中把响应的内容更新到网页的某个标签上,整个过程页面不会被覆盖,不会刷新
前后端分离开发,前端一个服务器,后端是另一个服务器
在发送ajax请求时,浏览器有一个安全限制(默认是遵守同源策略)
只要请求协议,域名/ip,端口有一个不同,就被视为跨域访问(跨服务器访问)
解决办法:前端解决,后端解决:在响应类中,向前端响应一个允许接收的标志
如何将后端更多的信息传递到前端
json是一种轻量级的数据交换格式,已经成为前后端数据交换的规范
java对象——json格式(字符串)——前端js(转为js对象)
过滤器
Filter也称之为过滤器,通过 Filter技术,对web服务器管理的所有web资源:例如Servlet, 从而实现一些 特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信 息等一些高级功能。
作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)
Filter接口是过滤器类必须实现的接口,该接口中有三个方法:
init(FilterConfig filterConfig):该方法是对filter对象进行初始化 的方法,仅在容器初始化filter对象结束后被调用一次。参数 FilterConfig可以获得filter的初始化参数。
doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request 和response进行预处理。其中FilterChain可以将处理后的request 和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁过滤器对象前被调用。
过滤器用来实现通用的功能,减少代码冗余,提高可维护性。
一个过滤器可以配置给多个资源使用 。
一个资源也可以配置多个过滤器,按照配置顺序调用。
web会话跟踪机制
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结
束,被称为一个会话。
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用
的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份, Session通过在服务器端记录信息确定用户身份。
Session是另一种记录客户状态的机制,它在用户第一次打开浏览器连接到后端服务 器时,由服务器创建产生,生成一个id号,作为会话标识。服务器通过Cookie将生成的会话id响应到浏览器中,之后每次请求将浏览器端的会话 id向服务器端提交,服务器就可以得知是哪个客户端发起的请求。
session
Servlet API中,定义了HttpSession接口,用来封装会话对象。
HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用 HttpServletRequest中的方法获得会话对象。
public HttpSession getSession():获取跟当前请求相关的 session,如果不存在session,就创建一个新的session对象返回。
使用session实现会话机制的过程 :
1.当容器创建一个新的HttpSession对象后,即生成一个随机数,称为
会话ID,并将ID值封装成一个名字为JSESSIONID的session,返回给
客户端。
2.调用request.getSession方法获得会话对象时,容器先从request
中获取JSESSIONID值,根据JSESSIONID值查找到对应的会话对象,
返回使用。
3.如果没有获取到JSESSIONID值,认为当前的请求没有相关联的会话
对象,重复步骤1。
会话对象生命周期 :
会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。
还可以调用HttpSession中的invalidate 方法,使会话失效,立即销毁会话对象。
Cookie
cookie是保存会话数据的一种技术,其容量有 限;有生命周期,根据需求设置cookie有效期如果不进行设置的话,数据保存 至浏览器关闭。
Cookie中的信息存储在浏览器中,用于从服务器端向客户端响应一些相关数据。