目录
6.1 servlet的部署、创建与运行:
-
6.1.1 源文件及字节码文件:
- servlet是一种特殊的Java类,它需要遵循一些规范和接口,才能被Web容器识别和运行。servlet源文件需要编译为字节码文件,并保存在Web应用的
WEB-INF/classes
目录下或者打包为JAR文件并保存在WEB-INF/lib
目录下。 -
6.1.2 编写部署文件web.xml:
- servlet需要在Web应用的部署文件
web.xml
中进行配置,才能被Web容器识别和运行。例如,下面是一个简单的servlet配置:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
-
6.1.3 servlet的创建与运行:
- 当Web容器接收到一个匹配servlet配置的请求时,它会根据配置信息创建一个对应的servlet实例,并调用其生命周期方法来处理请求。
-
6.1.4 向servlet传递参数的值:
- 可以在请求URL中添加查询参数,或者在请求体中提交表单数据,来向servlet传递参数的值。例如:
http://localhost:8080/hello?name=Bing
6.2 servlet的工作原理:
-
6.2.1 servlet对象的生命周期:
- servlet对象有一个完整的生命周期,包括初始化、服务和销毁三个阶段。Web容器会根据请求情况自动管理servlet对象的生命周期。
-
6.2.2 init方法:
- 当Web容器第一次创建一个servlet实例时,会调用其
init()
方法来进行初始化。该方法只会被调用一次。 -
6.2.3 service方法:
- 当Web容器接收到一个匹配servlet配置的请求时,会调用其
service()
方法来处理请求。该方法可以被多次调用。 -
6.2.4 destroy方法:
- 当Web容器决定销毁一个servlet实例时,会调用其
destroy()
方法来进行清理。该方法只会被调用一次。
6.3 通过JSP页面访问servlet:
可以在JSP页面中使用表单或超链接等方式来向servlet发送请求。例如:
<form action="/hello" method="post">
<input type="text" name="name" />
<input type="submit" value="Submit" />
</form>
6.4 共享变量:
可以使用request、session或application对象来在不同组件之间共享变量。例如:
request.setAttribute("name", "Bing");
String name = (String) request.getAttribute("name");
6.5 doGet和doPost方法:
下面是一个简单的servlet例子,它重写了doGet()
和doPost()
方法来分别处理GET和POST请求。
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello, GET!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("Hello, POST!");
}
}
6.6 重定向与转发:
下面是一个简单的servlet例子,它演示了如何使用sendRedirect()
方法来实现重定向,以及如何使用getRequestDispatcher().forward()
方法来实现转发。
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 重定向到另一个servlet
response.sendRedirect("/another");
// 转发到另一个servlet
request.getRequestDispatcher("/another").forward(request, response);
}
}
6.7 使用session:
下面是一个简单的servlet例子,它演示了如何使用getSession()
方法来获取session对象,并使用其相关方法来存储和访问会话数据。
public class SessionServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Integer count = (Integer) session.getAttribute("count");
if (count == null) {
count = 1;
} else {
count++;
}
session.setAttribute("count", count);
response.getWriter().println("Count: " + count);
}
}