目录
HTTP协议
超文本传输协议,是TCP/IP协议的应用层协议,是作为客户端和服务器之间交互而制定的统一的信息格式。
一个完整http请求应该包含四个部分:
- 请求行【描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号】
- 多个消息头【描述客户端请求哪台主机,以及客户端的一些环境信息等】
- 一个空行
- 数据(POST有,GET没有)
请求行:GET /java.html HTTP/1.1
常用的有:POST,GET
GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。
请求头
- Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】
- Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集】
- Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式】
- Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】
- Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】
- If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】
- Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的---反盗链】
- 8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】
- Cookie【浏览器告诉服务器,带来的Cookie是什么】
- Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
- Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】
Servlet
继承Httpservlet接口
重写的方法init【初始化】,destroy【销毁:在服务器关闭时执行】,service【服务:处理请求的方法】
service方法:可以处理get/post的请求,优先使用service方法回应请求。
doGet方法:处理get的请求,与service同在时,service生效。
doPost方法:处理post的请求,与service同在时,service生效。
注意:如果在覆写的service方法中调用父类的service方法(super.service(arg0,arg1)),
则service方法处理之后,会再次根据请求的类型调用doGet或doPost。
servlet的生命周期:
1.从第一次调用到服务器关闭
<load-on-startup>
2.如果servlet在web.xml中配置
<load-on-startup>1</load-on-startup>
生命周期为从服务器启动就会运行,直到服务器关闭。数字为服务器启动时加载的顺序。
编写一个简单的servlet程序
编写一个简单的显示hello World的servlet
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hello World!");
}
}
必须要在web.xml中配置servlet,才可以运行,配置文件如下:
<!--配置servlet-->
<!--配置servlet的类路径 -->
<servlet>
<servlet-name>my</servlet-name>
<!--servlet的路径一定要对-->
<servlet-class>com.servlet.MyServlet</servlet-class>
</servlet>
<!--配置访问方式-->
<servlet-mapping>
<!--要与servlet-name保持一至-->
<servlet-name>my</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
<!--http://localhost:8080/my和http://localhost:8080/my2都可以访问-->
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/my2</url-pattern>
</servlet-mapping>
<!--还可以通过通配符-->
<servlet-mapping>
<servlet-name>my</servlet-name>
<!--/*匹配所有-->
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>my</servlet-name>
<!--*.扩展名,如*.jsp:匹配所有扩展名为jsp的-->
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
在网页中输入对应的路径就可以了,如我的:http://localhost:8080/my,效果如下:
优先级
访问http://localhost:8080/my,如果没有my对应的servlet,会访问配置了/*的servlet,有则访问my
*.扩展名同理。