浅谈Servlet

新人初来

大家好,作为一个刚刚走出校园的学生,被这次疫情阻碍了进京的步伐;在家复习自己所学时,先整理一下,从最初的servlet开始。

导读

  • B/S : Browser/Server 浏览器/服务器
  • C/S :Client/Server 客户端/服务器
  • 区别:
    1.硬件环境不同,C/S通常是建立在专用的网络上,小范围的网络环境。而B/S是 建立在广域网上的,适应范围强,通常有操作系统和浏览器就行;
    2.C/结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强;
    3.B/S结构维护升级比较简单,而C/S结构维护升级相对困难;
  • ideaTomcat 的配置
    1.略

1、什么是 servlet

servletJavaservlet 的简称;

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返回客户端发出请求时完整的URLeg: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 + cCtrl + v 进行访问。
###5.3、中文乱码的原由
Tomcat 服务器的默认编码是 ISO 8859-1,浏览器使用 UTF-8 编码,浏览器的中文字符提交给服务器,TomcatISO 8859-1 编码对中文字符进行编码,所以我们获取到的是乱码 。

解决方法:设置 Tomcat的编码格式。

req.setCharacterEncoding(“UTF-8”);

5.4、HttpServletRespons 状态码

状态码含义解释
100Continue只有请求的一部分已经被服务器接收,但只要它没有被拒绝,客户端应继续该请求。
101Switching Protocols服务器切换协议。
200OK请求成功。
201Created该请求是完整的,并创建一个新的资源。
202Accepted该请求被接受处理,但是该处理是不完整的。
203Non-authoritative Information
204No Content
205Reset Content
206Partial Content
300Multiple Choices链接列表。用户可以选择一个链接,进入到该位置。最多五个地址。
301Moved Permanently所请求的页面已经转移到一个新的 URL。
302Found所请求的页面已经临时转移到一个新的 URL。
303See Other所请求的页面可以在另一个不同的 URL 下被找到。
304Not Modified
305Use Proxy
306Unused在以前的版本中使用该代码。现在已不再使用它,但代码仍被保留。
307Temporary Redirect所请求的页面已经临时转移到一个新的 URL。
400Bad Request服务器不理解请求。
401Unauthorized所请求的页面需要用户名和密码。
402Payment Required您还不能使用该代码。
403Forbidden禁止访问所请求的页面。
404Not Found服务器无法找到所请求的页面。
405Method Not Allowed在请求中指定的方法是不允许的。
406Not Acceptable服务器只生成一个不被客户端接受的响应。
407Proxy Authentication Required在请求送达之前,您必须使用代理服务器的验证。
408Request Timeout请求需要的时间比服务器能够等待的时间长,超时。
409Conflict请求因为冲突无法完成。
410Gone所请求的页面不再可用。
411Length Required"Content-Length"未定义。服务器无法处理客户端发送的不带 Content-Length 的请求信息。
412Precondition Failed请求中给出的先决条件被服务器评估为 false。
413Request Entity Too Large服务器不接受该请求,因为请求实体过大。
414Request-url Too Long服务器不接受该请求,因为 URL 太长。当您转换一个 “post” 请求为一个带有长的查询信息的 “get” 请求时发生。
415Unsupported Media Type 服务器不接受该请求,因为媒体类型不被支持。
417Expectation Failed
500Internal Server Error未完成的请求。服务器遇到了一个意外的情况。
501Not Implemented未完成的请求。服务器不支持所需的功能。
502Bad Gateway未完成的请求。服务器从上游服务器收到无效响应。
503Service Unavailable未完成的请求。服务器暂时超载或死机。
504Gateway Timeout网关超时。
505HTTP Version Not Supported服务器不支持"HTTP协议"版本。

版权声明:本文为m0_46546520原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。