首先:
我们一般在使用servlet的时候,所要使用的接口是servlet接口,但是这个接口麻烦在,你在使用它的时候,你要对其中的所有方法进行重写
为了解决这个麻烦,我们可以直接实现一个HttpServlet来实现我们的目的,因为这个父类间接实现类Servlet接口
这边继承了这个父类,这个父类实现了一个接口,那个接口又实现了servlet接口,所以就是间接的实现了Servlet的接口了
servlet开发流程:
- 要创建一个JavaWeb项目,同时将Tomcat添加为当前项目的依赖:就是打开project structure里面的module的第三个Dependencies里面的加号的
- 重写Service方法:service(HttpServletRequest req, HttpServletResponse resp) 一个是request一个是response 分别是请求和响应
- 在service方法中,定义业务处理代码
- 在web.xml中,配置Servlet对应的请求映射路径
//1. servlet-api 的导入问题 /* servlet-api 编码的时候需要,运行的时候,在服务器的环境中,由服务软件(Tomcat)提供 因此,我们的JAVAWEB项目中,再打包或者构建的时候就不会携带这个jar包进入打包的文件当中了
2.Content-Type响应头的问题 MIME类型响应头 媒体类型,闻不见类型,响应的数据类型 MIME类型用于告诉客户端响应的数据是什么类型的数据,客户端以此了欸行来决定用什么方式解析响应体 * */
public class UserServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.从request 对象中获取请求中的任何信息(username参数)
String username = req.getParameter("username");//根据参数名获取参数值 无论这个参数实在url?后 还是在请求体中 (只要是键值对形式的)
//2.处理业务的代码
String tf = "<h1>YES<h1>";
//这边的equals是直接对字符串类型判断是否相同
if("123".equals(username)){
tf = "<h1>NO<h1>";
}
//3.将要相应的数据放入response
//而且我们应该设置Content-Type响应头
//怎么说呢,当我们build一个文件的时候,假如要他再浏览器中显示的是jpg.html
//这类的静态资源,那么Tomcat就会从web.xml中去查询响应类型的mime-type,并在
//浏览器的F12中显示,而如果我们直接用userServlet,他就不显示了,因为它不是
//静态资源,浏览器会默认把响应体里面的数据当作html的代码进行解析,
//所以我们才应该设置Content-Type响应头
// resp.setHeader("Content-Type","text/html");
//因为这个响应头很重要,所以设置了一个单独的设置api给他
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
writer.write(tf);
}
Servlet生命周期
-
1.实例化 构造器 第一次请求
-
2.初始化 init 构造完毕
-
3.接受请求,处理请求,服务 service 每次请求
-
4.销毁 destory 程序停止时请求
Servlet 在Tomcat中是单例的:一个在tomcat中只会产生一个实例对象
- Servlet的成员变量在多个线程栈之中是共享的
- 不建议在service方法中修改成员变量 在并发请求时,会引发线程安全问题