Servlet
- Java 编写的服务器端程序。
- 是sun公司推出的用于在服务器端处理HTTP协议的组件
- 动态生成页面
Servelt的特点
- 是服务端的组件
- 可以动态拼资源(HTML/img等)
- 满足SUN的规范
术语:处理HTTP协议
1)静态网页
- 无论谁看,其内容都一样
- 百度百科之类
- 服务器直接存HTML,直接返回HTML
2)动态网页
- 不同人看有不同结果
- 淘宝,微博等
- 服务器保存一个组件,动态给每一个用户拼接网页
- 在Java中这个语言就是Servel
组件:满足规范的对象
Servlet开发步骤
1.创建Web项目
- 必须具备标准的WEB目录
- /webapp/WEB-INF/web.xml
2.导入jar包
1)使用maven
- 使用maven搜索javaee
2)使用tomcat自带的包
- 选择项目,右键点击,选择properties
- 弹出框里左侧选择,Targeted Runtimes
- 再右侧选择Apache Tomcat
- Apply
3.开发Servlet
1)编写Servlet
- 创建一个package
- 创建一个类,名为XxxServlet
- 继承HttpServlet,从而间接的实现了Servlet
- 重写父类的service()
2)配置Servlet
- 先声明类,并给他取别名
- 再通过别名引用此类,给他取一个访问路径
4.部署(拷贝)
- 在Servlet视图下,选择tomcat
- 右键点击Add and Remove
- 将项目添加到右侧
- 启动tomcat
5.访问
- http://ip:port/项目名/访问路径
- http://local:8080/Servlet_1/ts
- 404 地址有误
- 500 类名有误 代码有误
- 405 方法声明有误
请求方式
什么是请求方式
- 就是浏览器向服务器发送数据的方式
- 需要掌握:GET/POST
GET
- 采用请求路径传参
- 参数在传递过程中可见,导致隐私性差
- 路径可容纳数据有限,只能传少量数据
所有的请求默认都是GET
POST
- 采用实体内容传参
- 参数在传递过程中不可见,隐私性好
- 实体内容专门用来传输数据,大小没有限制
在form上加"method = post"
如何配置Servlet访问路径
- 1)精确匹配
- 例如:/abc
- 只有/abc才能访问他
- 此Servlet只能处理这一个请求
适合规模较小的项目
- 2)通配符
- 举例:/*
- 所有路径都能访问此Servlet
适合一个项目只写一个Servlet
- 3)后缀
- 举例:*.hi
- 所有以hi为后缀的请求都可以访问此Servlet
- 此Servlet能处理多个请求
适合一个项目写少量几个Servlet
转换接收乱码问题
1.get/post
- 将乱码后的字符串按照ISO-8859-1还原为byte
- 再将byte按照UTF-8编码为字符串
- 优点:万能 缺点:麻烦
2.get
- 修改tomcat配置文件
- 在server.xml第65行,加URIEncoding = “utf-8”
- 优点:简单 缺点:只对get有效
3.post
- 在接收参数之前,加req.setCharacterEncoding(“utf-8”);
- 声明实体内容编码为utf-8
- 优点:简单 缺点:只对post有效
发送乱码解决
- res.setCharacterEncoding(“utf-8”);/res.setContentType(“text/html;charset=utf-8”);
Servlet的声明周期
- 1.启动tomcat ,new 实例化servlet
- 2.初始化Servlet
- 3.调用时使用它
- 4.shotdowm调用destory()关闭他
- 默认首次访问Servlet时,tomcat会实例化他
- 可以改为启动tomcat时就实例化他
- 第1,2,4步只执行一次,所以某个Servlet是单例
- 第三步可以执行多次,每次请求调用
- 当需求规定在什么时候做什么处理时,开发者好知道在什么地方写代码
ServletConfig和ServletContext
1.他们的作用
- 可以使用web.xml做配置文件,预置参数,使用config和context来读取
2.他们的区别
1)Context
- 和Servlet是一对多的关系,Tomcat在启动时就创建唯一一个Context,所有Servlet都可以共享这个对象中的数据,如果想给多个Servlet预置数据,使用Context
2)Config
- 和Servlet是一对一关系,Tomcat在初始化每个Servlet之前会给他创建一个Config
- 如果想某个Servlet预置数据,使用config
3.它们的用法
1)config
- 假设要开发一个网页游戏,用户超出最大在线人数时要排队,登录时判断是否已经达到最大人数
- 登录:LoginServlet
- 最大人数:MaxOnline,可以配置
- 该参数值只给LoginServlet自己用,用Config读即可
2)context
- 软件内有很多查询功能,都带有分页,每页显示的行数size是常量,而且可配置,该数据在多个查询数据之间公用,使用context读取
Context的特殊用法
- 前提:之前使用config和context读取的是常量
- 而context还有能力读取变量
- 用该对象读写的变量是可以被所有Servlet对象公用的
- setAttribute()/getAttribute()
总结config和context
- 当需要给Servlet预置参数时使用这样的对象
- 若参数只给一个Servlet使用,用config
- 若参数给多个Servlet使用,用Context