阅读量:0
1、注解方式
@WebServlet("/s1") 使用注解方式就不用xml方式了 Servlet生命周期 时间段 (1)实例化 构造器 第一次请求 (2)初始化 init 构造完毕 (3)接收处理请求 service() 每次 (4)销毁 destroy() 关闭服务 load-on-startup=负数:服务启动时不会自动初始化、正数:初始化顺序 @webSevlet(value="/s1",loadOnStartup=5) 继承HttpServlet后要么重写service()要么重写deGet/doPost
2、注解形式与XML形式
注解形式: @WebServlet( urlpatterns="servlet1" initparms={@webInitParam(name="keya",value="valuea")} ) @WebInitParam(name="keyb",value="valueb") XML形式: <init-param> <param-name>keya</param-name> <param-value>valuea</param-value> </init-param>
3、ServletConfig与ServleContext
ServletConfigt 多例 ServletConfig sc=get.ServletConfig(); String keya=servletConfig.getInitParameter("keya") 获取所有初始参数的名字: Enumration<String> initparameternames=ServletConfig.getInitParaeterName(); hasMoreElements:判断有没有下一个元素 有true 无false nextElement:取出下一个元素 向下移动游标 每一个Servlet都有一个ServletConfig对象 ServleContext 单例 servletContext可以为所有Servlet提供公共参数 <context-param> <param-name>enconding</param-name> <param-value>UTF-8</param-value> </context-param> 获取ServletContext对象 this.servletContext() ServletContext sctext=servletConfig.getServletContext(); ServletContext sctext=req.getServletContext();数据获取同servletConfig一样 ServletContext的API eg: 要求向upload文件夹中写文件 ServletContext servletContext=getServletContext(); String path=ServletContext.getRealPath("upload"); 获取一个指向项目部署位置下的某个文件/目录的磁盘真实路径 FileOutputStream fos=new FileOutputStream(path) 获取项目部署下的上下文路径/访问路径 String contextpath=ServletContext.getContextPath(); 域对象 void setAttribute(String key,Object value); 存储/修改 Object getAttribute(String key); 获取 void removeAttribute(String key); 移除
4、HttpServletRequest
HttpServletRequest 接口 ServletRequest 父接口 行相关:请求方式、uri、协议/版本号 req.getMethod() 请求方式 req.getSheme() 协议 req.getProtocol() 协议+版本号 req.getRequestURL() uri 资源路径 req.getURL() 完整路径 req.getLocalPort() req.getServePort() 客户端发送请求时 req.getRemotePort() 头相关:key:value req.getHeader("key") 获取指定请求头 req.getHeaderNames() 获取所有请求头名字 Enumeration<String> headerNames=req.getHeaderNames(); 获取参数 Enumeration<String> parameterNames=req.get.parameterNames();返回字符串列表 req.getParameter(参数名) 根据参数名单个获取 req.getParameterValues(参数名) 获取单个参数值 req.getParameterMap()=>Map<String,String[]> eg: Set<Map.Entry<string,string[]>> entries=parameterMap.entrySet(); for(Map.entry<string,string[]> entry:entries){ String pname=entry.getkey() String[] value=entry.getvalue() if(value.length>1) system.out.println(Arrays.toString(value)) else system.out.println(Arrays.toString(value[0])) }
5、HttpServletResponse
响应行 协议/版本号 状态码 resp.setStatus(); 响应头 resp.setHeader("key","value") 自定义键值对或修改原来的值 resp.setContentType("text/html")或resp.setHeader("content-Type","text/html") resp.setContentLength(长度)或resp.setHeader("Content-Length",长度) 响应体 PrintWriter wrier=resp.getWriter() 向响应体中输入文本字符输出流 writer.writer(str) String info=" " info.getBytes().length 返回串的字节长度 向响应体中输入二进制的字节输出流 ServletOutputStream outputstream=resp.getOutputStream()
6、请求转发和响应重定向
注意:如果请求转发和重定向都可以,优先选用重定向 请求转发:HttpServletRequest 获得请求转发器:RequestDispatcher rd=req.getRequestDispatcher("转发路径") 转发动作:rd.forward(rep,resp) (1)请求转发时request和response对象会继续传递给下一个资源 (2)请求中的参数可以继续向下传递 (3)请求转发是服务器内部行为 (4)客户端地址栏不变 (5)目标资源可以是动态的可以是静态的 (6)可以通过请求转发方式唯一访问WEB-INF下方资源 (7)目标资源不能是外部资源 响应重定向:HttpServletResponse resp.setStatus(302) 重定向动作:resp.sendRedirect("地址")或resp.setHeader("location","地址") (1)通过HttpServletResponse对象的sendRedirect方法实现 (2)服务端响应状态码为302与新路径,提示客户端找新资源 (3)客户端发送多次请求 (4)重定向可以是Servlet动态或html静态资源 (5)重定向不可以给到WEB-INF下受保护的资源 (6)可以重定向到项目以外的外部资源 (7)地址栏改变
7、获取请求体中非键值对的数据
BufferReader read=req.getReader() 字符流 JSON ServletInputStream sis=req.getInputStream() 字节流 二进制文件