Servlet初体验之-笔记一
来源:互联网 发布:江南大学网络学生登录 编辑:程序博客网 时间:2024/05/29 14:21
1、资源分类
静态资源 ----- HTML ----- 源码不改,每次访问的数据都是一样的动态资源 ----- 由程序(Servlet)生成 -- 每次访问得到的数据可能都不一样
2、使用 Servlet 进行动态资源实现 --- 版本1
A、创建一个类实现 Servlet 接口
B、重写 service 方法
C、配置 Servlet 与 URL 的映射
D、浏览器输入 URL 后,就可以执行 Servlet 的 service 方法了(重点:执行流程 --- 看图解)
3、使用 Servlet 进行动态资源实现 --- 版本2
A、继承 GenericServlet(通用的Servlet)
B、重写 service 方法
C、配置Servlet 与 URL 映射
和版本1比较,进行代码简化了
4、使用 Servlet 进行动态资源实现 --- 版本3 ---- 终极版
A、eclipse 直接创建 Servlet 类 --- 继承 HttpServlet,配置信息自动生成
B、重写的不再是 service 方法,而是更加细化的 doGet 或 doPost 方法
C、怎么执行?
根据URL 找到对象类,反射生成对象,反射调用 (父类)service 方法,根据请求方式
再调用 子类的 doGet 或 doPost
5、请求与响应简单使用
获取浏览器发送来的数据
并且向浏览器法发送响应数据
参数1:request ----- 封装了请求数据
参数2:response ---- 可以用于发送响应数据
A、request 是请求对象
1. request.getParamter("键") ---- 可以根据键获取客户录入的一个值
2. String []aihao=request.getParameterValues("aihao"); 可以根据键获取客户录入的一组值 复选框 比如爱好
3. Map<String, String[]> map = request.getParameterMap(); 获得所有值 封装到map集合中 key:是name值 value:是用户输入的值
4.Enumeration<String> names = request.getParameterNames(); 获得所有name值 返回
while(names.hasMoreElements()){
String nextElement = names.nextElement();
System.out.println(nextElement+"...."+Arrays.toString(request.getParameterValues(nextElement)));
}
hasMoreElements()测试此枚举是否包含更多的元素。
nextElement() 如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
B、response 是响应对象
response.getWriter() --------- 获取一个字符打印流,可以像浏览器响应数据
被屏蔽的实现:
request 和 response 这两个对象 和 Servlet 对象一样是 Tomcat 创建的,
Tomcat 在调用 service 方时,会把这两个对象作为参数传给 service, service方法判断是get 还是post 最终传给
doGet 或 doPost 并调用 doGet 或 doPost
6、servlet 高级 --- 生命周期 一个对象从创建到销毁的过程
何时创建:用户第一次访问创建实例 并调用init()
init ----- 出生时调用的方法 ---- 第一次访问时出生
service -- 每次运行时调用的方法 - 每次访问
destory -- 消亡时调用的方法 ---- 服务器关闭时消亡
注意:
servlet 自始至终只有一个(使用了单例设计模式)
控制Servlet初始化的时机:
A、web.xml中<servlet>标签中使用 <load-on-startup>设置初始化时机
取值:0 以及正整数,服务器加载时就启动
如果是负数或不设置,就是第一次访问时加载
B、 <load-on-startup> 还可以设置启动优先级
数字越小( >= 0 ),优先级越高
7、Servlet 映射的 URL 如何配置?
一般实现完全匹配,URL 和 类名一致
浏览器地址栏中录入的路径完全匹配才能执行servlet -->
<url-pattern>/abc/def/xxx</url-pattern> -->
录入的路径只要目录严格匹配即可,而目录后任意 -->
<url-pattern>/xxx/yyy/*</url-pattern> -->
录入的路径只要后缀名匹配即可,前面任意--> .do .action
<url-pattern>*.xx<url-pattern> -->
路径爱咋咋地 ,都行--> ---- 不建议使用
<url-pattern>/</url-pattern> -->
优先级(越具体优先级越高):
1 > 2 > 3 > 4
3、路径问题
方式1:
表单的 action = "http://loaclhost:8080/项目名/路径" ---- 繁琐
方式2:
表单的 action = "/项目名/路径" ---- 和方式1一样,是对 方式1的简化
方式1 和 方式2 称之为绝对路径
方式3:
表单的 action = "路径" || "../../路径" ---- 相对路径(不建议使用)
文件位置一旦变动,路径名也要进行相应修改,不易于后期维护
相对路径怎么推导
不是根据存储位置推导而是根据地址栏输入的 URL 推导
相对路径推导
action="Login"
http://localhost:8080/day34B/login.htm
http://localhost:8080/day34B/Login
ServletConfig对象 //获取 Servlet 内部的一些信息
getServletName() 获得Servlet名字
getInitParameter("name值") 获得Servlet初始化参数
getInitParameterNames()获得Servlet所有初始化参数名字
Enumeration<String> names = fig.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
System.out.println(name+"..."+fig.getInitParameter(name));
}
编码集概念:
1、作用,让数字与字符(小图片)产生映射关系
2、不同的编码集能映射的字符也不同
3、不同的编码集中相同的字符可以对应的数字也不一样
//怎么获取某个字符在某种编码集对应的数字?
String str = "中";
byte[] b1 = str.getBytes("UTF-8");
byte[] b2 = str.getBytes("GBK");
System.out.println("中在UTF-8中对应的字节:" + Arrays.toString(b1));//[-28, -72, -83]
System.out.println("中在GBK中对应的字节:" + Arrays.toString(b2));//[-42, -48]
//字节也可以转换成字符
byte[] b3 = new byte[]{-28, -72, -83};
String str2 = new String(b3,"UTF-8");
System.out.println("str2 = " + str2);
String str3 = new String(b3,"GBK");
System.out.println("str2 = " + str3);
//什么情况下乱码?
//场景1:编码集不一样时,比如 IO 操作
InputStream in = new FileInputStream("test.txt");
byte[] buffer = new byte[1024];
int length = in.read(buffer);
//System.out.println(Arrays.toString(buffer));
String str4 = new String(buffer,0,length,"UTF-8");
System.out.println("str4 = " + str4);
in.close();
//场景2:编码集不一样,但是没有乱码
//比如 GBK 的eclipse 向 UTF-8 的MySQL插入数据,这是怎么回事?
//MySQL 自己做了特殊处理的?
//中 ---- [-42, -48] ---- Eclipse GBK编码集中
//到了 MySQL
//1、将字节按照GBK转换成字符 new String( [-42, -48],"GBK") ---- 中
//2、将图片按照UTF-8解析成字节 "中".getByte("UTF-8"); ---- [-28, -72, -83]
//3、存储解析后的字节
//总结:IO流操作时,数据传递以字节为标准,MySQL 中以图片为标准
仅供个人笔记使用,若内容有误,请包涵
0 0
- Servlet初体验之-笔记一
- Java Web笔记:Servlet初体验
- RaspberryPi 3B 之初体验笔记(续一)
- servlet之初体验二(Response)
- Hibernate之初体验一
- Servlet体验之旅(一)——Servlet运行原理
- Servlet初体验
- servlet初体验
- jQuery 学习笔记 一 初体验
- jQuery 学习笔记 一 初体验《二》
- jQuery 学习笔记 一 初体验《三》
- ExtJs 学习笔记 一 初体验
- Docker学习笔记(一)Docker初体验
- 小前端的自我学习之旅:Servlet初体验
- Servlet学习之初笔记
- Amazon EC2之初体验(一)
- 数据结构与算法之初体验(一)
- cassandra 学习之旅<一> 初体验
- CSS3 使用 calc() 计算高度 vh px
- 504. Base 7
- 夜深人静, 看看编程人生
- mmap
- 支持向量机SVM通俗理解(python代码实现)
- Servlet初体验之-笔记一
- Mac下SVN服务端和客户端的安装[不定期更新]
- 快速排序(Quicksort)的Javascript实现
- win10 装sql server 2005
- 使用caffe中的imagenet对自己的图片进行分类训练(超级详细版)
- java int转float精度丢失问题
- iOS Injection II 注射器
- Java中对象的引用级别
- Kickstart Round B 2017——Problem B. Center(及一点延伸)