浅谈JavaWeb之Servlet--JavaWeb Day 1

1、Servlet是什么?

简单来说Servlet其实就是一个类,是动态资源,当服务器接收到请求时它可以处理请求,属于Javaweb三大组件之一。

2、Servlet如何处理服务器接收到的请求?

当用户请求一个Servlet时,Servlet容器自动构建请求和响应对象,然后就执行Servlet中的Service方法,Service方法会接收请求(request)和响应(回复)对象(response),通过响应对象将处理结果发送给用户,即:接收请求对象--处理请求--完成相应

3、Servlet的生命周期与其对应方法

Servlet的生命周期是通过Java.servlet.Servlet借口中的init()、service()和destroy()方法表示。Servlet的生命周期有四个阶段:实例化、初始化、请求处理以及销毁。

3、实现Servlet的方式

(1)实现javax.servlet.Servlet借口 继承

(2)javax.servlet.GenericServlet类 继承

(3)javax.servlet.http.HttpServlet类 (主要)

4、get与post的区别

get与post都是向浏览器传递指令(数据),不同的是get支持输入的指令(数据)少并且不安全,而post支持输入的指令(数据)更长且更安全。【注:get调用doget,post调用dopost方法】

5、append连接字符串等等

形式如下:

                response.getWriter().append("what    ").append("hell    ").append("?");

运行起来显示结果如下:

               What    hell    ?

6、请求转发与重定向

为了使概念更易懂引入大牛给出的例子:我没有钱,小王有一元,小明向我借一元

请求转发:我接收小明的请求,之后我借小王的一元,将得到的借给小明

重定向:我接收小明的请求,将小明的请求重新定向给小王,即我把小明推荐给小王,从而使小明借到一元

不同点:

(1)、

请求转发是一个请求一次回应,重定向是两次请求两次回应;

(2)、

请求转发地址栏不发生变化,重定向会显示后一个请求的地址;

(3)、

请求转发只能转发到本项目其他的Servlet,重定向不仅仅能转发到本项目的其他Servlet,还能重定向到其他项目;

(4)、

请求转发是服务端行为,转发只需要给出转发的Servlet路径即可,而重定向需要给出requestURL,即包含项目名

总体而言请求转发效率相对更高;

【注:

1、服务器针对客户端的每一次的请求都会创建出相应的新的request和response对象,然后传给service方法(详情见上方第二条),但是每次应客户端请求创建出的新的request和response对象的生命周期都较短。

2、PrintWriter与ServletOutputStream:

PrintWriter是用来向客户端发送字符数据,ServletOutputStream则是用来向客户端发送字节数据;两者功能看似只有一字之差,实际上却千差万别。ServletOutputStream流是字节流,可以处理任意类型的数据,但是相比之下PrintWriter流却是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。

3、Servlet中中文乱码的问题:

如果我想利用response输出    长寿    石灰这两个汉字,并不是单纯response.getWriter().append("长寿    ").append("石灰"    );就可以,因为这样所显示在网页上的一定是乱码,我也尝试了在这句代码之前添加上response.setCharacterEncoding("UTF-8");结果还是显示乱码。(并且在eclipse自带浏览器上所显示的和真正浏览器上不同,eclipse自带浏览器并不可信)。最后我发现只要在这句代码前打上response.setContentType("text/html;charset=utf-8");便可以纠正乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值