同事建议我不要学习servlet,说servlet太古老了,现在很多公司都不用这个了,建议我直接学springboot。他建议比较中肯,但是我深知,springboot虽然很方便,但是对于小白来说直接学springboot,可能会有一些云里雾里,不知其所以然。最后我还是选择花一点时间学一下Servlet,了解其基本知识点。对于我学习后面深入学习spring,springmvc,springboot可能会更多帮助。
一、web容器和Servlet理解
web容器:首先生活中的容器,它的作用是就是用于盛放东西,比如说:水杯用于盛放水。同理,web容器,用于盛放web应用的,所谓web应用就是web程序(网站)。那web容器到底是什么呢?其实就是web服务器,用于解析web应用的。常用的web服务器有哪些呢?比如说:java里面有tomcat,jboss,window中web服务器是IIS,PHP使用的是apache。
Servlet:Servlet本质是一个java接口,为了实现某种功能定义的规范。我们在web应用中,可以简单实现一个请求对应一个servlet与之处理。当然在真正工程时并不会这样做,通常定义一个servlet,然后在内部基于请求进行分发处理(springmvc就是这样处理的)。
二、目录说明
在开发java web有一些目录需要单独说明一下,不然很容易混乱。
名字 | 作用 |
resource | 用于保存资源文件,例如properties配置文件,xml文件,凡是maven工程都有这样的一个目录 |
classpath | classpath,通常是一个环境变量,保存一些目录。这里resource目录就是classpath当中 |
META-INF | 这个目录在任何一个java工程中都是存在的,记录该工程的一些元数据,本身和java web关系不大 |
webapp | 代表一个java web工程,该目录存放一些资源文件(css,js),html,以及模板。代表根目录 |
编译打包:java web会打包成war,那么war主要内容:webapp中内容(不含webapp),resource中内容(不含resource)以及classe文件
三、组件
1、Servlet三大组件:Servlet、Listener、Filter
名称 | 作用 |
Servlet | 核心组件。我们这里所说的Servlet,其实是HttpServlet,可直接处理http请求,我们需要重写方法,例如:doGet,doPost 一个web工程,里面可有多个请求地址,那么就需要多个Servlet |
Filter | 过滤器,工作在Servlet之前,可做一些前置工作,例如:限流检查,白名单检查,编码设置,权限分配等 一个web工程,可以有多个过滤器 |
Listener | 监听器,主要基于事件模型,当发生某些事件,可执行我们设置的回调函数。监听器有三种:ServletContextListener,HttpSessionListener,ServletRequestListener |
2、Servlet四种域对象:jsp、request、session、application(范围由小到大)
3、Servlet常用对象:ServletContext,HttpServletRequest,HttpServletResponse,HttpSession
四、常用类
4.1、ServletContext
名字 | 作用 |
getContextPath | 返回项目名称,例如: 假设访问路径127.0.0.1:8080/demo/xx 返回值,/demo |
setAttribute | 设置属性,用于传递参数 |
getAttribute | |
addFilter | 添加过滤器 |
addListener | 添加监听器 |
4.2、HttpServletResponse
名称 | 作用 |
getWriter | 获取输出流 |
sendRedirect | 用于重定向 |
4.3、HttpServletRequest
名称 | 作用 |
getParameter | 获取请求中的参数,前端页面传过来的 |
getParameterValues | 获取请求中的参数,例如:select,checkbox等 |
getAttribute | 获取属性value,主要用web server内部传参用 |
setAttribute | 在request对象中设置属性 |
4.4、HttpSession
Session代表一次会话,存储在服务器中。我们通过Session可以设置一些属性,用于服务内部,常用方法:
名称 | 作用 |
setAttribute | 向session对象中添加属性 |
getAttribute | 从session对象中获取属性 |
4.5、Cookie
Cookie是浏览器行为,业务通过相关方法(Cookie类中方法),创建cookie,通过http协议传给浏览器。以后每次请求,浏览都会携带cookie,最终服务器通过cookie可以做某些事情(例如验证,反爬虫)
名称 | 作用 |
setMaxAge | cookie最长存活时间 |
setDomain | cookie有效域 |
五、转发和重定向区别
相同点:实现页面跳转
不同点:转发发生在web server内部,一次http请求(url地址栏不变)
重定向是由浏览器触发,两次独立http请求(url地址栏发生变化)
转发两种方式(不需要添加项目前缀):
getServletContext().getRequestDispatcher("/success.jsp").forward(req, resp);
req.getRequestDispatcher("/success.jsp").forward(req, resp)
重定向(需要添加项目名称前缀):
resp.sendRedirect(getServletContext().getContextPath()+"/success.jsp");
六、总结
利用几天阅读相关书籍以及观看学习视频,Servlet还是比较简单的,知道里面有哪些组件以及常用方法,就行了。上面是我的总结,比较浅显。