学习笔记 —— servlet
servletjava编写的,服务器端执行,用来扩展服务器功能,是一个web组件1. 编写extends HttpServlet重写doGet、doPost方法(HttpServletRequest,HttpServletResponse)2. 执行servletxml文件配置注解
servlet
java编写的,服务器端执行,用来扩展服务器功能,是一个web组件
凡是实现了Servlet接口的都是servlet类
1. 编写
- extends HttpServlet
- 重写doGet、doPost方法(HttpServletRequest,HttpServletResponse)
2. 执行servlet
定义servlet的映射名
2.1 web.xml文件配置
< servlet >
< servlet-name >< /servlet-name >
< servlet-class >< /servlet-class >
< /servlet>
< servlet-mapping >
< servlet-name >< /servlet-name >
< url-pattern >< /url-pattern >
< /servlet-mapping >
2.2 注解
@WebServlet("/hello");
3. HttpServlet继承关系
- Servlet接口:
- 定义了servlet规范,只要实现此接口,实现类都是servlet类
- 定义了servlet的生命周期方法
- GenericServlet类:
- 是Servlet的实现类,实现了servlet接口中的大部分方法,只有service方法没实现。
- 是Servlet的实现类,实现了servlet接口中的大部分方法,只有service方法没实现。
- HttpServlet类:
- 针对http协议定义了特定的处理方法,根据客户端的请求调用不同的处理方法。
- 针对http协议定义了特定的处理方法,根据客户端的请求调用不同的处理方法。
4. HttpServletRequset接口
继承 ServletRequest 接口
常用方法
- 请求行
request.getMethod();
request.getProtocol();
request.getRequestURI();//应用名称+请求资源名称
request.getRequestURL(); - 请求头
Enumeration headernames = request.getHeaderNames();
while(headernames.hasMoreElements()) {
String name = headernames.nextElement();
System.out.println(name+":"+request.getHeader(name));
} - 请求表单信息
request.getParameter(“name”);
request.getParameterValues(“checkbox”);
request.getQueryString();
- 设置属性:setAttribute(String,Object);
- 获取属性值:getAttribute(String);
- 删除属性值:removeAttribute(String);
5. HttpServletResponse接口
父接口:ServletResponse
- 响应页面:sendRedirect();
- 响应页面信息:getWriter();
- 回送一个json字符串
response.getWriter().append("Served at: ")
.append(request.getContextPath());
- 回送一个json字符串
- 设置响应文档类型:setContentType(“text/html;charset=UTF-8”);
- 状态码:
- 200:ok
- 400 – 499:页面错误
- 404:页面未找到
- 405:处理方法和提交方法不一致(doGet、doPost)
- 500 – 599:服务器内部错误
6. 乱码
-
Tomcat7.0版本:中文乱码问题
str = request.getParameter(“name”);
new String(str.getBytes(“IOS-8858-1”),“UTF-8”) -
post请求:中文乱码问题
request.setCharacterEncoding(“UTF-8”);
7. 请求转发和重定向的区别
- 请求转发
- 请求重定向
请求转发 | 请求重定向 |
---|---|
属于服务器端的行为 | 属于客户端行为 |
url中地址不变 | url中地址发生变化 |
可以使用request对象传递数据 | 不能使用request传递数据,要重新发送请求 |
只能在当前应用中(当前工程中) | 可以在不同应用中重定向页面 |
8. servlet生命周期
由服务器管理servlet的生命周期
当客户端第一次向服务器发送请求时,由服务器创建对象
- 第一阶段:调用init方法(创建完对象之后只调用一次)
规定init方法不执行完毕,其他方法不能执行 - 第二阶段:由service方法处理请求
service方法中使用判断语句,根据发送请求的方式调用doGet或doPost方法 - 第三阶段:由destroy方法销毁servlet对象
只有在服务器上stop才会执行destroy方法。
loadOnStartup方法:
加载web应用时,就会创建对象。
loadOnStartup>=0 值越小,越先被创建对象。
9. ServletConfig对象的初始化参数
属于特定的servlet
封装当前的Servlet的初始化参数
- 第一种方式: web.xml配置文件
- 第二种方式:注解
- getServletConfig():ServletConfig
- getInitParameter(“fileName”)
10. ServletContext对象和初始化参数
- ServletContext对象表示web应用对象,有且只有一个。
- 生命周期:web应用发布到服务器上,由服务器创建该对象;当服务器关闭或web应用从服务器上移除,对象销毁。(和web应用的生命周期相同)
- 配置web应用的初始化参数,在整个web应用的web组件都可以访问。
10.1 配置初始化参数:web.xml中
获取对象:
getServletContext()
getInitParameter()
jsp中:application是内置对象,可直接使用。
10.2 在web组件中传递数据
- setAttribute();
- getAttribute();
- removeAttribute();
request 和 ServletContext传递数据方式比较:
- request的生命周期短,节省内存。
- ServletContext适合计数,用键值对来存数据。
11. servlet的工作模式
servlet是单例,多线程的工作模式。
- 线程安全的变量
定义在doGet、doPost中的变量 - 线程不安全的变量
多个线程共用的变量。
12. 一个servlet处理多个请求
- user.jsp
- UserServlet.java
更多推荐
所有评论(0)