目录
Servlet 介绍
Servlet 是 sun 公司制定的一种用于扩展web服务器的功能的组件规范。
- web服务器通常只能处理静态的资源(html , css , js ......) , 为了解决动态的处理数据, 就需要对 web服务器的功能进行扩展,servlet 就是用于处理
- 动态数据的组件规范。
- 组件: 符合一个规范,完成部分功能的软件模块。 比如java中的servlet , jsp都属于组件。 这些软
- 件模块需要放在容器中运行。比如tomcat就属于容器。
- 因此。 servlet ,jsp 都需要放在tomcat容器中去允许。
- 容器: 符合一定规范,能够运行组件的一种软件。比如: tomcat , jetty , JBoss.....
- Servlet规范: 使用servlet 的时候,自定义类 继承 HttpServlet , 重新service方法, 那么就符合
- Servlet规范。
Servlet的开发步骤
新建的工程是一个
java web
项目(
maven
中的
web app
)
Servlet
类
, 基础
HttpServlet
- 重写 service方法
- service(HttpServletRequest request , HttpServletResponse response)
- request : 请求
- response : 响应
java web
工程中的
web.xml
文件
- web.xml文件名字不能修改。(tomcat容器找web.xml文件)
- 将java类和浏览器访问的地址做一个映射(mapping)
- 浏览器没办法直接访问java类中的方法,所以需要对java类映射为一个浏览器能够访问的url
- 地址。
打包
(idea
帮助完成
)
- 把web项目运行需要的文件按指定的文件结构保存
部署
(
在
idea
中可以完成
)
- 把打包好的web程序放到tomcat的过程, 就称为部署。
启动容器
- 容器启动之后, 就可以通过浏览器,访问这个java web 项目了。
servlet & servlet的配置
servlet
public class BMIServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req,
HttpServletResponse resp) throws
ServletException, IOException {
// 1. 设置编码
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
// 2. 获取参数: -- url:
// http://localhost:8080/bmi?tz=60&sg=1.7
// ? key=value & key1+value1 , &用于分隔参数
String tz = req.getParameter("tz");
String sg = req.getParameter("sg");
// 3. 处理数据
double tz1 = Double.valueOf(tz);
double sg1 = Double.valueOf(sg);
double bmi = tz1 / (sg1 * sg1);
// 4. 响应结果
PrintWriter writer = resp.getWriter();
String str = "";
if(bmi < 18){
str = "太瘦了";
}else if(bmi < 24){
str="标准身材";
}else if(bmi < 28){
str="超重了";
}else {
str="肥胖状态。";
}
writer.println("你的bmi是:" + bmi + "\n");
writer.println("<b style='color:red'>"+str+"</b>");
}
}
web.xml中对servlet配置
<servlet>
<servlet-name>bmi</servlet-name>
<servlet-class>action.BMIServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bmi</servlet-name>
<url-pattern>/bmi</url-pattern>
</servlet-mapping
html界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 绝对路径 :/开始的路径都是绝对路径。在这个绝对路径之前,只拼接:
http://localhost:8080/绝对路径
<form action="/bmi" method="get"> --- http://localhost:8080/bmi (错误路径)
相对路径: 不是/开始的路径,都是相对路径。 根据当前路径, 拼接你的相对路径。
<form action="bmi" method="get"> -- 当前路径:
http://localhost:8080/web01/bmi.html
-- 拼接路径:
http://localhost:8080/web01/bmi
-->
<form action="bmi" method="get">
<label>请输入体重:</label>
<input type="text" name="tz">
<br>
<label>请输入身高:</label>
<input type="text" name="sg">
<br>
<input type="submit" value="计算bmi">
</form>
</body>
</html>
访问方式:
先访问
html
页面, 输入数据:
http://localhost:8080/web01/bmi.html
然后通过表单提交访问:
http://localhost:8080/web01/bmi?tz=60&sg=1.7
接收前端提交的数据
- request.getParameter(key) , 获取请求参数。
- getParameter(key) 的返回值是String , 使用的时候,需要注意数据类型的转换问题。
- 如果前端没有传入某个参数, 使用getParameter(key) ,那么返回值是null.
响应结果
- 通过response对象的 getWriter()方法,得到输出流
- 通过输出流,输出字符串内容,作为响应结果
- 设置响应结果的类型和字符编码方式:
response.setContentType("text/html;charset=utf-8");1. text/html , 这个是浏览器能解析的 html 格式2. application/json, 这个是浏览器能解析的 json 格式 ( 后面会使用 )3. 如果格式写错,浏览器不能解析,就会提示你下载。比如 test/html , 就是浏览器不认识的格式,就会提示下载这个响应结果。
http协议 & servlet 的运行
http协议
1.
通信方式
- 建立连接
- 发送请求(请求数据包)
- 发送响应(响应数据包)
- 断开连接
2.
数据包格式
- 请求数据包
- 响应数据包
3.
请求方式
get
- 请求参数在url地址后显示
- 数据量比较小
- 不安全
- 不支持文件上传
- get请求: ① 浏览器地址栏直接访问 , ② form的method设置为get , ③ 超链接 ,④ 异步请求的时候,设置为get.
post
- 数据放在消息体中的
- 数据量大
- 相对安全
- 支持文件上传
- post请求: ① form的method设置为post , ② 异步请求的时候, 设置为post
put
servlet的地址的设置
java
// 介绍 servlet的路径配置
public class UrlPatternServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. 设置编码
resp.setContentType("text/html;charset=utf-8");
req.setCharac