Servlet
Servlet简介
- Servlet是运行在服务端的java小程序,用来处理客户端的请求,响应给浏览器的动态资源.
- Servlet本质是java代码,通过java的api动态的向客户端输出内容
- Servlet运行在服务器中,main方法运行在本地java程序中
- Servlet是javaweb三大组件之一(Servlet,Filter,Listener)
Servlet快速入门
- 创建类实现Servlet接口
- 实现接口的方法
- 在web.xml进行servlet的配置
- 但是在开发中不会直接实现Servlet接口,因为Servlet需要覆盖的方法太多,一般:
- 集成HttpServlet类
- 重写doPost()和doGet()两个方法
- 在web.xml进行servlet的配置
导入外部web项目报感叹号警告
- 如果导入的web项目有一个感叹号的警告,是环境不匹配的原因
- 右键项目,built-path,然后remove掉报错的依赖,添加本地的新的依赖,如tomcat中的serv* 如为jre不一致,添加jre system library
Servlet方法
- init():初始化-->Servlet对象创建的时候执行
- 参数ServletConfig config:代表的是servlet对象的配置信息
- config.getServletName-->web.xml中定义的servletName(没啥用)
- config中的配置信息来源于web.xml
- ServletContext context = config.getServletContext();
- server():服务-->每次访问都会执行一次
- 参数ServletRequest封装的是http请求中的所有信息
- 参数ServletResponse代表http响应,内部要封装的是需要响应的信息
- destory():销毁-->Servlet对象销毁的时候执行
Servlet对象的生命周期(面试容易问)
- Servlet的创建:默认第一次访问Servlet的时候创建
- Servlet的销毁:服务器关闭的时候
Servlet的执行步骤
- 浏览器输入地址回车访问服务器,客户端封装一个http请求发送给服务器
- tomcat服务器解析url地址,找到对应的工程和对应的Servlet文件
- tomcat服务器创建Servlet对象,同时创建对应的ServletRequest对象和ServletResponse对象,传入server方法中
Servlet的基本配置(web.xml)
- url-padding的配置方式:
- /url地址:完全匹配,访问的资源与配置的资源完全相同才能访问到
- 目录匹配:/虚拟目录*:其中*代表任意
- 扩展名匹配: *.扩展名(以*开始,以扩展名结束)
- 注:第2,3种方式不要使用
服务器启动实例化Servlet配置
- Servlet何时创建:默认第一次访问的时候创建
- 为什么默认
- 当在<servlet>的配置时加上<load-on-startup>,servlet会在启动服务器的时候创建(标签内写数字1-5,代表优先级,数字越小优先级越高)
缺省Servlet
- 可以将url-padding配置成一个/,代表该servlet是一个缺省的servlet
- 什么是缺省的servlet:
- 当访问的地址所有的servlet都不匹配是,会执行缺省的servlet
- 配置了缺省后,通过浏览器查找静态资源就会报404,然后跳转到缺省
- web应用中,所有的资源响应都是servlet负责,包括静态资源
- 在tomcat目录下的conf目录下的web.xml文件中存在一个全局的配置文件,里面有一个全局的缺省处理
- 首先拿到你需要访问的静态资源地址去工程的web.xml的url-padding中找,发现没有,然后调用全局web.xml中的缺省Servlet,通过全局缺省的Servlet找到文件逐行数据返回给浏览器,如果静态资源也没有,则404
欢迎页面
HttpServlet
- 在项目开发中一般不自己创建类再实现Servlet接口,直接右键创建Servlet对象,ide会自动在web.xml中帮你配置
- 得到的类是继承HttpServlet的,重写了doGet和doPost方法
修改HttpServlet模板
- window-->preferences-->Templates-->
package ${enclosing_package};
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ${primary_type_name} extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("hello yhh...");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
用户登录功能
codding
ServletContext
ServletContext简介
- ServletContext代表的是一个web应用的环境(上下文)对象,内部封装的是该web应用的信息
- 一个web项目只有一个ServletContext对象
- 一个web项目有多个Servlet
ServletContext的生命周期
- 创建:该web应用被加载(服务器启动,发布web应用)
- 销毁:web应用被移除
获取ServletContext
- Servlet的init(ServletConfig config)中通过config.getServletContext();获得(一般不用)
- (HttpServlet对象中)this.getServletContext();
ServletContext作用
- 获得web应用全局的初始化参数
- 在web.xml中配置参数
- <context-param><param-name></param-name><param-value></param-value></context-param>
- spring框架的时候会用到
- 获得web应用中任何资源的绝对路径(==重要==)
- String getRealPath(相对于该web应用的相对地址):获得真实路径
- ServletContext是一个域对象(==重要==)
- 存储数据的区域就是域对象
- ServletContext的作用范围:整个web应用(所有的动态web资源都可以随意得向ServletContext中存取数据,数据可以共享)
- Servlet之间的数据传输(通信)
- 域对象通用的方法:
- setAttribute(name, value)
- getAttribute(name)
- removeAttribute(name)
//在读取src(classes) 下的资源是可以同类加载器----专门加载classes 下的文件的
//getResource() 参数是一个相对地址 相对classes
String path = ContextServlet.class.getClassLoader().getResource("c.txt").getPath();
System.out.println(path);
记录登陆人数
public class LoginServlet extends HttpServlet {
//在父类中init(ServletConfig config)内部提供了一个空的init()方法给我们自定义初始化调用
@Override
public void init() throws ServletException {
//在Seveltcontext域中存一个数据count
int count = 0;
this.getServletContext().setAttribute("count", count);
}
}
网友评论