servlet复习总结

Servlet 复习

一、request和response

1-1 request对象学习:

  • 作用:request对象中封存了当前请求的所有请求信息

  • 使用:
    获取请求头数据
    req.getMethod();//获取请求方式
    req.getRequestURL();//获取请求URL信息
    req.getRequestURI();//获取请求URI信息
    req.getScheme();//获取协议
    获取请求行数据
    req.getHeader(“键名”);//返回指定的请求头信息
    req.getHeaderNames();//返回请求头的键名的枚举集合
    获取用户数据
    req.getParameter(“键名”);//返回指定的用户数据
    req.getParameterValues(“键名”);//返回同键不同值的请求数据(多选),返回的数组。
    req.getParameterNames()//返回所有用户请求数据的枚举集合
    注意:
    如果要获取的请求数据不存在,不会报错,返回null。

  • 注意:
    request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。

1-2 Respone对象学习:

  • 作用:
    用来响应数据到浏览器的一个对象
  • 使用:
    设置响应头
    setHeader(String name,String value);//在响应头中添加响应信息,但是同键会覆盖
    addHeader(String name,String value);//在响应头中添加响应信息,但是不会覆盖。
    设置响应状态
    sendError(int num,String msg);//自定义响应状态码。
    设置响应实体
    resp.getWrite().write(String str);//响应具体的数据给浏览器
    设置响应编码格式:
    resp.setContentType(“text/html;charset=utf-8”);
  • 总结:
    service请求处理代码流程:
    设置响应编码格式
    获取请求数据
    处理请求数据
    数据库操作(MVC思想)
    响应处理结果

1-3 Service方法和doGet方法和doPost方法的区别

  • Service方法:
    可以处理get/post方式的请求,如果servlet中有Service方法,会优先调用service方法对请求进行处理。
  • doGet方法:
    处理get方式的请求
  • doPost方法:
    处理post方式的请求
  • 注意:
    如果在覆写的service方法中调用了父类的service方法(super.service(arg0, arg1)),
    则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。所以,一般情况下
    我们是不在覆写的service中调用父类的service方法的,避免出现405错误。

1-4 Servlet的生命周期:

1、从第一次调用到服务器关闭。
2、如果Servlet在web.xml中配置了load-on-startup,生命周期为从服务器启动到服务器关闭
注意:
init方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
destory方法是在servlet被销毁时执行,也就服务器关闭时。

1-5 Servlet的常见错误:

  • 404错误:资源未找到
    原因一:在请求地址中的servlet的别名书写错误。
    原因二:虚拟项目名称拼写错误
  • 500错误:内部服务器错误
    错误一:
    java.lang.ClassNotFoundException: com.bjsxt.servlet.ServletMothod
    解决:
    在web.xml中校验servlet类的全限定路径是否拼写错误。
    错误二:
    因为service方法体的代码执行错误导致
    解决:
    根据错误提示对service方法体中的代码进行错误更改。
  • 405错误:请求方式不支持
    原因:
    请求方式和servlet中的方法不匹配所造成的。
    解决:
    尽量使用service方法进行请求处理,并且不要再service方法中调用父类的service。

二、session

  • 问题:
    一个用户的不同请求处理的数据共享怎么办?
  • 解决:
    使用session技术
  • 原理:
    用户第一次访问服务器,服务器会创建一个session对象给此用户,并将
    该session对象的JSESSIONID使用Cookie技术存储到浏览器中,保证
    用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到
    共享的数据。
  • 特点:
    存储在服务器端
    服务器进行创建
    依赖Cookie技术
    一次会话
    默认存储时间是30分钟
  • 作用:
    解决了一个用户不同请求处理的数据共享问题
    使用:
    创建session对象/获取session对象
    HttpSession hs=req.getSession();
    如果请求中拥有session的标识符也就是JSESSIONID,则返回其对应的session队形
    如果请求中没有session的标识符也就是JSESSIONID,则创建新的session对象,并将其JSESSIONID作为从cookie数据存储到浏览器内存中
    如果session对象是失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
    设置session存储时间
    hs.setMaxInactiveInterval(int seconds);
    注意:
    在指定的时间内session对象没有被使用则销毁,如果使用了则重新计时。
    设置session强制失效
    hs.invalidate();
    存储和获取数据
    存储:hs.setAttribute(String name,Object value);
    获取:hs.getAttribute(String name) 返回的数据类型为Object
    注意:
    存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。
    使用时机:
    一般用户在登陆web项目时会将用户的个人信息存储到Sesion中,供该用户的其他请求使用。
  • 总结:
    session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下。
    用户的任意请求在处理时都能获取到同一个session对象。
    作用域:
    一次会话
    在JSESSIONID和SESSION对象不失效的情况下为整个项目内。
    session失效处理:
    将用户请求中的JSESSIONID和后台获取到的SESSION对象的JSESSIONID进行比对,如果一致
    则session没有失效,如果不一致则证明session失效了。重定向到登录页面,让用户重新登录。
  • 注意:
    JSESSIONID存储在了Cookie的临时存储空间中,浏览器关闭即失效。

三、 ServletContext对象学习:

  • 问题:
    不同的用户使用相同的数据

  • 解决:
    ServletContext对象

  • 特点:
    服务器创建
    用户共享

  • 作用域:
    整个项目内

  • 生命周期:
    服务器启动到服务器关闭

  • 使用:
     	获取ServletContext对象
     			//第一种方式:
     				ServletContext sc=this.getServletContext();
     			//第二种方式:
     				ServletContext sc2=this.getServletConfig().getServletContext();
     			//第三种方式:
     				ServletContext sc3=req.getSession().getServletContext();
     	使用ServletContext对象完成数据共享
     			//数据存储
     				sc.setAttribute(String name, Object value);
     			//数据获取
     				sc.getAttribute("str") 返回的是Object类型
     			注意:
     				不同的用户可以给ServletContext对象进行数据的存取。
     				获取的数据不存在返回null。
     	获取项目中web.xml文件中的全局配置数据
     			sc.getInitParameter(String name); 根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
     											  如果数据不存在返回null。
     			sc.getInitParameterNames();返回键名的枚举
     		配置方式:注意 一组<context-param>标签只能存储一组键值对数据,多组可以声明多个  <context-param>进行存储。
     			  <context-param>
     				  	<param-name>name</param-name>
     				  	<param-value>zhangsan</param-value>
     			  </context-param>
    

    作用:将静态数据和代码进行解耦。
    获取项目webroot下的资源的绝对路径。
    String path=sc.getRealPath(String path);
    获取的路径为项目根目录,path参数为项目根目录中的路径
    获取webroot下的资源的流对象
    InputStream is = sc.getResourceAsStream(String path);
    注意:
    此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
    path参数为项目根目录中的路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值