一、什么是Servlet:用于开发动态Web资源的的技术。使用Servlet可以读取来自用户端的数据,而实现了用户与服务器之间的动态数据交互。更简单的说就是连接页面和代码。
1、开发一个动态的Web资源,需要两个步骤:
a)、编写一个Java类,实现Servlet接口。
b)、把开发好的Java类部署到Web服务器中。
2、Service的配置:一般配置在web.xml文件中:
1 <servlet> 2 <!-- 设置Servlet的注册名 --> 3 <servlet-name>gfsjkh</servlet-name> 4 <!-- 设置Servlet的完整类名,即实现这个Servlet的类 --> 5 <servlet-class>com.st.servlet.UserServlet</servlet-class> 6 </servlet> 7 <servlet-mapping> 8 <!-- 与上面设置的Servlet的注册名保持一致 --> 9 <servlet-name>gfsjkh</servlet-name> 10 <!-- 设置Servlet的对外访问路径 --> 11 <url-pattern>/servlet/user</url-pattern> 12 </servlet-mapping>
【注】a)、同一个Servlet可以映射到多个url上去,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名
b)、Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是"*.扩展名",另一种格式是以正斜杠(/)开头并以"/*"结尾
对应的jsp页面内容为:
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <title>Servlet示例</title> 11 </head> 12 13 <body> 14 <form method="get" action="servlet/user"> 15 <table> 16 <tr> 17 <td><input type="text" id="userNameId" name ="userName" value="zhangsan"/></td> 18 </tr> 19 <tr> 20 <td><input type="text" id="userAgeId" name ="userAge" value="22"/></td> 21 </tr> 22 <tr> 23 <td><input type="submit" value="提交" /></td> 24 </tr> 25 </table> 26 </form> 27 28 29 </body> 30 31 </html>
3、Servlet接口实现类:GenericServlet、HttpServlet。
a)、HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。
因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不需要去覆写service方法。
b)、继承HttpServlet重写方法:doGet、doPost
1 /* 2 * 继承HttpServlet 3 */ 4 public class UserServlet extends HttpServlet{ 5 6 @Override 7 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 8 throws ServletException, IOException { 9 //获取jsp页面中标签的name标记为userName的标签的value值 10 System.out.println(req.getParameter("userName")); 11 //获取jsp页面中标签的name标记为userAge的标签的value值 12 System.out.println(req.getParameter("userAge")); 13 } 14 @Override 15 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 16 throws ServletException, IOException { 17 this.doGet(req, resp); 18 } 19 }
【注】
a)、通常情况下,客户端的多次Servlet请求,服务器只会创建一个Servlet实例对象,即Servlet实例对象一旦被创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。
b)、在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。
对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法。
4、Servlet的生命周期:
a)、实例化
b)、初始化 init()
c)、响应请求 service()
d)、销毁 destory() --Web容器退出的时候。