11servlet接口
11.servlet接口-2018/07/23
- 1.servlet
- 是一个接口,需要导包javax.servlet.Servlet;
- 第一种编写一个servlet程序的方法
- 写一个Java类,实现servlet接口
- 修改web.html文件,给servlet提供一个可访问的url地址(创建servlet实例,提供一个可访问的URL地址)
- 部署应用到Tomcat服务器
- 测试:http://localhost:8080/day11/demo1
- 2.生命周期
- servlet第一次访问时调用实例化和初始化方法,service方法每次方法都被调用
- 如何让servlet在服务器启动时就创建
- 添加<load-on-startup>2</load-on-startup>
- 3.servlet的三种创建方式
- 上边那种
- extends GenericServlet
- extends HttpServlet(开发常用)
- 不能重写父类的service方法
- 4.映射细节
- .do 以.字符串的请求都可以访问
- /*任意字符串都可以访问
- /action/* 以action开头的请求都可以访问
- /(斜杆)优先于.(后缀名)
- 5.ServletConfig的使用
- 作用:
- 可以获取servlet配置信息
- 可以获得ServletContext对象
- 方式:
- 用init方法把服务器创建的对象进行操作 ...init{this.config = config;} ...config.getInitParameter("encoding")根据配置文件中的名,得到值
- 通过继承父类的方法得到ServeltConfig对象 ...this.getServletConfig().getInitParameter("encoding")
- 通过继承父类方法 ...this.getInintParameter("encoding")
- 作用:
- 6.ServletContext: 代表的是整个应用
- 一个应用只有一个ServletContext对象
- 作用:
- 域对象:在一定范围内(当前应用),使多个Servlet共享数据。
- 常用方法: void setAttribute(String name,object value);//向ServletContext对象的map中添加数据 Object getAttribute(String name);//从ServletContext对象的map中取数据 void removeAttribute(String name);//根据name去移除数据
- 获取全局配置信息:修改web.xml文件:
- 获取资源路径:可以得到任何路径的任何资源 String path = this.getServletContext().getRealPath("/WEB-INF/a.properties"); Properties pro = new Properties(); pro.load(new FileInputStream(path)); System.out.println(pro.getProperty("key"));
- 实现请求转发 ServletContext application = this.getServletContext(); application.getRequestDispatcher("/servlet/demo6").forward(req, resp);
- 域对象:在一定范围内(当前应用),使多个Servlet共享数据。
- 7.与Servlet相关的对象
- Servlet 接口javax.servlet.Servlet
- GenericServlet 抽象类javax.servlet.GenericServlet
- HttpServlet 抽象类javax.servlet.HttpServlet
- ServletConfig 接口 javax.servlet.ServletConfig
- ServletContext 接口 javax.servlet.ServletContext
- ServletRequest 接口 javax.servlet.ServletRequest
- ServletResponse 接口 javax.servlet.ServletResponse
- HttpServletRequest 接口 javax.servlet.http.HttpServletRequest
- HttpServletResponse 接口 javax.servlet.http.ServletResponse
- 8.HttpServletResponse
- 1.响应行
- setStatus(int sc) 设置响应状态码
- 2.响应头
- sendRedirect(String location) 请求重定向
- setHeader(String name, String value) 设置响应头信息 //告诉客户端用什么编码 response.setHeader("content-type", "text/html;charset=UTF-8");
- 3.响应正文(主体)
- getWrite(); 字符输出流,得到ServletOuputStream对象
- getOutputStream(); 字节输出流,得到PrintWriter对象,与上一个方法不能同时使用
- setCharacterEncoding(String charset) 告知服务器使用什么编码
- setContentType(String type) response.setContentType("text/html; charset=UTF-8");
- 1.响应行
- 9.文件下载
- URLEncoder.encode(filename,"UTF-8");将不安全的文件名改为UTF-8格式
- 10.缓存问题
- 告诉客户端不使用缓存 response.setHeader("pargma","no-cache"); response.setHeader("cache-control","no-cache"); response.setIntHeader("expires",0);
- 11.刷新
- 注册成功后跳转 response. getWriter().write("注册成功!3秒后跳转页面..."); response. setHeader("refresh","3;url=要跳转页面的路径");
- 12.HttpServletRequest
- 请求行 Get http://localhost:8080/day09/servlet/req1?username=zs http/1.1 getMethod(); 获得请求方式 getRequestURL();返回客户端发出请求时的完整URL。问号前的 getRequestURI(); 返回请求行中的资源名部分。/day09/servlet/req1 getContextPath();(重要)当前应用的虚拟目录(名称) /day09 getQueryString() ; 返回请求行中的参数部分。问号后的东西
- 请求消息头 String getHeader(String name) 根据头名称得到头信息值 Enumeration getHeaderNames() 得到所有头信息name Enumeration getHeaders(String name) 根据头名称得到相同名称头信息值
- 请求正文(重要)
- 与获取表单数据相关的方法 input type="text" name="username" /> getParameter(name) 根据表单中name属性的名,获取value属性的值方法 getParameterValues(String name)专业为复选框取取提供的方法 getParameterNames() 得到表单提交的所有name的方法 getParameterMap 到表单提交的所有值的方法 //做框架用,非常实用 getInputStream 以字节流的方式得到所有表单数据
- 与操作非表单数据相关的方法(request也是一个域对象) void setAttribute(String name, Object value); Object getAttribute(String name); Void removeAttribute(String name);
- 与请求转发相关的方法
- 转发request由服务器执行,客户端只发送一次请求,地址栏不变,转发能传递数据
- 重定向由客户端执行,客户端发送两次请求,地址栏发生变化,不能传递数据,可以跳转到其他应用 //得到请求转发或请求包含的协助对象 RequestDispatcher getRequestDispatcher(String path) forward(ServletRequest request, ServletResponse response) //转发的方法 include(ServletRequest request, ServletResponse response) //请求包含
- 与请求编码相关的方法: //解决post方式编码 request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式 //解决get方式编码 String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
11servlet接口的更多相关文章
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- 12306官方火车票Api接口
2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- java基础_集合List与Set接口
List接口继承了Collection的方法 当然也有自己特有的方法向指定位置添加元素 add(索引,添加的元素); 移除指定索引的元素 remove(索引) 修改指定索引的元素 set ...
- 【WCF】自定义错误处理(IErrorHandler接口的用法)
当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...
- PHP以接口方式实现多重继承(完全模拟)--学习笔记
1.UML类图: 2.PHP代码: <?php /** * Created by PhpStorm. * User: andy * Date: 16-11-23 * Time: 下午7:57 ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
随机推荐
- YTU 2690: 用双重循环实现小九九
2690: 用双重循环实现小九九 时间限制: 1 Sec 内存限制: 128 MB 提交: 848 解决: 573 题目描述 小九九是我们小时候常背的的乘法算术法则,现在用双重循环来实现小九九 1 ...
- Ado.net设计模式
连接类 连接类有固定的使用模式,这是常用的乐观模式: using (var conn = new SqlConnection(connstr)) { conn.Open(); //执行各种数据库操作 ...
- python cmd 启动python项目报错:no module named “xxx”
场景:使用pycharm编辑器启动pyhon项目时可以启动,但使用cmd启动时,会报:no module named “xxx”的错误,此时,有两种情况: 1.no module named “xxx ...
- IOS各种调试
IOS各种调试技巧豪华套餐 目录 前言逼优鸡知己知彼 百战不殆抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints)打印 ...
- MySQL索引学习记录
参考资料: http://blog.csdn.net/v_july_v/article/details/6530142http://blog.codinglabs.org/articles/theor ...
- 清北考前刷题day6早安
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #d ...
- [App Store Connect帮助]五、管理构建版本(3)在您提交以供审核前选择构建版本
在提交 App 至“App 审核”前,请(从您为该版本上传的所有构建版本中)选择您想要提交的版本.一个 App Store 版本仅可关联一个构建版本.但是,在提交该版本至“App 审核”之前,您可以任 ...
- [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(6)设置 App 预览海报帧
App 预览海报帧仅在 App 状态为可编辑时,才能被编辑. 必要职能:“帐户持有人”职能.“管理”职能.“App 管理”职能或“营销”职能.请参见职能权限. 在首页上,点按“我的 App”,选择您的 ...
- Android 性能优化(1)性能工具之「 lint 」 :Improving Your Code with lint:优化代码
Improving Your Code with lint 1.See Also lint (reference) Using Android Annotations In addition to t ...
- 设计模式("大话设计模式"读书笔记 C#实现)
前言:毫无疑问 ,学习一些设计模式,对我们的编程水平的提高帮助很大.写这个博客的时候自己刚开始学习设计模式,难免有错,欢迎评论指正. 我学设计模式的第一本书是“大话设计模式”. 1.为什么要学设计模式 ...