什么是servlet?
如何写一个servlet
servlet是如何运行的
什么是HTTP协议?数据结构、请求方式以及各自的特点
servlet是sun公司用于扩展web服务器功能的组件规范。
补充:
组件:符合规范,实现部分功能,并且需要部署到相应的容器中才能运行的软件模块。
容器:符合规范,为组件提供运行环境的程序。正因为web服务器只能处理静态资源,不能处理动态资源,所以需要扩展其功能。
2. 如何写一个servlet
备注:以下所有方式以maven项目为基准
Setp1:写一个Java类,继承Httpservlet或实现servlet接口
Setp2:编译代码;
Setp3:建立文档结构
Setp4:配置web.xml文件;
Setp5:部署
Setp6:启动容器
http://ip:port/appname/url-pattern
注: url-pattern在web.xml中设置。
案例:
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.DBUtils;
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
Connection conn = null;
PreparedStatement stat = null;
try {
conn = DBUtils.getCon();
String sql = "insert into userTable values(null,?,?,?)";
stat = conn.prepareStatement(sql);
stat.setString(1, username);
stat.setString(2, password);
stat.setString(3, email);
stat.executeUpdate();
// out.print("成功");
out.print("<a href='list'>查看用户列表</a>");
// 重定向
response.sendRedirect("list");
} catch (Exception e) {
e.printStackTrace();
out.println("失败");
} finally {
DBUtils.close(conn, stat, null);
}
}
}3.servlet是如何运行的
例如:在浏览器地址栏输入http://localhost:8080/projectName/hello
step1.浏览器依据ip和port建立连接。
step2.浏览器将相关数据放到请求数据包,然后将请求数据包发送给服务器。
step3.服务器解析请求数据包,将解析到的结果放到request对象里面,同时,创建一个response对象。
step4.服务器依据请求路径,创建Servlet对象,然后调用该对象的service方法。
step5.容器从response对象中取出处理结果,然后创建响应数据包并发送给浏览器。
step6.浏览器解析响应数据包,生成结果页面。
备注:
开发人员只需要调用request对象的方法,就可以获得请求数据包中的数据。类似的,只需要调用response对象的方法,就可以将处理结果写到response对象里面,容器会从response对象中取出处理结果,然后创建响应数据包并发送给浏览器。
图解:
4.什么是HTTP协议?数据结构、请求方式以及各自的特点
HTTP协议是一种网络应用层协议,规定了浏览器与服务器之间的通信方式以及相应的数据包的格式。
数据结构:
请求数据包 | ||
请求行 | 请求方式 | Post 和get |
| 资源路径 | ||
| 协议和版本 | ||
消息头 | 消息头是一些键值对,使用“:”隔开。 | 如浏览器发送“user-agent”,告诉服务器浏览器的类型和版本 |
消息正文 | 如果请求类型为get,实体正文为空;只有当请求方式为post时,实体内容才会有数据 | |
响应数据 | ||
状态行 | 协议类型和版本 | |
状态码 | 200:正常,500:系统出错, 404:请求路径出错 | |
| 状态描述 | ||
响应头 | 服务器也可以发送一些消息头给浏览器; 如,发送content-type消息头,告诉浏览器,服务器返回的数据类型(包括编码) | |
响应正文 | 程序的处理结果,浏览器会解析出来, 生成相应的页面。 | |
请求方式:
1)哪些情况下,浏览器会发送get请求?
a.直接在浏览器地址栏输入地址。
b.点击链接。
c.表单的默认提交方式。
2)哪些情况下,浏览器会发送post请求
a.设置表单的method属性值为"post"。
特点:
get请求的特点
a.会将请求参数显示在浏览器地址栏,不安全。
注:因为有些网络设备(比如路由器)会记录访问地址。
b.会将请求参数添加到请求资源路径的后面,只能提交少量的数据给服务器。
注:因为请求行大约只能存放2k左右的数据。
post请求的特点
a.不会将请求参数显示在浏览器地址栏,相对安全。
b.将请求参数添加到了实体内容里面,可以提交大量的数据给服务器。
注:http协议并不会对数据进行加密。所以,对于敏感数据,需要进行加密处理(使用https协议)。