HTTP(复习)
- HTTP的会话方式
- 建立连接
- 发出请求信息
- 回送响应信息
- 关闭连接
- HTTP请求消息结构
GET /books/java.html HTTP/1.1 # 请求行
# 消息头
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: Http://localhost/links.asp
User-Agent:Mozilla/4.0
Accept-Encoding: gzip, deflate
# 一个空行
# 实体内容
3.请求GET和POST
- 使用get方式传递参数
- 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET.
- 网页表单form的method属性显示被设置成“GET”.
- get方式传送的数据量一般限制在1KB以下.
- 使用post方式传递参数
- form的method参数为POST
- post传送数据量更大
servlet
Servlet简介
`- java Servlet是平台无关的服务器端组件,它运行在servlet容器中。其负责Servlet和客户的通信以及调用Servlet的方法,通信模式为“请求/响应”。
- 创建一个servlet的方法
-
实现一个Servlet的实现类
package com.web; import javax.servlet.*; public class HelloServlet implements Servlet { public void init(ServletConfig config){ System.out.println("init"); } public void service(ServletRequest req, ServletResponse res){ System.out.println("Hello Servlet!"); } public void destroy(){ System.out.println("destroy"); } public String getServletInfo(){ return ""; } public ServletConfig getServletConfig(){ return null; } }
-
配置web.xml
<servlet> <!-- Servlet注册名字 --> <servlet-name>helloServlet</servlet-name> <!--Servlet全类名--> <servlet-class>com.web.HelloServlet</servlet-class> <!--可以指定Servlet被创建的时机,大于0表示Serlver容器加载时创建实例,值越小越先创建(>=0)。负数表示不提前创建,在第一层请求时被创建。--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <!--映射的访问路径, 其中/代表当前web应用的根目录--> <url-pattern>/helloServlet</url-pattern> </servlet-mapping>
-
- Servlet容器
- 可以创建Servlet, 并调用Servlet, JSP, Fiter等软件环境
- JST,Filter, Listener, Tag…
- Servlet生命周期的有关方法
- 构造器:第一次请求Servlet时,创建Servlet的实例,调用构造器。单实例的!
- init:只被调用一次,用于初始化当前Servlet
- service:多次调用,每次请求都会调用service.
- destroy:在当前servlet所在的web应用被卸载时调用。用于释放当前servlet所占资源。
- Servlet容器响应客户请求的过程
- Servlet引擎检查是否以及装载并创建了该Servlet的实例对象,如果是则跳到第4步,否则第二步。
- 装载并创建该Servlet的一个实例对象: 调用该Servlet的构造器。
- 调用Servlet的init()方法
- 创建一个封装了ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用service方法并将响应和请求参数传递进去。
- Web应用程序被停止或重新启动前,servlet引擎卸载Servlet,并在卸载Servlet之前调用destroy()方法。
- Servlet的映射细节
- 同一个Servlet可以被映射到多个URL上,如:
<!--以/开头并以/*结尾--> <url-pattern>/*</url-pattern> <!--"*.扩展名"--> <url-pattern>*.html</url-pattern>
- “/”开头和以“/*”结尾用于做路径映射
- 以"."开头用来做扩展映射
- "/"用来做default servlet映射
(参考:https://blog.csdn.net/zhuboming/article/details/79627445)
- ServletConfig
-
封装了serlvet的配置信息,并且可以获取ServletContex对象
-
配置默认参数
<!--配置Servlet参数--> <init-param> <param-name>user</param-name> <param-value>root</param-value> <init-param>
-
获取参数
String servletConfig.getInitParameter("String"); # 获取指定参数名的参数 Enumeration<String> servletConfig.getInitParameterNames(); # 获取参数名
-
获取servletname
servletConfig.getServletName()
-
获取servlet的上下文环境
ServletContext getServletContext();
例如:web.xml中获取参数driver的值可以按如下方法,
<!--当前web应用的初始化参数--> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param>
ServletContext sc = servletConfig.getServletContext(); String driver = sc.getInitParameter("driver");
-
-
ServletRequest和ServletResponse
- ServletRequest:封装了请求信息,可以重中获取任何请求信息
- String getParameter(String name);
- Map getParameterMap();
- Enumeration getParameterNames;
- String[] getParameterValues(String name) ;
- 获取请求的URI: httpServletRequest.getRequestURI();
- 获取get方法请求string:httpServletRequest.getQueryString();
- 其中HttpServletRequest是SerlvetRequest的子接口,里面包含了大量获取HTTP请求的方法。
- ServletResponse: 封装了响应信息,给用户响应(用的不多)
- getWriter() 返回一个PrintWriter对象
- setContentType() 设置响应类型
- HttpServletResponse.sendRedirect(String location): 请求重定向
- ServletRequest:封装了请求信息,可以重中获取任何请求信息
-
GenericServlet
- 实现了Servlet接口的抽类,实现该方法更简单,只需要重写service.
-
HttpServlet
- doGet
- doPost
只需要重写这个两个方法进行请求处理。
-