Servlet
开始卷java了,先写一下在IDEA部署Servlet的两种方法吧,一种导包,一种用maven,然后记录自己学习的过程吧。
IDEA部署Servlet
导servlet-api.jar
包部署
新建java项目
添加框架支持:
添加web框架
项目目录架构
目录 | 描述 |
---|---|
.idea | IDEA工程配置文件 |
src | 存放Java代码 |
web | 存放项目资源 |
WEB-INF | 存放项目配置文件,Jar包、class文件 |
WebProject.iml | 模块配置文件 |
External Libraries | 外部Jar文件 |
手工导入servlet-api.jar文件
在WEB-INF
文件夹下新建lib
文件夹将tomcat
中的servlet-api.jar
复制进去
然后对文件进行项目集成,右键lib
编写Servlet
创建MyServlet
,实现Servlet
接口,重写5个方法
配置web.xml
文件
1 |
|
集成tomcat
关联第三方jar包
基本同手工导入servlet-api.jar
文件
选择Project Library
完成
Global Library
表示所有工程都可以使用
Project Library
表示当前工程中所有的模块都可使用
Module Library
表示当前模块可以使用
导出war包
war包可以直接放入Tomcat的webapps
目录中,启动Tomcat后自动解压
构建war包
在
out\artifacts
目录中,查看生产的war包
解决IDEA打印中文乱码
1 | -Dfile.encoding=UTF-8 |
maven部署
把maven项目的结构补充完整
如果这边没有将目标设为源文件夹,在这里设置。
如果pom.xml不全的话
1 | <dependency> |
后面都一样了。
Servlet 核心接口和类
Servlet接口
所有Servlet都会直接间接与该接口发生联系,该接口包括以下5种方法:
1 | init(ServletConfig servletConfig) |
init()
Servlet实例化后,Servlet容器会调用init()
方法来初始化该对象,在处理客户请求前完成初始化操作,如建立数据库连接等。
GenericServlet抽象类
它提供生命周期init
和destroy
的简单实现,要编写Servlet只需要重写抽象service
HttpServlet类
该类继承GenericServlet
的基础上进一步扩展。HttpServlet的子类必须重写一个方法,该方法通常是以下方法之一:
1 | doGet |
Web.xml配置
精确匹配 /具体名称
后缀匹配 *.xxx
通配符匹配1/*
包含服务器所有的资源
通配符匹配2/
包含服务器所有的资源,不包括jsp
@WebServlet注解常用属性
name
:Serlvet名字(可选)
value
:配置url路径,可配置多个
urlPatterns
:配置url路径,和value作用一样,不能同时使用
loadOnStartup
:配置Servlet的创建的时机,如果是0或正数 启动程序时创建,如果是负数,则访问时创建。数字越小优先级越高。
1 |
|
1 |
|
Servlet应用
在Servlet中用来处理客户端请求需要用doGet
或doPost
方法的request对象
解决doPost
出现乱码
1 | req.setCharacterEncoding("utf-8"); |
解决响应出现乱码
同时设置服务端的编码格式和客户端响应的文件类型以及响应时的编码格式
1 | resp.setContentType("text/html;charset=UTF-8"); |
在
getWriter()
前设置
Servlet生命周期
1.实例化:由容器调用Servlet构造器创建具体的Servlet对象,只执行一次。
2.初始化:调用init()
方法会被调用,只执行一次。
3.提供服务:调用服务器的Servlet()
方法处理请求,会执行多次。
4.销毁:当容器停止或重新启动都会引起销毁Servlet对象并调用destroy方法,释放所有在init()
中申请的资源,只执行一次。
filter过滤器
过滤器时处于客户端与服务器目标资源之间的一道过滤技术。
过滤器作用:
客户端发送请求时,会先经过Filter在到达目标Servlet中;响应时,会根据执行流程再次反向执行Filter。
编写过滤器
ServletAPI中提供了一个接口,开发人员编写一个Java类实现接口,这个类称之为过滤器。
实现过程
- 编写Java类实现Filter接口
- 在doFilter方法中编写拦截逻辑
- 设置拦截路径
1 | public class MyFilter implements Filter { |
过滤器配置
1 |