servlet的简介
什么叫servlet
servlet是运行在WEB服务器上的的java应用程序,可以生成动态WEB页面, 属于客户和服务器响应的中间层。
-
servlet就是sun公司开发动态web的一门技术
-
-
如果你想开发一个servlet的程序,需要完成以下两步
-
1.编写一个类实现servlet接口
-
2把开发好的java类部署到web服务器中
-
把实现servlet接口的java程序叫,servlet,(本质还是一个servlet)
-
创建maven项目的以一种方式
1.1 构建一个普通的maven项目,删掉里面的src目录,以后学习就是在这个项目里面建立moudel,这个空的工程就是maven的主工程
1.2 关于maven的父子工程的理解:
父目录中会多出一个model标记
<modules>
<module>servlet01</module>
</modules>子项目中会多出
<parent>
<artifactId>javaweb-02-servlet</artifactId>
<groupId>com.kuang</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
-
MAVEN的准备工作
1.将web.xml 改为最新的
2.将maven的结构搭建完整 ,添加 “java文件夹”和resources文件夹
开始写第一个servlet程序
1.编写一个类继承HttpServlet
重写doGet 和doPost()方法
2.写好后,编写servlet映射
为什么要映射 ,因为我们写的java程序,但是想在浏览器访问,而浏览器需要连接web服务器(这里使用tomca服务器),所以我们在web服务中注册我们写的servlet,还需要给它一个能访问的路径
Servlet原理
Servlet是由WEB服务器,WEB服务器在收到浏览器请求后
servlet 的映射路径优先级问题
指定了固有的映射路径的优先级最高,如果找不到就会走默认的处理请求
例如 默认的 /*
指定了 /hell
ServletContext
web容器在启动的时候,它会为每个web程序都创建一个ServletContext对象,它代表的是当前的WEB应用
作用
1. 共享数据 :我在这个Servlet保存的数据,可以在另一个Servlet中拿到
ServletContext的 存储值的方式
另一个servlet获取 ServletContext获取值的方式
ServletContext读取配置文件
-
获取ServletContext对象
-
调用读取配置的方法 InputStean getResourceAsStream();
配置文件的路径解释: 当前目录下, WEB-INF/classes/ 下的db.properties
-
创建Properties对象 , 并加载
-
Properties p=new Properties();
p.load(is); -
读取配置文件db.properties的属性
String username = p.getProperty("username");
String password = p.getProperty("password");
接下来学习 HttpServletResponse and HttpServletRequest
响应状态码
1. 200 : 请求响应成功
2. 3xx : 请求重定向
3. 4xx : 找不到资源
4. 5xx: 服务器代码错误
实现一个验证码
-
让网页3秒刷新一次
resp.setHeader("refresh","3");
-
在内存中创建一张验证码图片
生成的图片就是一个黑框 , 设置其属性
步骤
重定向 (Redirect) and 请求转发的区别 (面试题)
相同点: 页面都会发生跳转
不同点: 重定向(页面跳转的同时,地址栏也会跟着跳转) 请求转发 (地址栏不会发生变化)
${pageContext.request.contextPath} //这样部署,路径永远都是正确的, (代码的意思:代表当前项目)
请求转发 req.getRequestDispatcher(" 路径").forword(req,resp);
req.getRequestDispatcher(req.getContextPath()+"success.jsp").forward(req,resp) // 报错 /r/r/success.jsp //为什么出现这个错误 因为 “/”已经代表的是当前项目, req.getContextPath()--》也是代表当前项目,所以会出现/r/r/success.jsp //请求转发正确写法 req.getRequstDispatcher("/success.jsp").forwoar(req,resp);
重定向 resp.senRedirect("路径");
resp.senRedirect(req.getContextPath()+"/success.jsp") //不会报错