HTTP
请求行
(1)请求方式
(2)资源路径
(3)HTTP版本
GET /index.html HTTP/1.1
响应状态行
(1)HTTP版本
(2)一个表示成功或错误的整数代码
由三位数字组成,表示请求是否被理解或被满足,响应状态码的第一个数字定义了响应的类别
(3)对状态码进行描述的文字信息
HTTP/1.1 200 OK
响应消息头
Servlet
Servlet是运行在Web服务器端的<u>java应用程序</u>,Servlet对象主要封装了<u>对HTTP请求的处理</u>,并且它的运行需要Servlet容器的支持
Servlet由<u>Servlet容器</u>提供,Servlet容器是指提供了Servlet功能的服务器,Servlet容器将Servlet动态地加载到服务器上。与HTTP协议相关的Servlet使用<u>HTTP请求</u>和<u>HTTP响应与客户端进行交互</u>。因此Servlet容器支持所有HTTP协议的请求和响应。
Servlet接口
Servlet就是一种实现了Servlet接口的类,由Web容器负责创建并调用,用于接收和响应用户的请求
init(), service(),destroy()这三个方法可以表现Servlet的生命周期,他们会在某个特定的时刻被调用,Servlet容器指的是Web服务器
Servlet接口两个默认的实现类
GenericServlet
抽象类,提供了部分实现,并没有实现HTTP请求处理
HttpServlet
HttpServlet是GenericServlet的子类,继承了所有方法,并且为HTT P请求中的POST,GET等类型提供了具体的操作方法。
Servlet开发
Servlet的配置
(1)通过Web应用的配置文件web.xml来完成配置和使用
//xml配置文件中
<servlet>
<servlet-name>ServletDemo2</servlet-name>
<servlet-class>com.it.servlet.ServletDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo2</servlet-name>
<url-pattern>/servletDemo2</url-pattern>
</servlet-mapping>
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("aaaaaaaaaaaa");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
(2)@WebServlet注解
生命周期
(1)初始化阶段
当客户端向Servlet容器发出HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象,有就直接使用,没有就创建Servlet实例对象,调用init()方法完成Servlet的初始化,在Servlet生命周期中,init()方法只被调用一次。
(2)运行阶段
(3)销毁阶段
ServletConfig接口
ServletContext接口
获取Web应用程序的初始化参数
当Servlet容器启动时,会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用,ServletContext对象不仅封装了当前Web应用的所有信息,而且实现了多个Servlet之间的数据共享
<context-param>
<param-name>companyName</param-name>
<param-value>itcast</param-value>
</context-param>
<context-param>
<param-name>city</param-name>
<param-value>beijing</param-value>
</context-param>
<context-param>
<param-name>course</param-name>
<param-value>java</param-value>
</context-param>
//获取servletContext对象
ServletContext servletContext = this.getServletContext();
String companyName = servletContext.getInitParameter("companyName");
String city = servletContext.getInitParameter("city");
resp.getWriter().write(companyName + " " + city);
ServletContext servletContext = this.getServletContext();
Enumeration<String> names = servletContext.getInitParameterNames();
while (names.hasMoreElements()){
String name = names.nextElement();
String value = servletContext.getInitParameter(name);
resp.getWriter().write(value);
}
实现多个Servlet对象共享数据
读取Web应用下的资源文件
1.getResourceAsStream()
//获取servletContext对象
ServletContext servletContext = this.getServletContext();
InputStream is = servletContext.getResourceAsStream("/WEB-INF/itcast.properties");
Properties pro = new Properties();
pro.load(is);
String company = pro.getProperty("Company");
String address = pro.getProperty("Address");
resp.getWriter().write(company + " " + address);
2.getRealPath()
//获取servletContext对象
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("/WEB-INF/itcast.properties");
FileInputStream is = new FileInputStream(realPath);
Properties pro = new Properties();
pro.load(is);
String company = pro.getProperty("Company");
String address = pro.getProperty("Address");
resp.getWriter().write(company + " " + address);
三个发送状态码的方法
发送响应消息体相关的方法
1.getOutputStream()
ServletOutputStream os = resp.getOutputStream();
String str = "hello";
os.write(str.getBytes());
os.print(str);
2.getWriter()
PrintWriter writer = resp.getWriter();
writer.write("hello");
请求重定向
重定向含义
指的是Web服务器接收到客户端的请求后,可能由于某些条件限制,不能访问当前请求URL所指向的Web资源,而是指定了一个新的资源路径,让客户端重新发送请求
解决响应中文乱码问题
1
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Type","text/html;charset=utf-8");
2
resp.setContentType("text/html;charset=utf-8");
获取请求行信息
resp.getxxxxx();
获取请求头信息
请求转发
getRequestDispatcher()方法
Servlet的跳转要通过RequestDispatcher接口的实例对象实现,HttpServletRequest接口提供了该方法用于获取RequestDispatcher对象
forword()方法
用于将请求从一个Servlet对象传递给另一个Web资源
获取请求参数
Request对象传递数据
req.setAttribute("username","张三");
req.getAttribute("username");
req.removeAttribute("username");
解决请求参数中的中文乱码问题
//处理请求参数的中文乱码问题
req.setCharacterEncoding("utf-8");
会话技术
在Web开发中,服务器跟踪用户信息的计数称为会话技术。
Cookie类
构造方法
public Cookie(String name,String value){
//name指定Cookie的名称 value指定Cookie的值
}