Servlet
隐式对象 | 说明 |
---|---|
response | request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对 象代表了客户端的请求信息,主要用于接受通过 HTTP 协议传送到服务器的数据。 |
response | response 代表的是对客户端的响应,主要是将 JSP 容器处理过的对象传回 到客户端。response 对象也具有作用域,它只在 JSP 页面内有效。 |
session | session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个 用户都生成一个 session 对象,用于保存该用户的信息,跟踪用户的操作状态。 |
session | session 对象内部使用 Map 类来保存数据,因此保存数据的格式为 “Key/value”。 session 对象的 value 可以是复杂的对象类型,而不仅仅局限于字 符串类型 |
application | application 对象可将信息保存在服务器中,直到服务器关闭,否则 application 对象中保存的信息会在整个应用中都有效。与 session 对象相比,application 对象生命周期更长,类似于系统的“全局 变量”。 |
out | out 对象用于在 Web 浏览器内输出信息,并且管理应用服务器上的输出缓 冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲 区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输 出流。 |
pageContext | pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP 页面的 out. request. reponse. session. application 等对象。pageContext 对象的创建和初始化都是由容器来完成的,在 JSP 页面中可 以直接使用 pageContext 对象。 |
config | config 对象的主要作用是取得服务器的配置信息。通过 pageConext 对象 的 getServletConfig() 方法可以获取一个 config 对象。当一个 Servlet 初始化时,容器把某些信息通过 config 对象传递给这个 Servlet。开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页 面提供初始化参数。 |
page | page 对象代表 JSP 本身,只有在 JSP 页面内才是合法的。 page 隐含对 象本质上包含当前 Servlet 接口引用的变量,类似于 Java 编程中的 this 指针。 |
exception | exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的 JSP 页面中使用该对象将无法编译 JSP 文件 |
实现Servlet的配置和部署
<!-- 用户登录页面数据servlet -->
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.zking.servlet.LoginServlet</servlet-class>
</servlet>
<!-- 配置映射 -->
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/loginServlet.do</url-pattern>
</servlet-mapping>
实现Servlet处理用户请求
public class DelAdminServlet extends HttpServlet{ // 重要:继承HttpServlet类 或者实现ServletConfig接口
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); // 设置编码
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
// 以下代码处理用户请求
int nid = Integer.parseInt(req.getParameter("nid"));
String uname = req.getParameter("uname");
//调用删除的方法
int i = 0;
try {
i = new NewsDao().delete(nid);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (i > 0) {
req.getRequestDispatcher("admin/admin.jsp?uname="+uname).forward(req, resp);
}else {
out.print("<script>alert('删除失败');location.href="+req.getContextPath()+"'/admin/admin.jsp';</script>");
}
}
Servlet生命周期
servlet的生命周期就是从servlet出现到销毁的全过程。主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁
服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法init(ServletConfig conf),该servlet对象去处理所有客户端请求,service(ServletRequest req,ServletResponse res)
方法中执行,最后服务器关闭时,才会销毁这个servlet对象,执行**destroy()**方法。其中加载阶段无法观察,但是初始化、服务、销毁阶段是可以观察到的。
public class EmpServlet extends HttpServlet{
//初始化servlet,调用init方法
@Override
public void init() throws ServletException {
System.out.println("初始化时调用");
}
//开启服务
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
System.out.println("开启服务时调用");
}
@Override
protected void doGet(**加粗样式**HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
//销毁时调用destory
@Override
public void destroy() {
System.out.println("销毁时调用");
}
}
Servlet的生命周期分为:加载阶段、实例化阶段、初始化阶段、服务阶段、销毁阶段。上面我们说了servlet默认是第一次被访问的时候初始化的,这种情况当用户要使用的时候才创建,也可以在服务器一启动的时候就创建好servlet(这种方式一般不用),要实现这样的操作需要进行配置,在web.xml中进行配置