Servlet是sun官方制定的使用java制作web程序的规范。
而jsp是封装过的servlet。
① Servlet继承自HttpServlet
② 重写doGet,doPost方法
Servlet生命周期
①实例化
②Init()只访问一次,在第一次加载servlet的时候使用
<load-on-startup></load-on-startup>
中间加一个数字,服务器启动就运行
③Service()
④Destroy()
⑤销毁实例并标记为垃圾收集
重点要理解的是:servlet是由容器创建的,由我们的init方法初始化的。
HttpServlet继承的其中一个借口是serlvetConfig包含了所有的配置信息
传入的这个对象有两个方法,getInitParameter,getServletName
Request对象是请求的意思,封装了客户端请求信息
Response对象是回应的意思。
访问服务器有三种方式,第一通过超链接,第二通过地址栏直接访问,第三个通过form的action访问。
request.getParameter("");
这句很关键,客户端请求参数的名称
客户端只要有此请求参数,即便没有值也返回空字符串,如果没有此请求参数,返回null。
注意如果是多选用request.getParametervalues("");得到的是一个string数组
这个时候如果一个都没选,会出空指针一场,所以必须有一个判断。
接下来是我学习编程12个月都没弄明白的转发和重定向,希望这一次弄明白它。
从serlvet来说,如果一个请求需要两个serlvet完成,怎么样从第一个servlet到第二个servlet,有两种方式:请求转发和重定向。
Request有两个部分一个部分是parameter,另一个部分是attribute.
Parameter中式客户端发送的数据,服务器端是不能改的。
Attribute是服务器端servlet可以改动的参数。
请求转发,parameter和attribute都不会消失。
再来说一下web应用程序的流程,服务器会先去web.xml里面找配置信息,匹配某一个servlet-mapping中的url-pattern,然后加载servlet。前期还做了一件事情,把请求参数和其他信息封装为request和response
request.setAttribute(name, o);
第一个放string第二个放object,也就是说什么都可以放的是一个map。
request.getRequestDispatcher(path);
这个用来请求转发,相当于一个中间对象Dispatch转发的意思
rd.forward(request, response);
转发器带着两个对象走去新的servlet
在发送到的servlet中可以用request.getAttribute(name)得到这个值。
终于知道请求转发是什么东西了,request内有两个对象,一个parameter一个attribute。
Parameter是客户端的参数,服务器端一般是不能改的。
而attribute是服务器端可用参数,服务器端可以增删改。
Attribute是一个map,键是String,值是Object。
可以用setAttribute,getAttribute,removeAttribute。
在请求转发中实际是用了一个dispacher来把attribute传给另一个servlet运行,
太好了,知道其实质就好。
哈哈,下面怀着激动的心情学习重定向
response.sendRedirect();
这个不但attribute没有parameter也丢失了。
第二个servlet拿到的是新的request和response。
所以最通俗的请求转发和重定向的区别是
请求转发数据还在,而重定向数据丢失了,而且重定向不需要dispacher的支持。
第二个区别,请求转发地址栏url不变,重定向地址栏改变。
第三个区别,请求转发不需要加webapp名称,重定向要么加,要么去掉前面的“/”,使用相对路径。
第四:请求转发只能在一个应用程序之间转发,而重定向可以定向到不同web应用程序之间,因为他不发数据,比如可以从一个网站重定向到另一个网站,但重定向其实也是可以传递数据的。
直接写到地址栏,创建一个新的reuqest。
第五:请求转发与前面的调用类别相同,而重定向全部变为 get 请求。