如何看待和学习基础servlet???

    Servlet是sun公司提供的一门用于开发动态web资源的技术。
使用servlet接口,可以开发一个动态web应用,需要2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。

按照一种约定俗成的习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。
Servlet接口实现类:SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。


开发一个servlet:

新建一个web project工程
工程中开发Servlet类   
在web.xml中配置servlet类
部署项目到tomcat
启动tomcat
访问servlet


servlet的XML配置及走向:
如图(1)



servlet生命周期:

Servlet生命周期分为三个阶段:

1,初始化阶段:调用init()方法

2,响应客户请求阶段:调用service()方法

3,终止阶段:调用destroy()方法

如图(2)




servlet的加载:

默认Servlet类在启动项目时不加载,首次访问时才加载
在servlet中配置<load-on-startup>1</load-on-startup>后,该servlet就会在启动项目时,加载servlet(实例化并调用其init()方法)

1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
3)当值小于0或者没有指定时,则表示容器在该servlet被访问时才会去加载。
4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
5)当值相同时,容器就会自己选择顺序来加载。


HttpServletResponse:

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。  
设置响应类型 response.setContentType("text/html;charset=utf-8");
负责向客户端(浏览器)发送数据的相关方法


HttpServletRequest:

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

乱码问题:


post请求处理乱码:

设置请求编码request.setCharacterEncoding("UTF-8");
    要求请求方式是post      请求方式为get 上面设置编码不行
    form表单提交,都要设置为method=”post”

get请求处理乱码:
    String name = request.getParameter("name");
    name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

获取请求参数String name = request.getParameter("name");
注意:
如果参数“name” 前台发请求有参数,没有赋值, 得到的是””
如果参数“nama”前台发请求没有参数,得到是null


当一个参数名,多个值
String[] aihao = request.getParameterValues("aihao");
    
    
请求转发和重定向:

请求转发:指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

通过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward(request,response)方法可以实现请求转发。

请求重定向:指一个web资源收到客户端请求后,通知浏览器重新请求另一个web资源。
response.sendRedirect(String path)方法实现重定向


请求重定向和请求转发的区别:

一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发/307。
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为请求重定向/302。

区别:
请求转发路径不会变为转发之后的     重定向会变为最后定向的路径
请求转发可以携带转发之前request保存的数据,重定向会丢失
请求转发只能在本应用内路径之间跳转    重定向可以跨域


ServletContext:

WEB容器在启动时,它会为WEB应用程序创建一个对应的ServletContext对象,它代表当前web应用。ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext()方法获得ServletContext对象。


Cookie:

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。
request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。


cookie中存取中文:

要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如:

    Cookie cookie = new Cookie("userName", URLEncoder.encode("优众", "UTF-8"));
     response.addCookie(cookie);

在获取cookie中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc)进行解码,例如:

    URLDecoder.decode(cookies[i].getValue(), "UTF-8")



Cookie注意细节:

一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。


Session:

Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。

session实现原理
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。




为最美的你加油
然后向世界证明
天使是存在的
Who --> U

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值