5、Servlet的使用

一、什么是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重写方法:doGetdoPost

 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容器退出的时候

 

posted @ 2016-09-09 09:13  陈泽俊  阅读(179)  评论(0编辑  收藏  举报