国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

java web學(xué)習(xí)筆記-Servlet篇

2019-11-14 23:26:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
java web學(xué)習(xí)筆記-Servlet篇Servlet基礎(chǔ)  1.Servlet概述

    jsp的前身就是Servlet。Servlet就是在服務(wù)器端運(yùn)行的一段小程序。一個(gè)Servlet就是一個(gè)Java類,并且可以通過(guò)“請(qǐng)求-響應(yīng)”編程模型來(lái)訪問(wèn)的這個(gè)駐留在服務(wù)器內(nèi)存的Servlet程序。

  2.Tomcat容器等級(jí)

    Tomcat的容器分為4個(gè)等級(jí),Servlet的容器管理Context容器,一個(gè)Context對(duì)應(yīng)一個(gè)Web工程。

  3.手工編寫第一個(gè)Servlet

    編寫一個(gè)Servlet程序大體上需要3個(gè)步驟:繼承HttpServlet-->重寫doGet()或者doPost()方法-->在web.xml中注冊(cè)Servlet。

    HttpServlet的繼承關(guān)系如圖:

    重寫doGet還是doPost方法需要根據(jù)請(qǐng)求方式而定。

  一、編寫一個(gè)類繼承自HttPRequest并重寫doGet(或者doPost方法)在項(xiàng)目的src目錄下新建一個(gè)servlet.MyServlet.java

 1 package servlet; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 /** 繼承自HttpServlet */12 public class HelloServlet extends HttpServlet {13 14     /** 重寫doGet方法 */15     @Override16     protected void doGet(HttpServletRequest request, HttpServletResponse response)17             throws ServletException, IOException {18         System.out.println("處理get請(qǐng)求。。。");19         PrintWriter out = response.getWriter();20         out.println("<b>HelloServlet</b>");21     }22 23     /** 重寫doPost方法 */24     @Override25     protected void doPost(HttpServletRequest request, HttpServletResponse response)26             throws ServletException, IOException {27         System.out.println("處理post請(qǐng)求。。。");28         PrintWriter out = response.getWriter();29         out.println("<b>HelloServlet</b>");30     }31     32 }

  二、在WEB-INF/web.xml中注冊(cè)剛剛新建的Servlet:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5"  3     xmlns="http://java.sun.com/xml/ns/javaee"  4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7   <display-name></display-name>     8   <welcome-file-list> 9     <welcome-file>index.jsp</welcome-file>10   </welcome-file-list>11   12   <!-- 注冊(cè)Servlet開(kāi)始 -->13   <servlet>14       <servlet-name>HelloServlet</servlet-name>15       <servlet-class>servlet.HelloServlet</servlet-class>16   </servlet>17   <servlet-mapping>18       <servlet-name>HelloServlet</servlet-name>19       <url-pattern>/servlet/HelloServlet</url-pattern>20   </servlet-mapping>21   <!-- 注冊(cè)Servlet結(jié)束 -->22   23 </web-app>

  其中servlet-name表示Servlet的名字,servlet-class要寫完成的類的定義(包名.類名),url-pattern表示Servlet的路徑。

  在index.jsp中使用自定義的Servlet處理get和post請(qǐng)求。

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4   <head> 5     <title>手工編寫的第一個(gè)Servlet</title> 6   </head> 7    8   <body> 9     <h1>第一個(gè)Servlet小例子</h1><hr>10     <a href="servlet/HelloServlet">get方式請(qǐng)求HelloServlet</a><br /><br />11     <form action="servlet/HelloServlet" method="post">12         <input type="submit" value="post方式請(qǐng)求HelloServlet" /> 13     </form>14   </body>15 </html>

 發(fā)布項(xiàng)目,運(yùn)行結(jié)果:

   一個(gè)Servlet可以在web.xml中配置多個(gè)映射,這樣就可以在URL中使用不同的名字訪問(wèn)相同的Servlet。如下所示:就可以使用給人以假象——好像使用的是asp或者php或者更多的語(yǔ)言。

 1 <!-- 注冊(cè)Servlet開(kāi)始 --> 2 <servlet> 3     <servlet-name>HelloServlet</servlet-name> 4     <servlet-class>servlet.HelloServlet</servlet-class> 5 </servlet> 6 <!-- 一個(gè)Servlet可以配置多個(gè)映射,向下面這樣配置就可以有多種方式訪問(wèn)Servlet了 --> 7 <servlet-mapping> 8   <servlet-name>HelloServlet</servlet-name> 9   <url-pattern>/servlet/HelloServlet</url-pattern>10 </servlet-mapping>11  <servlet-mapping>12   <servlet-name>HelloServlet</servlet-name>13   <url-pattern>/servlet/HelloServlet.asp</url-pattern>14 </servlet-mapping>15  <servlet-mapping>16   <servlet-name>HelloServlet</servlet-name>17   <url-pattern>/servlet/HelloServlet.php</url-pattern>18 </servlet-mapping>19  <servlet-mapping>20   <servlet-name>HelloServlet</servlet-name>21   <!-- *表示任意名稱均可 -->22   <url-pattern>/servlet/hello/*</url-pattern>23 </servlet-mapping>24 <!-- 注冊(cè)Servlet結(jié)束 -->

  4.使用MyEclipse編寫Servlet

      1.src-->new Servlet。

      2.重寫doGet()或者doPost()方法。  

      3.部署運(yùn)行。

   通過(guò)MyEclipse創(chuàng)建Servlet的時(shí)候它默認(rèn)繼承自HttpServlet。默認(rèn)勾選覆寫init()、destory()、doGet()和doPost()方法,并且自動(dòng)向web.xml中注冊(cè)該Servlet。

   可以發(fā)現(xiàn)使用MyEclipse創(chuàng)建的Servlet它已經(jīng)自動(dòng)為我們生成了輸出的html模板,我們只需要做很少的改動(dòng)即可。   

  5.Servlet的執(zhí)行流程和生命周期

    用戶點(diǎn)擊超鏈接向Servlet發(fā)送請(qǐng)求-->服務(wù)器在web.xml中的servlet-mapping尋找與該Servlet相對(duì)應(yīng)的URL地址-->找到對(duì)應(yīng)的Servlet名字-->根據(jù)Servlet的名字找到和該Servlet相關(guān)的處理類-->根據(jù)請(qǐng)求的方式不同確定是調(diào)用doGet還是doPost方法。

    一個(gè)Servlet的生命周期大致分為3個(gè)階段:

  

  1.客戶端發(fā)送請(qǐng)求給服務(wù)器。

  2.服務(wù)器開(kāi)始接受,先判斷該請(qǐng)求的servlet實(shí)例是否存在,如果不存在先裝載一個(gè)servlet類并創(chuàng)建實(shí)例。

   如果存在則直接調(diào)用該servlet的service方法,之后進(jìn)行判斷是調(diào)用 doGet方法還是doPost方法。

  3.servlet創(chuàng)建實(shí)例后,調(diào)用init方法進(jìn)行初始化。之后調(diào)用servce方法,判斷是調(diào)用doGet方法還是doPost方法。

  4.最后判斷服務(wù)器是否關(guān)閉,如果關(guān)閉則調(diào)用destroy方法。

  下面這個(gè)例子展示了Servlet的生命周期:

首先是一個(gè)Servlet:TestServlet1

 1 package servlet; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 public class TestServlet1 extends HttpServlet {12 13     public TestServlet1() {14         System.out.println("TestServlet1構(gòu)造方法被執(zhí)行!");15     }16 17     public void destroy() {18         System.out.println("TestServlet1銷毀方法被執(zhí)行!");19     }20 21     public void doGet(HttpServletRequest request, HttpServletResponse response)22             throws ServletException, IOException {23 24         System.out.println("TestServlet1的doGet方法被執(zhí)行!");25         response.setContentType("text/html;charset=utf-8");26         PrintWriter out = response.getWriter();27         out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");28         out.println("<HTML>");29         out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");30         out.println("  <BODY>");31         out.println("<h1>你好我是TestServlet1</h1>");32         out.println("  </BODY>");33         out.println("</HTML>");34         out.flush();35         out.close();36     }37 38     public void doPost(HttpServletRequest request, HttpServletResponse response)39             throws ServletException, IOException {40         System.out.println("TestServlet1的doPost方法被執(zhí)行!");41         doGet(request, response);// 讓doPost與doGet執(zhí)行相同的操作42     }43 44     public void init() throws ServletException {45         System.out.println("TestServlet1的初始化方法被執(zhí)行!");46     }47 48 }

    主頁(yè)index.jsp

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=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     <base href="<%=basePath%>">11     <title>Servlet的生命周期</title>12   </head>13   14   <body>15       <h1>Servlet的生命周期</h1><hr />16       <a href = "servlet/TestServlet1">以get方式請(qǐng)求TestServlet1</a>17   </body>18 </html>

  當(dāng)服務(wù)器啟動(dòng)之后我們第一次訪問(wèn)index.jsp的時(shí)候,構(gòu)造方法,初始化方法和doGet()方法執(zhí)行

    當(dāng)我們?cè)俅握?qǐng)求該頁(yè)面的時(shí)候,只有doGet()方法被執(zhí)行:

    服務(wù)器關(guān)閉的時(shí)候銷毀方法執(zhí)行。

 6.Tomcat裝載Servlet的3種情況

    在下列時(shí)刻Servlet容器會(huì)加載Servlet:

    1.Servlet容器啟動(dòng)時(shí)自動(dòng)裝載某些Servlet,實(shí)現(xiàn)它只需要在web.xml文件中的<servlet></servlet>之間添加以下代碼:

<load-on-startup>1</load-on-startup>

  其中,數(shù)字越小表示優(yōu)先級(jí)越高。

    例如:我們?cè)趙eb.xml中設(shè)置TestServlet2的優(yōu)先級(jí)為1,而TestServlet1的優(yōu)先級(jí)為2,啟動(dòng)和關(guān)閉Tomcat:

  優(yōu)先級(jí)高的先啟動(dòng)也先關(guān)閉。

    2.客戶端首次向某個(gè)Servlet發(fā)送請(qǐng)求。【例子詳見(jiàn)Servlet生命周期的那個(gè)例子】

    3.Servlet類被修改后,Tomcat容器會(huì)重新裝載Servlet。

    Servlet被裝載后,Servlet容器會(huì)創(chuàng)建一個(gè)Servlet實(shí)例,并且調(diào)用Servlet的init()方法進(jìn)行初始化,在Servlet的真?zhèn)€生命周期內(nèi)init()方法只被調(diào)用一次。

  7.Servlet與JSP內(nèi)置對(duì)象的對(duì)應(yīng)關(guān)系

  8.Servlet獲取表單數(shù)據(jù)

    用戶在reg.jsp中填寫注冊(cè)表單,使用post方式將數(shù)據(jù)發(fā)送到一個(gè)名稱為servlet.RegServlet的Servlet處理【Servlet的doPost()方法】,Servlet將用戶信息封裝成一個(gè)Users對(duì)象存儲(chǔ)在session中,講請(qǐng)求轉(zhuǎn)發(fā)到userinfo.jsp。在userinfo.jsp中通過(guò)<jsp:useBean>指令從session中取出保存的用戶對(duì)象,通過(guò)<jsp:getPerproty>指令顯示用戶對(duì)象的各個(gè)字段。

 1 package entity; 2  3 import java.util.Date; 4  5 /** 用戶實(shí)體類 */ 6 public class Users { 7     private String username; 8     private String passWord; 9     private String email;10     private String sex;11     private Date birthday;12     private String[] favorites;13     private String introduce; // 自我介紹14     private boolean flag; // 是否接受協(xié)議15 16     public Users() {17     }18 19     public String getUsername() {20         return username;21     }22 23     public void setUsername(String username) {24         this.username = username;25     }26 27     public String getPassword() {28         return password;29     }30 31     public void setPassword(String password) {32         this.password = password;33     }34 35     public String getEmail() {36         return email;37     }38 39     public void setEmail(String email) {40         this.email = email;41     }42 43     public String getSex() {44         return sex;45     }46 47     public void setSex(String sex) {48         this.sex = sex;49     }50 51     public Date getBirthday() {52         return birthday;53     }54 55     public void setBirthday(Date birthday) {56         this.birthday = birthday;57     }58 59     public String[] getFavorites() {60         return favorites;61     }62 63     public void setFavorites(String[] favorites) {64         this.favorites = favorites;65     }66 67     public String getIntroduce() {68         return introduce;69     }70 71     public void setIntroduce(String introduce) {72         this.introduce = introduce;73     }74 75     public boolean isFlag() {76         return flag;77     }78 79     public void setFlag(boolean flag) {80         this.flag = flag;81     }82 83 }
用戶實(shí)體entity.Users.java
 1 <%@ page language="java" import="java.util.*" contentType="text/html;charset=utf-8"%> 2  3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5   <head> 6     <title>用戶注冊(cè)</title> 7      <style type="text/CSS"> 8      .label{ 9           width: 20%    10      }11      .controler{12           width: 80%    13      }14      </style>  15      <script type="text/Javascript" src="js/Calendar3.js"></script>16   </head>17   18   <body>19        <h1>用戶注冊(cè)</h1>20     <hr>21     <form name="regForm" action="servlet/RegServlet" method="post" >22               <table border="0" width="800" cellspacing="0" cellpadding="0">23                 <tr>24                     <td class="lalel">用戶名:</td>25                     <td class="controler"><input type="text" name="username" /></td>26                 </tr>27                 <tr>28                     <td class="label">密碼:</td>29                     <td class="controler"><input type="password" name="password" ></td>30                     31                 </tr>32                 <tr>33                     <td class="label">確認(rèn)密碼:</td>34                     <td class="controler"><input type="password" name="confirmpass" ></td>35                     36                 </tr>37                 <tr>38                     <td class="label">電子郵箱:</td>39                     <td class="controler"><input type="text" name="email" ></td>40                     41                 </tr>42                 <tr>43                     <td class="label">性別:</td>44                     <td class="controler"><input type="radio" name="sex" checked="checked" value="Male">男<input type="radio" name="sex" value="Female">女</td>45                 </tr>46                47                 <tr>48                     <td class="label">出生日期:</td>49                     <td class="controler">50                       <input name="birthday" type="text" id="control_date" size="10"51                       maxlength="10" onclick="new Calendar().show(this);" readonly="readonly" />52                     </td>53                 </tr>54                 <tr>55                     <td class="label">愛(ài)好:</td>56                     <td class="controler">57                     <input type="checkbox" name="favorite" value="nba"> NBA &nbsp;58                       <input type="checkbox" name="favorite" value="music"> 音樂(lè) &nbsp;59                       <input type="checkbox" name="favorite" value="movie"> 電影 &nbsp;60                       <input type="checkbox" name="favorite" value="internet"> 上網(wǎng) &nbsp;61                     </td>62                 </tr>63                 <tr>64                     <td class="label">自我介紹:</td>65                     <td class="controler">66                         <textarea name="introduce" rows="10" cols="40"></textarea>67                     </td>68                 </tr>69                 <tr>70                     <td class="label">接受協(xié)議:</td>71                     <td class="controler">72                         <input type="checkbox" name="isAccept" value="true">是否接受霸王條款73                     </td>74                 </tr>75                 <tr>76                     <td colspan="2" align="center">77                         <input type="submit" value="注冊(cè)"/>&nbsp;&nbsp;78                         <input type="reset" value="取消"/>&nbsp;&nbsp;79                     </td>80                 </tr>81               </table>82     </form>83   </body>84 </html>
注冊(cè)頁(yè)reg.jsp
 1 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8"%> 2 <%@ page import="entity.Users" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5   <head> 6     <title>用戶信息顯示</title> 7     <style type="text/css"> 8      .title{ 9          width: 30%;    10          background-color: #CCC;11          font-weight: bold;12      }13      .content{14          width:70%;15          background-color: #CBCFE5;16      }17      18    </style>  19   </head>20   21   <body>22     <h1>用戶信息</h1>23     <hr>24     <center>25      <jsp:useBean  id="regUser" class="entity.Users" scope="session"/>   26      <table width="600" cellpadding="0" cellspacing="0" border="1">27         <tr>28           <td class="title">用戶名:</td>29           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="username"/></td>30         </tr>31         <tr>32           <td class="title">密碼:</td>33           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="password"/></td>34         </tr>35         <tr>36           <td class="title">性別:</td>37           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="sex"/></td>38         </tr>39         <tr>40           <td class="title">E-mail:</td>41           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="email"/></td>42         </tr>43         <tr>44           <td class="title">出生日期:</td>45           <td class="content">&nbsp;46             <% 47                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");48                String date = sdf.format(regUser.getBirthday());49             %>50              <%=date%>51           </td>52         </tr>53         <tr>54           <td class="title">愛(ài)好:</td>55           <td class="content">&nbsp;56             <% 57                String[] favorites = regUser.getFavorites();58                if(favorites!=null){59                    for(String f:favorites)60                    {61                 %>62                     <%=f%> &nbsp;&nbsp;63                 <% 64                    }65                }66             %>67           </td>68         </tr>69         <tr>70           <td class="title">自我介紹:</td>71           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="introduce"/></td>72         </tr>73         <tr>74           <td class="title">是否介紹協(xié)議:</td>75           <td class="content">&nbsp;<jsp:getProperty name="regUser" property="flag"/></td>76         </tr>77      </table>78     </center>79   </body>80 </html>
用戶信息顯示頁(yè)userinfo.jsp
 1 package servlet; 2  3 import java.io.IOException; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7  8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet;10 import javax.servlet.http.HttpServletRequest;11 import javax.servlet.http.HttpServletResponse;12 13 import entity.Users;14 15 public class RegServlet extends HttpServlet {16 17     public RegServlet() {18         super();19     }20 21     public void destroy() {22         super.destroy(); // Just puts "destroy" string in log23     }24 25     public void doGet(HttpServletRequest request, HttpServletResponse response)26             throws ServletException, IOException {27 28         doPost(request, response);//因?yàn)楸韱问莗ost方式提交的29     }30 31     public void doPost(HttpServletRequest request, HttpServletResponse response)32             throws ServletException, IOException {33 34         request.setCharacterEncoding("utf-8");35         36         Users u = new Users();37         String username,password,email,introduce,sex,isAccept;38         Date birthday;39         String[]favorites;40         41         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");42         43         try {44             45             username = request.getParameter("username");46             password = request.getParameter("password");47             sex = request.getParameter("sex");48             email = request.getParameter("email");49             introduce = request.getParameter("introduce");50 51             if (request.getParameter("birthday")!=null&&request.getParameter("birthday").length()!=0) {52                 birthday = sdf.parse(request.getParameter("birthday"));53             }else {54                 birthday = new Date();55             }56             57             favorites = request.getParameterValues("favorite");//getParamterValues返回字符串?dāng)?shù)組58             isAccept = request.getParameter("isAccept");59             60             u.setUsername(username);61             u.setPassword(password);62             u.setEmail(email);63             u.setBirthday(new Date());64             u.setIntroduce(introduce);65             u.setFavorites(favorites);66             u.setSex(sex);67             u.setFlag(isAccept!=null&&isAccept.equals("true")?true:false);68             69             //把注冊(cè)成功的用戶對(duì)象保存在session中70             request.getSession().setAttribute("regUser", u);71             72             request.getRequestDispatcher("../userinfo.jsp").forward(request, response);73         } catch (ParseException e) {74             e.printStackTrace();75         }76     }77 78     public void init() throws ServletException {79     }80 81 }
處理用戶注冊(cè)的Servlet:RegServlet

  9.Servlet路徑跳轉(zhuǎn)

    相對(duì)路徑就是相對(duì)于當(dāng)前頁(yè)面的路徑,絕對(duì)路徑就是相對(duì)于項(xiàng)目根目錄的路徑(絕對(duì)路徑需要使用到path變量)。

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=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     <base href="<%=basePath%>">11     <title>Servlet路徑跳轉(zhuǎn)</title>12   </head>13   14   <body>15     <h1>Servlet路徑跳轉(zhuǎn)</h1>16     <!-- 使用相對(duì)路徑訪問(wèn)HelloServlet -->17     <a href="servlet/HelloServlet">使用相對(duì)路徑訪問(wèn)servlet</a><br />18     19     <!-- 使用絕對(duì)路徑訪問(wèn)HelloServlet,使用path變量 -->20     項(xiàng)目的根目錄:<%=path %><br />21     <a href="<%=path %>/servlet/HelloServlet">使用相對(duì)路徑訪問(wèn)servlet</a><br />22   </body>23 </html>

  在web.xml中注冊(cè)的Servlet的路徑寫法是絕對(duì)路徑:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5"  3     xmlns="http://java.sun.com/xml/ns/javaee"  4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7   <display-name></display-name> 8    9   <!-- Servlet注冊(cè)開(kāi)始 -->10   <servlet>11     <description>This is the description of my J2EE component</description>12     <display-name>This is the display name of my J2EE component</display-name>13     <servlet-name>HelloServlet</servlet-name>14     <servlet-class>servlet.HelloServlet</servlet-class>15   </servlet>16   <servlet-mapping>17     <servlet-name>HelloServlet</servlet-name>18     <url-pattern>/servlet/HelloServlet</url-pattern><!-- Servlet的路徑是絕對(duì)路徑 -->19   </servlet-mapping>20   <!-- Servlet注冊(cè)結(jié)束 -->21       22   <welcome-file-list>23     <welcome-file>index.jsp</welcome-file>24   </welcome-file-list>25 </web-app>
  在Servlet之中路徑的跳轉(zhuǎn)問(wèn)題:

    index.jsp中有一個(gè)鏈接指向servlet.TestServlet

<a href="servlet/TestServlet">訪問(wèn)TestServlet,跳轉(zhuǎn)到Test.jsp</a>

    servlet.TestServlet的doPost()和doGet()方法如下:

 1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3  4             doPost(request, response); 5     } 6  7     public void doPost(HttpServletRequest request, HttpServletResponse response) 8             throws ServletException, IOException { 9         // 1.使用請(qǐng)求重定向的方式跳轉(zhuǎn)到test.jsp10 //        response.sendRedirect("../test.jsp");11         // 也可以使用絕對(duì)路徑的方式request.getContextPath12 //        response.sendRedirect(request.getContextPath()+"/test.jsp");13         14         // 2.使用服務(wù)器內(nèi)部跳轉(zhuǎn)的方式15 //        request.getRequestDispatcher("../test.jsp").forward(request, response);16         request.getRequestDispatcher("/test.jsp").forward(request, response);17     }

  在TestServlet中完成到網(wǎng)站根目錄下的跳轉(zhuǎn)有兩種方式重定向和服務(wù)器內(nèi)部轉(zhuǎn)發(fā),其中URL的寫法也有2種方式:絕對(duì)路徑和相對(duì)路徑。相對(duì)路徑使用..即可,而絕對(duì)路徑重定向需要依賴request.getContextPath()方法取得上下文環(huán)境,而服務(wù)器內(nèi)部轉(zhuǎn)發(fā)中的斜線就表示項(xiàng)目的根目錄。

  開(kāi)發(fā)中一般在web.xml中配置Servlet的路徑為表單所在路徑,這樣在表單中只需要書寫Servlet名字即可。在開(kāi)發(fā)中應(yīng)該盡量避免../的寫法。

  10.階段案例——使用Servlet完成用戶登錄

用戶名和密碼都是admin,登陸成功則使用服務(wù)器內(nèi)部轉(zhuǎn)發(fā)到login_success.jsp,顯示登錄成功的用戶名。登錄失敗則重定向到login_failure.jsp。

  把login.jsp中表單的action屬性改為需要處理登錄的Servlet

1 <form action="servlet/LoginServlet" method="post" name="loginForm">2     <!-- 代碼省略 -->3 </form>
 1 package org.po; 2  3 /** 4  * 用戶類-javabean 5  */ 6 public class Users { 7     private String username; 8     private String password; 9 10     public Users() {11     }12 13     public String getUsername() {14         return username;15     }16 17     public void setUsername(String username) {18         this.username = username;19     }20 21     public String getPassword() {22         return password;23     }24 25     public void setPassword(String password) {26         this.password = password;27     }28 29 }
用戶實(shí)體類org.po.Users
 1 public void doGet(HttpServletRequest request, HttpServletResponse response) 2             throws ServletException, IOException { 3  4         doPost(request, response); 5     } 6  7     public void doPost(HttpServletRequest request, HttpServletResponse response) 8             throws ServletException, IOException { 9 10         Users u = new Users();11         String username = request.getParameter("username");12         String password = request.getParameter("password");13         u.setUsername(username);14         u.setPassword(password);15         16         if (u.getUsername().equals("admin")&&u.getPassword().equals("admin")) {17             request.getSession().setAttribute("username", username);18             request.getRequestDispatcher("/login_success.jsp").forward(request, response);19         }else {20             response.sendRedirect("../login_failure.jsp");21         }22     }
處理用戶登錄的LoginServlet

Servlet高級(jí)  1.獲取初始化參數(shù)

    在web.xml中配置Servlet時(shí),可以配置一些初始化參數(shù)。而在Servlet中可以通過(guò)ServletConfig接口提供的方法來(lái)取得這些參數(shù)。

    1.首先在index.jsp中建立一條超鏈接指向servlet.GetInitParameterServlet。

<a href = "servlet/GetInitParameterServlet">獲取Servlet的初始化參數(shù)</a>

    2.在web.xml中配置該Servlet的初始化參數(shù):

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5"  3     xmlns="http://java.sun.com/xml/ns/javaee"  4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7   <display-name></display-name> 8    9   <!-- 注冊(cè)Servlet開(kāi)始 -->10   <servlet>11     <description>This is the description of my J2EE component</description>12     <display-name>This is the display name of my J2EE component</display-name>13     <servlet-name>GetInitParameterServlet</servlet-name>14     <servlet-class>servlet.GetInitParameterServlet</servlet-class>15     16     <!-- 配置用戶名初始化參數(shù) -->17     <init-param>18         <param-name>username</param-name>19         <param-value>admin</param-value>20     </init-param>21     <!-- 配置密碼初始化參數(shù) -->22     <init-param>23         <param-name>password</param-name>24         <param-value>123456</param-value>25     </init-param>26     27   </servlet>28   <!-- 注冊(cè)Servlet結(jié)束 -->29 30   <servlet-mapping>31     <servlet-name>GetInitParameterServlet</servlet-name>32     <url-pattern>/servlet/GetInitParameterServlet</url-pattern>33   </servlet-mapping>    34   <welcome-file-list>35     <welcome-file>index.jsp</welcome-file>36   </welcome-file-list>37 </web-app>
web.xml

    3.在GetInitParameterServlet的init方法中使用this.getgetInitParameter(String name)方法獲得初始化參數(shù):

 1 package servlet; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5  6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse;10 11 public class GetInitParameterServlet extends HttpServlet {12     /* 封裝屬性 */13     private String username ;14     private String password ;15     16     public String getUsername() {17         return username;18     }19     20     public void setUsername(String username) {21         this.username = username;22     }23 24     public String getPassword() {25         return password;26     }27 28     public void setPassword(String password) {29         this.password = password;30     }31 32     public GetInitParameterServlet() {33         super();34     }35 36     public void destroy() {37         super.destroy(); // Just puts "destroy" string in log38     }39 40     public void doGet(HttpServletRequest request, HttpServletResponse response)41             throws ServletException, IOException {42 43         doPost(request, response);44
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邢台市| 哈尔滨市| 新干县| 新郑市| 萍乡市| 西乡县| 阿荣旗| 庆云县| 云浮市| 龙口市| 噶尔县| 嘉鱼县| 临澧县| 金山区| 台南市| 平舆县| 偏关县| 博白县| 荃湾区| 横峰县| 昌宁县| 澎湖县| 济宁市| 宽甸| 海城市| 青冈县| 乳山市| 丰顺县| 镇沅| 合川市| 郴州市| 运城市| 桂林市| 阳谷县| 昌平区| 宁国市| 乐平市| 永济市| 阿坝县| 长寿区| 宜兴市|