什么是Servlet
- Servlet是一种技术,用来开发动态Web资源;
- 所谓动态资源,就是不同人在不同时间请求到的页面内容是不相同的,可以通过jdbc跟数据库交互,获取定制化数据。这种生成动态Web页面的工作就由Servlet负责。此时就需要将Servlet映射成URL请求地址,以供客户端访问,具体实现见下文。
- 静态资源,展示给每个人的内容都是相同的,是写死在资源文件系统中的(/webapp文件夹下,比如/webapp/header.html),不需要Servlet的参与。资源请求路径:http://localhost:8080/header.html
- Servlet是一种JavaEE规范,所以在java中以Servlet接口的形式存在。
- Servlet是一种运行在服务器上的小程序,由服务器调用。能够接收来自客户端浏览器的HTTP请求,并做出响应。请求的分配(调用哪一个Servlet对象)以及结果的返回由服务器负责。
如何开发一个动态Web资源(以HelloServlet为例)
1. 编写抽象类HttpServlet的子类,重写doGet/doPost方法处理请求,做出响应。在配置之前,HelloServlet只是一个普通的Java类。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
// 在配置之前,HelloServlet就是一个普通的java类,无法处理来自前端的请求并返回响应
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
// 响应的输出的字符流
PrintWriter out = resp.getWriter();
out.println("");
out.println("");
out.println("Hello World!");
out.println("");
out.println("");
out.println("Hello World!");
out.println("");
out.println("");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
2. 在web.xml配置文件中注册Servlet并配置URL映射。
- Tomcat根据此配置文件找到请求路径对应的的资源。
- 找到之后,调用相应的Servlet对象的doGet/doPost方法处理请求,并返回响应结果。
helloServlet
HelloServlet
helloServlet
/Jing
3. 在Tomcat中部署应用
- 设置Application Context(根路径),用来区分部署在同一个Tomcat中的多个应用。
4. 启动Tomcat,访问资源
- 访问动态资源localhost:8080/JavaWeb01/Jing
中文乱码问题
原因:编码格式不统一
- 未给响应内容设置编码格式,默认的编码格式为ISO-8859-1;而浏览器的编码方式(GBK或者UTF-8),所以无法对响应返回的中文进行正确编码。
解决方式
- 给响应response设置内容编码格式,与浏览器统一。