JAVAWEB系列 1-3

tomcat
XML
servlet
Httpservlet
cookie
Session


Httpservlet

HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
涉及到的响应流程:
    1.Web客户向Servlet容器发出Http请求
    2.Servlet容器解析Web客户的Http请求
    3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
    4.Servlet容器创建一个HttpResponse对象
    5.Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse   对象作为service方法的参数传给HttpServlet对象
    6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
    7.HttpServlet调用HttpResponse的有关方法,生成响应数据
    8.Servlet容器把HttpServlet的响应结果传给Web客户
    其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。

ServletContext

servlet上下文,为每一个工程创建的对象,全局唯一
作用:
    解决了不同用户的数据共享问题
    获取全局的配置参数
    获取web工程中的资源读取工程资源(classloader)
生命周期:
    创建:服务器启动的时候,会为托管的每一个web应用程序,创建一个ServletContext对象
    销毁:从服务器移除托管,或者是关闭服务器。

HttpservletRequests

用来封装http请求信息、获取请求行、请求头和正文
获取请求头:getHeader(String name) 
获取提交的数据:*实战篇
    getContextPath() 获得String类型的 web应用的名称(项目名)
    getQueryString() 获得 get提交url 地址后的参数字符串;
    getRequestURI() 获取URI地址String类型
    getRequestURL() 获取URL地址StringBuffer类型
    request.getRemoteAddr() 获得访问的客户端IP地址
referer 头的作用:获取该访问的来源,做防盗链

解决乱码问题:

解决post提交方式的乱码:
    request.setCharacterEncoding("UTF-8");
    request.getParameter("username");    
解决get提交的方式的乱码:
    parameter = new String(requests.parameter.getbytes("iso8859-1"),"utf-8");

HttpservletResponse

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法

Response的基本使用

中文乱码问题:
    字节流出现问题的原因:Tomcat的编码格式为ISO-8859-1,不支持中文服务器端和客户端两端的编码格式不一样
    字符流出现乱码的原因:服务器端的输出默认是ISO-8859-1,如果不设置,那么浏览器会出现乱码

解决字符流:
    HttpServletResponse.setCharacterEncoding("UTF-8");设置将字符以"UTF-8"编码输出到客户端浏览器,然后再使用
HttpServletResponse.getWriter();获取PrintWriter输出流,这两个步骤不能颠倒.
解决字节流:
    response.setHeader("content-type", "text/html;charset=UTF-8") 

请求转发和重定向

作用:在java后台servlet中,实现由一个servlet跳转到另一个servlet/jsp要使用的技术。

请求转发和重定向的使用:

请求转发:req.getRequestDispatcher(servlet、jsp的请求路径).forward(req,resp);
URL重定向:resp.sendRedirect("/day47/views/student.jsp");

请求转发和重定向的区别

a.请求转发是一次请求,重定向是两次请求 (通过地址栏可以查看)
b.请求转发地址栏不会发生改变, 重定向地址栏会发生改变
c.请求转发可以共享请求参数 ,重定向之后,就获取不了共享参数了
d.请求转发不能跨域(不能访问其他服务器链),重定向可以
e.请求转发能转到WEB-INF目录下的文件而重定向不能 
(注:WEB-INF目录:不能被外部通过地址直接访问)