什么是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协议)。