servlet 重点知识 总结

1、servlet 定义:是java中一个有特殊意义的类,即可以让服务器调用,并处理请求的类!

2、servlet特点:(1)servlet程序必须部署在服务器端才能运行;

  (2)在浏览器直接输入地址(URL)去访问servlet (一般的java类是做不到这一点的)

3、使一个类,能成为一个servlet 类的方式:

(1)实现一个接口:javax.servlet.Servlet

1>service(ServletRequestreq,ServletResponse res); 处理请求的方法

2>destroy()在正常关闭web容器或者自动部署服务器的时候调用

3>getServletConfig()返回一个包含了该Servlet的初始化和启动了的参数的ServletConfig 对象

4>getServletInfo()方法返回这个Servlet对象的信息例如作者,版本和版权

5>init(ServletConfig config)创建完servlet后调用init进行初始化操作

(2)继承一个抽象类:javax.servlet.GenericServlet---继承以后,子类中有两个init方法, init(); 本类特有;  init(..)父接口实现;

(3)继承一个抽象类javax.servlet.http.HttpServlet (常用!)

           1>有两个service方法   : service(ServletRequest...) 父类继承       service(HttpServletRequest...)本类特有

    2>一系列的doXxx方法 : 在本类特有的service方法中 根据请求方式不同调用了不同的doXxx方法

4、 servlet的生命周期

 (1)创建 无参构造器--在服务器启动时创建servlet

默认情况:servlet第一次被访问的时候创建

注:通过设置web.xml提高servl创建的时间,<load-on-startup>1</> (数字越小越先创建): 服务器启动创建servlet

  (2)初始化:创建以后立刻初始化,调用init(ServletConfig config)

  (3)执行: 每次被访问的时候都会调用service(ServletRequest req,ServletResponse res);

  (4)销毁:正常关闭服务器,服务器自动重新部署;

手动重新部署服务器的时候,会调用destroy()进行销毁原有的servlet对象

5. servlet的线程安全问题

(1)问题产生的原因:1>servlet是单例,一个servlet类只有一个对象在项目运行期间

   2>服务器接收到请求后就会建一个线程去处理这个请求,所以就有可能出现这样的情况:一个服务器,多个客户端,即多个线程访问同一个servlet

(2)解决方案:1>加锁synchronized   2>多定义局部变量,即尽量少的定义成员变量   3>实现一些安全性的接口

6、在HttpServlet中,判断是get 请求还是 post请求 的 方法:

get()请求:

a.浏览器中输入地址(URL)然后回车   b.超链接 <a href="param?name=haha&age=20"></a>  //注: ?key1=value&key2=value

c.页面中引入的css样式文件   d.页面中引入的js的文件(javascript)

e.<img src="image/a.jpg" />   f.<img src="register" />

g.form表单中method="get"  h.ajax中可以设置异步提交请求的方式为get

post()请求:

a.form表单中method="post"    b.ajax中可以设置异步提交请求的方式为post

7、 getpost的特点及其区别---- 体现在 所传递的参数上面

get()方式传参的特点(浏览器发送的请求可以大致的分为请求头+请求参数键值对

(1).参数直接放在请求url后面

(2)从浏览器的地址栏里面可以直接看到所传的参数

(3).参数的长度有限制,不能把一个很长的数据通过get方式传参.(与浏览器种类有关)

post()这种方式传参的特点(浏览器发送的请求可以大致的分为请求头+请求体)

(1).参数放在请求的体部而不是url后面.

(2).浏览器的地址栏中看不到所传的参数.

(3).因为参数不用出现在地址栏里面,所有参数长度是没有限制的.

8、对于servlet接收客户端传过来的参数:

(1)接受属性值(键)对应的value,返回值为String类型的字符:String value = request.getParameter("key")

(2)接受属性值(键)对应的多个value,返回值为数组:   String[] like = req.getParameterValues("like");

 9、 中文乱码问题:

同意格式为字符编码格式:utf-8

(1)设置浏览器的编码格式为:utf-8

(2)在tommact服务器中,在conf文件中设置编码格式: 

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>

(3)在web.xml、servlet中,点击 alt+回车 快捷键 :设置编码格式

(4) 在servlet代码中,设置req/resp 的字符编码格式:req.setCharacterEncoding("UTF-8");

指定浏览器传输的数据是用特定编码格式:req.setContentType("text/html;charset=UTF-8");

10、整体流程

(1)浏览器 发送请求(经过哪些地方):浏览器-->tomcat服务器-->web.xml-->.java(servlet程序)--->代码

(2)服务器响应的过程:代码-->.java(servlet程序)-->服务器-->浏览器






  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值