首先要知道javaWeb三大组件(Servlet程序 Listener监听器 Filter过滤器 都配置在web.xml文件下)
生命周期:
1先执行Servlet的构造方法
2执行Servlet程序的init初始化方法
以上两个方法是在第一次访问的时候由tomcat服务器来调用的~ 只调用一次
3执行Service方法:接受客户端请求 并且响应数据 每次请求进来的时候处理业务(每次访问都会调用~)
4执行destroy方法:服务器停止的时候调用
获取GET或者POST类型
1service方法中将ServletRequest强转成HttpServletRequest
2调用getMethod方法
实际开发中我们不实现Servlet接口 而是继承HttpServlet抽象类重写doGet doPost并且配置访问地址(可以直接用eclipse直接生成)
Servlet的继承体系:
HttpServlet中的doGet doPost方法认实现是返回状态代码为405的HTTP错误,表示对于指定资源的请求方法不被允许。
所以自己的Servlet程序需要进行重写并且重写时要去掉super.deget()之类的语句;
分隔~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ServletConfig 类: 封装了Servlet程序的配置信息 该对象是从Servlet的init方法中传递进来的~
ServletConfig对象的创造
(1)也可以从doGet doPost方法中getServletConfig获取到 因为父类GenericServlet持有了ServletConfig对象的一个引用~
并且在GenericServlet的init(ServletConfig)方法中初始化 所以在我们的子类的init方法中要调用super.init(ServletConfig);否则父类中的ServletConfig就不能得到初始化
(2)当然我也觉得可以在自己的类中写一个全局变量 直接将init中的ServletConfig赋值过去 但是没必要 也没人这么做
三大作用:
1获取Servlet程序在web.xml中配置的名称 getServletName
2获取在web.xml中配置的初始化参数(即web.xml中servlet init-param里的参数) getInitParameter
3获取ServletContext对象 getServletContext
分隔~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ServletContext对象:是一个接口 getServletcConfig .getServletContext(或者getServletContext)获取
1一个web工程中只要一个该对象的实例 由tomcat服务器创建
2是一个域对象,像map一样存储数据的对象
3操作范围是整个web工程
4在web工程启动的时候创建 在web工程停止的时候销毁~
作用:
1获取web.xml中配置的上下文参数<context-param> getInitParameter
2获取到当前工程的工程名 getContextPath
3获取web工程发布到服务器上之后,文件或目录在服务器磁盘上的绝对路径 getRealPath
/:在web工程中表示到http://ip:port/工程名/ 映射到WebContent目录
4域对象,像map一样存储数据的对象
HttpServletRequest:封装了所有请求过来的数据,由tomcat在每次请求进来时创建,然后传递给doGet或doPost方法使用 ,可以用它获取到所有请求的信息
1getRequestURI() 获取请求的资源路径(哪个工程下的哪个请求路径)
getContextPath() 获取工程路径
2getRequestURL() 获取请求的统一资源定位符(协议+ip+port+请求资源路径)
3getRemoteHost() 获取请求的客户端ip地址
4getHeader() 获取请求头信息
5getParameter() 获取请求参数值
6getParameterValues() 获取请求的多个值(常用于复选框和下拉列表多选)。
7getRequestDispatcher() 获取请求的转发对象。转发请求(转发的请求和原请求共享request对象和response对象)
8getMethod() 获取请求的方式GET 或 POST
-----------------------HttpServletRequest也是域对象~----------------------
9setAttribute(key, value); 设置Request请求范围的属性值。
10getAttribute(key); 获取Request请求范围的属性值。
----------------------------------------------------------------------------------------
11getCookies() 获取Cook对象
12getSession() 获取或创建Session对象
13getScheme() 获取协议
14getServerName() 获取服务器ip
15getServerPort() 获取服务器端口号
请求的转发:request.getRequestDispatcher().forward;
1浏览器地址栏中请求地址没有变化
2是一次请求
3共享request对象
4可以访问WEB-INF下的资源目录~!!!
5只能跳到当前工程下的资源~~
HttpServletResponse类
(1)作用:表示响应 所有返回给客户端的信息 都可以通过该类进行设置
(2)拥有两个输出流:两个流只能使用其中一个 同时使用两个 最后一个就会报错!~
字节流: getOutPutStream ()
字符流: getWriter()
(3)乱码解决问题 请看https://blog.youkuaiyun.com/weixin_40695328/article/details/89448072
请求重定向:
1客户端发送一个请求给服务器
2服务器设置响应状态码为302,设置响应头Location值为新的地址
3客户端收到响应后 发现响应状态吗为302 再次发送请求去访问新的地址
4收到新的地址的响应数据 展示在页面上
方式1:
(1)response.setStatus(302);
(2)response.setHeader("Location","....")
方式2:
response.sendRedirect("...");
请求重定向的特点:
1浏览器地址栏有变化
2是两次请求
3不共享request域对象中的数据
4不可以访问WEB-INF下的资源
5可以访问站内或站外的资源