一、什么是Servlet?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
servlet的传输方式:
-
request:请求
-
response:响应
-
注意:
-
1、java是以流的形式往外输出的
-
2、servlet使用最简单的字符打印流往外输出
二、跳转页面的两种方式
重定向:
概念:让用户重新请求一个新的页面,所以,是用户发起一个新的请求
- 1、页面上的URL定位 / 指的是web资源路径127.0.1.1 :8080
- 2、他是一个新的请求,所以在浏览器上,你可以看到url地址发生了变化
- 3、及时一个新的请求,那么和他之前的requset请求是不同的对象
- 4、url会有两个,一次请求一次响应
请求转发:
概念:请求转发的意思是,服务器直接进行跳转,所以用户浏览器是不知道最终要跳转到那个页面上的
- 1、既然是服务器跳转,所以 / 是根据服务器的url来定位的。 / 指的是127.0.0.1:8080/工程名
- 2、服务器跳转,浏览器是不知道的,所以url地址看不到最后的变化
- 3、request始终都只有一个
三、http协议
概念:HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。
注意:
HTTP请求的细节——请求行:
- 1、请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有:
GET、 POST - 2、 用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
http常见状态码:
2**开头 :
-
(请求成功)表示成功处理了请求的状态代码。
-
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
3** 开头:
- (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
4**开头:
- (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理
例: - 400 (错误请求) 服务器不理解请求的语法。
- 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
- 403(禁止) 服务器拒绝请求。
- 404 (未找到) 服务器找不到请求的网页。 405 (方法禁用) 禁用请求中指定的方法。
- 408(请求超时) 服务器等候请求时发生超时。
5**开头:
-
(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
例: -
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
-
501 (尚未实施) 服务器不具备完成请求的功能。
例如,服务器无法识别请求方法时可能会返回此代码。 -
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
-
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
-
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
-
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
四、get和 post
get和post的区别
-
get获取url内容
-
post是获取form表单元素内容
-
get传输文件内容一次只能传1kb
-
post传输内容无限大小
-
get获取url内容可以看到内容信息,所以是不安全的
-
post获取表单元素的话是看不到元素内容,是相对安全的
-
get请求解决乱码问题,需要每个字符每个参数单独处理
注意:
1、tomcot8 get方式的请求不需要在进行转换,因为tomcat内部已经处理了这个问题2、如果要转换的话反而会出现问题,从而导致乱码
-
post请求阶段乱码问题的话可以一次性处理所有字符
进一步深化get和post的区别
-
提交数据类型
1、get文本
2、post文本、二进制文本 -
提交数据长度
1、get不能超过255个字符
2、post没有限制 -
提交数据可见性
1、get作为URL地址的一部分显示在浏览器地址栏,不安全的
2、post作为请求的消息体、不可见,相对安全的 -
提交数据缓存
1、get缓存在浏览器URL历史状态中
2、post不会被浏览器缓存
五、获取外部内容乱码问题
如果是get请求,那么要解决中文乱码的问题,就需要每个参数都单独去处理
-
第一步,把String转换为字节数组
String bookname = request.getParameter("?");
-
第二步,再把字节数组通过UTF-8重新转换为String类型
bookname = new String(bytes,“UTF-8”);
-
注意
1、tomcat 8 get方式的请求不需要再进行转换了,因为tomcat内部已经处理了这个问题
2、如果你闲得无聊还是要转的话就会出问题
六、servlet生命周期
注意:
- servlet是单例的,tomcat每个servlet只会生成一次
servlet共有三个方法,分别是:
1、 init()
- 只会被调用一次,只有一次servlet被初始化的时候才会被调用,通过多线程访问
2、servlet()
- servlet是每次有新的请求都会被调用
3、destroy()
- destroy在tomcat服务器关闭的时候被调用
七、存数据的方式
1、requst
- 一般情况下,我们肯定使用的是requst传值
- 一般情况下数据都存放在这里
2、servletContext
- 之意servletContext在这里保存的是所有的serblet共享的,所以一般情况下,就算要存在Context中,也是公共比计较简单的值
3、session
- 状态管理,是有效的,默认值为30分钟
- 一般情况下session使用场景为用户登录数据和购物车
八、Filter过滤器
概念:
- Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Filter是如何实现拦截的?
- Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法
- 调用目标资源之前,让一段代码执行。
- 是否调用目标资源(即是否让用户访问web资源)。
- 调用目标资源之后,让一段代码执行
用法:
- urlPatterns这里的意思是要过滤掉哪些内容 /* 就代表根路径下面所有的内容都需要过滤
- 也可以使用通配符进行过滤, *.do,这个就代表匹配所有的后缀名叫 .do,注意使用通配符前面不能加/
注意: - Tomcot7以下版本(包括7)以后必须手动设置转码提交处理
九、请求转发和人重定向
请求转发
1、概念:
- 是在客户端发起请求后,在服务器之间的跳转,然后服务器返回页面给客户端进行显示。此时地址栏的地址没有进行改变。
2、用法: - 在servlet中调用转发:
request.getRequestDispatcher("new.jsp").forward(request,response);//转发到new.jsp
重定向
1、概念:
- 客户端发起请求之后,服务器会将重定向的地址发给客户端,客户端将地址拿到之后,重新发起请求,服务器进行返回数据。地址栏的地址进行改变。
2、用法:
- 在servlet中调用重定向
response.sendRedirect("new.jsp");//重定向到new.jsp
两者的区别:
-
1.转发是服务器行为;重定向是客户端行为。转发在服务器端完成的;重定向是在客户端完成的。
-
2.转发的速度快;重定向速度慢。
-
3.转发的是同一次请求一次响应;重定向是两次不同请求两次响应。
-
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码。
-
5.转发地址栏没有变化;重定向地址栏有变化。
-
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成。
最后:创作不易,还望看官打赏