Servlet – 接口 | GenericServlet – 抽象类 | HttpServlet – 抽象类(专用于服务HTTP协议的请求)
GenericServlet
:将Servlet接口中其他的方法做了默认空实现,只将service()作为抽象方法。GenericServlet
,实现service()方法即可。HttpServlet
:对HTTP协议做了封装,聚焦于业务代码。@WebServlet({"/d4","/dd4","/ddd4"})
public class ServletDemo extends HttpServlet {
......
/xxx
—— 单层路径。
ii. /xxx/yyy
—— 多层路径。
iii. *.do
、*.action
—— 扩展名匹配。注意没有/
,这个是Struct(2)发明的,通常使用少。
iv. 通配符:*
可以作为通配符使用。例如/*
、/njupt/*
。Hyper Text Transfer Protocol 超文本传输协议
例如:
GET /dir/index.htm HTTP/1.1
Host: www.xyz.edu.cn
Connection: keep-alive
User-Agent: Mozilla/5.0
Accept-Language: cn
POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
username=zhangsan&pwd=xxxxxx
例如:
HTTP/1.1 202 Accepted // 接受请求
HTTP/1.1 400 Bad Request // 请求格式或语法有误,服务器不会处理
HTTP/1.1 404 Not Found // 找不到该资源
HTTP/1.1 301 Moved Permanently // 永久转移了
Location: http://www.xyz.edu/ee/index.html
HTTP请求方式有7种,常用的有2种:
请求头名称: 请求头值
常见的请求头:
Host: 139.196.189.189:8080
—— 服务器主机名称。有了它,就可以在请求行中使用相对url。
Connection: keep-alive
—— 是否保持TCP连接以便继续请求其他资源
User-Agent: Mozilla/5.0
—— 客户端的浏览器版本信息,提高服务器兼容性
Accept-Language: cn
—— 表示希望优先得到中文文档
Referer: http://www.xxx.com/docs/developers.html
—— 表示通过哪个HTML的超链接访问该网页的(防止盗链,统计流量来源)。
用于分割POST请求的请求头和请求体
封装POST请求消息的请求参数。
Request对象由服务器软件对报文进行解析,封装成java对象。Response对象由服务器软件将Java对象填充至响应报文中。
ServletRequest - - 接口 | HttpServletRequest - - 抽象类 | org.apache.catalina.connector.RequestFacade - - 类 (专用于服务HTTP协议的请求)(Tomcat提供的实现类)
GET /servlets/demo1?name=zhangsan HTTP/1.1
getMethod()
getContextPath()
getServletPath()
getQueryString()
getRequestURI()
(/servlets/demo1)getRequestURL()
(http://localhost/servlets/demo1)getProtocol()
getRemoteAddr()
getHeader(String name)
Enumeration getHeaderNames()
只有POST方式才有请求体,在请求体中封装了POST请求的请求参数。
BufferedReader getReader()
获取字符输入流,只能操作字符数据。ServletInputStream getInputStream()
获取字节输入流,可以操作所有类型数据(可以用于文件上传)。String getParameter(String name)
String[] getParameterValues(String name)
numeration getParameterNames()
Map<String,String[]> getParameterMap()
request.setCharacterEncoding(“utf-8”)
一种在服务器内部的资源跳转方式。
RequestDispatcher getRequestDispatcher(String path)
forward(ServletRequest, ServletResponse response)
void setAttribute(String name, Object obj)
Object getAttribute(String name)
void removeAttribute(String name)
用于在整个web应用中共享数据
getServletContext()