Servlet目录
新人初来
大家好,作为一个刚刚走出校园的学生,被这次疫情阻碍了进京的步伐;在家复习自己所学时,先整理一下,从最初的servlet开始。
导读
- B/S : Browser/Server 浏览器/服务器
- C/S :Client/Server 客户端/服务器
- 区别:
1.硬件环境不同,C/S通常是建立在专用的网络上,小范围的网络环境。而B/S是 建立在广域网上的,适应范围强,通常有操作系统和浏览器就行;
2.C/结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强;
3.B/S结构维护升级比较简单,而C/S结构维护升级相对困难; - idea 中 Tomcat 的配置
1.略
1、什么是 servlet
servlet 是 Javaservlet 的简称;
java brwser -> applet(小程序) java applet(需要安装)–> browser 模拟 或 产生 类似于consle 的界面。
最初运行于浏览器的Java程序(小程序)
.java文件 – jvm(加载及编译)–产生class --运行于java jvm console
java ee – servlet – javaweb
servlet–> 可以把java程序编译以后的目标文件放在浏览器当中运行的一个程序。
但是不是所有的 class文件都可以作为 servlet;
只有继承 servlet协议的 class文件 被声明后 才可以作为 servlet;
eg:extends javax.http.HttpSevlet
在 idea中,配置tomcat时,需要导入 servlet.api.jar 和 jsp.api.jar 两个jar包。
servlet 的配置文件
web.xml 共有两部分:
第一部分
哪个 class是一个 servlet
<!--class-->
<servlet>
<servlet-name>demo</servlet-name><!--为servlet起别名-->
<servlet-class>com.ftg.learn.servlet.DemoServlet</servlet-class>
<!--指定servlet的目标路径-->
</servlet>
第二部分
servlet被声明后在 浏览器中的 访问名称
<servlet-mapping>
<servlet-name>demo</servlet-name><!--与第一部分别名一致-->
<url-pattern>first</url-pattern><!--声明浏览器访问路径-->
</servlet-mapping>
1.1、类文件的加载过程
类文件又称为 .java文件类的加载是指把类的 .class文件中数据读入到内存中,通常是创建字节数组读入.class文件,然后产生与所加载类对应的 Class对象,加载完成后就进入连接阶段,最后JVM 对类进行初始化。
1.2、连接阶段
1.2.1、验证:为了确保 .class文件的字节码中包含的信息符合当前虚拟机的要求,并不会危害虚拟机的自身安全。
1.2.2、准备:为静态变量分配内存并设置默认的初始值。
1.2.3、解析:将常量池中的符号引用替换为直接引用的过程。
###1.3、初始化
1.3.1、如果本类存在直接的父类,并且这个类还没有被初始化,那么就先初始化父类;
1.3.2、如果类中存在初始化语句,那么就依次执行初始化语句。
2、servlet 的设计方式
{
在该类被加载时,是否需要强制继承某些类或接口
1、侵入式设计 (需要):servlet
2、非侵入式设计(不需要):spring mvc;
大部分侵入式设计的底层都是侵入式设计。
}
##3、servlet 的生命周期
创建()、初始化(init)、执行(service)、销毁(destroy)
3.1、执行时间
3.1.1、inti
当tomcat启动时,web.xml–servlet–servlet.class ,对 servlet 进行初始化时执行
3.1.2、service
3.1.2.1、当浏览器访问该servlet时,service执行。
3.1.2.2、service 里包含的方法:doget、 dopost;
3.1.2.3、前台发送的post、get、delete等请求都由service方法处理。当service 后台提供的 doget 只能解决前台发送的 get 请求; dopost 只能解决前台发送的 post 请求。
当service方法存在时,doget与dopost 自动失效。
3.1.3、destroy
该 servlet 执行结束或崩溃时执行销毁。
4、常用的servlet
4.1、Httpservlet
与Http相关,具有超文本传输协议的特点。
HttpServlet的父类是 GenericServlet
继承 GenericServlet(抽象的)时,不需声明
###4.2 servlet配置信息
1
当有个 servlet时,按顺序执行,2、3要在1实例化执行后在执行。
##5、HttpServletRequest与HttpServletRespons
###5.1、HttpServletRequest常用方法
方法 | 作用 | 示例 |
---|---|---|
getRequestURL | 返回客户端发出请求时完整的URL | eg:String requestUrl = request.getRequestURL().toString(); |
getrequestURI | 返回请求行中的资源名部分。 | eg:String requestUrl = request.getRequestURI(); |
getQueryString | 方法返回请求行中的参数部分 | |
getRemoteAddr | 方法返回发出请求的客户机的IP地址 | |
getRemoteHost | 方法返回发出请求的客户机的完整主机名 | |
getRemotePort | 方法返回客户机所使用的网络端口号 | |
getLocalAddr | 方法返回WEB服务器的IP地址 | |
getLocalName | 方法返回WEB服务器的主机名 | |
getMethod() | 获取当前请求方式;返回值:post、get、put、delete; | eg:if(“get”.equals(req.getMethod())) |
1.getHeader();2.getHeaders();3.getHeaderNames(); | 获得客户机请求头: |
###5.2、防盗链
我在服务器中分享的资源,想要拿到我的资源,必须通过我的指定链接访问进去才能获取资源。在这个链接界面可以发布一些广告给访问者。简而言之,就是不能使用 Ctrl + c 和 Ctrl + v 进行访问。
###5.3、中文乱码的原由
Tomcat 服务器的默认编码是 ISO 8859-1,浏览器使用 UTF-8 编码,浏览器的中文字符提交给服务器,Tomcat以 ISO 8859-1 编码对中文字符进行编码,所以我们获取到的是乱码 。
解决方法:设置 Tomcat的编码格式。
req.setCharacterEncoding(“UTF-8”);
5.4、HttpServletRespons 状态码
状态码 | 含义 | 解释 |
---|---|---|
100 | Continue | 只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。 |
101 | Switching Protocols | 服务器切换协议。 |
200 | OK | 请求成功。 |
201 | Created | 该请求是完整的,并创建一个新的资源。 |
202 | Accepted | 该请求被接受处理,但是该处理是不完整的。 |
203 | Non-authoritative Information | |
204 | No Content | |
205 | Reset Content | |
206 | Partial Content | |
300 | Multiple Choices | 链接列表。用户可以选择一个链接,进入到该位置。最多五个地址。 |
301 | Moved Permanently | 所请求的页面已经转移到一个新的 URL。 |
302 | Found | 所请求的页面已经临时转移到一个新的 URL。 |
303 | See Other | 所请求的页面可以在另一个不同的 URL 下被找到。 |
304 | Not Modified | |
305 | Use Proxy | |
306Unused | 在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。 | |
307 | Temporary Redirect | 所请求的页面已经临时转移到一个新的 URL。 |
400 | Bad Request | 服务器不理解请求。 |
401 | Unauthorized | 所请求的页面需要用户名和密码。 |
402 | Payment Required | 您还不能使用该代码。 |
403 | Forbidden | 禁止访问所请求的页面。 |
404 | Not Found | 服务器无法找到所请求的页面。 |
405 | Method Not Allowed | 在请求中指定的方法是不允许的。 |
406 | Not Acceptable | 服务器只生成一个不被客户端接受的响应。 |
407 | Proxy Authentication Required | 在请求送达之前,您必须使用代理服务器的验证。 |
408 | Request Timeout | 请求需要的时间比服务器能够等待的时间长,超时。 |
409 | Conflict | 请求因为冲突无法完成。 |
410 | Gone | 所请求的页面不再可用。 |
411 | Length Required | "Content-Length"未定义。服务器无法处理客户端发送的不带 Content-Length 的请求信息。 |
412 | Precondition Failed | 请求中给出的先决条件被服务器评估为 false。 |
413 | Request Entity Too Large | 服务器不接受该请求,因为请求实体过大。 |
414 | Request-url Too Long | 服务器不接受该请求,因为 URL 太长。当您转换一个 “post” 请求为一个带有长的查询信息的 “get” 请求时发生。 |
415 | Unsupported Media Type 服务器不接受该请求,因为媒体类型不被支持。 | |
417 | Expectation Failed | |
500 | Internal Server Error | 未完成的请求。服务器遇到了一个意外的情况。 |
501 | Not Implemented | 未完成的请求。服务器不支持所需的功能。 |
502 | Bad Gateway | 未完成的请求。服务器从上游服务器收到无效响应。 |
503 | Service Unavailable | 未完成的请求。服务器暂时超载或死机。 |
504 | Gateway Timeout | 网关超时。 |
505 | HTTP Version Not Supported | 服务器不支持"HTTP协议"版本。 |