/**Model1:jsp ---> 显示页面 业务逻辑javaBeanModel2jsp-->页面显示servlet -->业务逻辑javaBeanservlet:01.实现类servlet接口的类 就是 servlet ! 我们常认为的!02.就是一个servlet接口!实现servlet的三种方式01.实现Servlet接口02.继承GenericServlet03.继承 HttpServlet 常用的HttpServlet--》继承GenericServlet--》实现Servlet接口servlet的生命周期:1.客户端发送请求---》servlet2.根据用户的请求 查询对应的servlet3.加载servlet到内存中4.servlet实例化--》调用init()初始化servlet5.根据用户的请求方式,service()来派发到不同的方法处理(doGet(),doPost())6.服务器关闭,执行destroy()销毁servlet*/
sevlet的功能:
01.接收用户的请求 post get 文件上传 下载
02.处理请求 取得前台的值 调用后台service层的代码
03.返回响应 重定向 转发 错误界面
/* * 实现servlet的三种方式 * 01.实现Servlet接口 * 02.继承GenericServlet抽象类 * 03.继承HttpServlet抽象类 常用的方式 * * HttpServlet 继承 GenericServlet * GenericServlet 实现 Servlet 接口 * * * HttpServletRequest 继承了 ServletRequest * HttpServletResponse 继承了 ServletResponse */public class MyServlet extends HttpServlet { //常用的方式 @Override public void init(ServletConfig config) throws ServletException { System.out.println("初始化信息 Init 项目启动的时候不会初始化 " + "用户访问servlet的时候实例化 只被 执行一次"); } @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("派发器 用户每请求一次,就会执行一次,接收用户的请求时get还是post"); super.service(request, response); //必须是 调用 父类的service方法 否则 死循环! } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("这是一个DoGet请求 只要是get请求 每次都执行"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("这是一个DoPost请求 "); } @Override public void destroy() { System.out.println("关闭服务器的时候 销毁 destroy 只被 执行一次"); }}
myServlet cn.bdqn.servlet.MyServlet myServlet /myServlet index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>My JSP 'index.jsp' starting page
运行之后后台的输出结果
myServlet cn.bdqn.servlet.MyServlet myServlet /jsp/ index.jsp
myServlet cn.bdqn.servlet.MyServlet name 小黑 myServlet /MyServlet
@Override public void init(ServletConfig config) throws ServletException { String initParameter = config.getInitParameter("name"); System.out.println("初始化的参数是:"+initParameter); System.out.println("初始化信息 Init 项目启动的时候不会初始化 " + "用户访问servlet的时候实例化 只被 执行一次"); }
现在我们在MyServlet中可以访问初始化的参数了!
但是如果后续我又创建了其他的Servlet,我还想用到初始化参数,而且初始化参数都是一致的! 怎么办?难道在每个servlet节点下面都创建init-param吗?
不需要 我们只需要 配置 context-param节点
name 小黑
public class MyServlet2 extends HttpServlet { /* * ServletContext:多个servlet共享的资源! * 如果我们把每一个Servlet当成一个局部变量, * 那么ServletContext就是一个全局的! */ @Override public void init(ServletConfig config) throws ServletException { String initParameter = config.getServletContext().getInitParameter("name"); System.out.println("MyServlet2初始化的参数是:"+initParameter); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String initParameter =request.getServletContext().getInitParameter("name"); System.out.println("MyServlet2初始化的参数是:"+initParameter); System.out.println("这是一个DoGet请求 只要是get请求 每次都执行"); }}
@Override public void init(ServletConfig config) throws ServletException { String initParameter =config.getServletContext().getInitParameter("name"); System.out.println("MyServlet初始化的参数是:" + initParameter); System.out.println("MyServlet初始化信息 Init 项目启动的时候不会初始化 " + "用户访问servlet的时候实例化 只被 执行一次"); }
在浏览器中 分别输入两个servlet的地址,查看效果 都会获得初始化的参数