Servlet是如何运行的?
----------------------------------------------------------------------------------
比如,在浏览器地址栏输入http://ip:port/day01/hello
1.浏览器依据ip和port建立与服务器之间的连接(比如,建立与tomcat之间的连接)。
2.浏览器将相关数据打包(即按照http协议的要求,创建请求数据包)。
3,浏览器将请求数据包发送给服务器。
4.服务器解析请求数据包的内容,并且将解析到的数据添加到request对象里面,同时创建一个response对象。
5.服务器将对应的Servlet(比如HelloServlet)实例化,接下来调用Servlet实例的service方法。
注:服务器会将request和response作为参数传递给service方法,可以通过request对象获取请求数据(比如一些请求参数值),然后通过response对象写入处理结果。
6.服务器通过response对象获取处理结果,然后创建响应数据包。
7.服务器发送响应数据包给浏览器。
8.浏览器解析响应数据包,并且生成相应的页面。
public class BmiServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 读取身高、体重
String height = request.getParameter("height");
String weight = request.getParameter("weight");
String[] interest = request.getParameterValues("interest");
System.out.println("interest:" + interest);
// 对于多选框,要注意,如果用户没有选择
// 任何选项,则返回null值。
if (interest != null) {
for (int i = 0; i < interest.length; i++) {
System.out.println(interest[i]);
}
}
// 对身高体重进行合法性验证,暂时不考虑
// 计算bmi指数
double bmi = Double.parseDouble(weight) / Double.parseDouble(height) / Double.parseDouble(height);
// 依据bmi指数,判断用户身体状况
String status = "正常";
if (bmi < 19) {
status = "过轻";
}
if (bmi > 25) {
status = "过重";
}
// 输出用户的身体状况
response.setContentType("text/html;charset=utf-8");
response.getWriter().println(status);
/*
* out不关闭也可以,因为 容器在执行完service方法之后,会调用 out.close()
*/
}
}
web.xml配置如下:
<servlet>
<servlet-name>bmiServlet</servlet-name>
<servlet-class>web.BmiServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bmiServlet</servlet-name>
<url-pattern>/bmi</url-pattern>
</servlet-mapping>