1. 掌握Web應(yīng)用程序的DD文件web.xml的配置方法和作用;

2. 掌握如何通過ServletConfig獲取Servlet的初始化參數(shù);

3. 掌握ServletContext的概念,如何獲得ServletContext對" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Java Web實驗報告:Servlet容器模型

Java Web實驗報告:Servlet容器模型

時間:2023-10-06 17:30:02 | 來源:網(wǎng)站運(yùn)營

時間:2023-10-06 17:30:02 來源:網(wǎng)站運(yùn)營

Java Web實驗報告:Servlet容器模型:一、實驗?zāi)康?/b>

1. 掌握Web應(yīng)用程序的DD文件web.xml的配置方法和作用;

2. 掌握如何通過ServletConfig獲取Servlet的初始化參數(shù);

3. 掌握ServletContext的概念,如何獲得ServletContext對象;

4. 掌握如何通過RequestDispatcher轉(zhuǎn)發(fā)請求。

二、實驗原理

Web應(yīng)用程序有嚴(yán)格定義的目錄結(jié)構(gòu),它需要一個稱為部署描述文件的文件web.xml來配置。對應(yīng)用程序的每個Servlet,可以在web.xml中定義若干個初始化參數(shù),然后通過ServletConfig對象獲取這些參數(shù)。

ServletContext對象表示該應(yīng)用程序的環(huán)境,通過該對象可以獲得應(yīng)用程序范圍的初始化參數(shù)、容器版本信息、資源的URL、在其中存放共享數(shù)據(jù)以及登錄日志等。

三、實驗內(nèi)容與步驟

(一)建立一個名為bookstore的Web應(yīng)用程序

在Tomcat的webapps目錄下,建立一個如下所示的目錄結(jié)構(gòu):

|- bookstore

|- html (包含所有的HTML文件)

|- jsp (包含所有的JSP文件)

|- images (包含所有的GIF、JPEG和BMP圖象文件)

|- index.html (默認(rèn)的HTML文件)

|- WEB-INF

|-classes

├ lib

├ web.xml

圖4.1 bookstore應(yīng)用程序的目錄結(jié)構(gòu)

這樣就建立了一個名為bookstore的Web應(yīng)用程序,本實驗后面的題目都在該應(yīng)用程序下面完成。

(二)使用ServletConfig檢索Servlet的初始化參數(shù)

【步驟1】編寫ConfigDemoServlet程序,內(nèi)容如下:

package com.demo;import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;public class ConfigDemoServlet extends HttpServlet{String servletName=null;ServletConfig config=null;String email=null;String telephone=null;public void init() {config = getServletConfig();servletName = config.getServletName();email = config.getInitParameter("email");telephone = config.getInitParameter("telephone");}public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("Servlet名稱:"+servletName+"<br>"); out.println("Email地址:"+email+"<br>"); out.println("電話:"+telephone); out.println("</body></html>");}}【步驟2】修改web.xml文件,在其中添加下面Servlet定義和初始化參數(shù)定義

<servlet> <servlet-name>ConfigDemoServlet</servlet-name> <servlet-class>Com.demo.ConfigDemoServlet</servlet-class> <init-param> <param-name>email</param-name> <param-value>XXXXXXX@qq.com</param-value> </init-param> <init-param> <param-name>telephone</param-name> <param-value>123456</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ConfigDemoServlet</servlet-name> <url-pattern>/configDemo.do</url-pattern> </servlet-mapping>【步驟3】在瀏覽器的地址欄中輸入下面URL訪問該Servlet:

http://localhost:8080/bookstore/configDemo.do (uRL得看web.xml中的servlet-mapping)

程序運(yùn)行結(jié)果如下圖所示:

(三)ServletContext的使用

修改上面程序,將email地址和電話使用ServletContext初始化參數(shù)傳遞給ConfigDemoServlet。使用ServletContext對象將email地址和電話信息寫入日志文件中,并查看日志文件。

將之前的注釋掉,在<web-app>標(biāo)簽內(nèi)加入:

<context-param> <param-name>email</param-name> <param-value>1623093551@qq.com</param-value> </context-param> <context-param> <param-name>telephone</param-name> <param-value>1008611</param-value> </context-param>在servlet文件中修改:

運(yùn)行結(jié)果:

在servlet中加入:

getServletContext().log("Servlet名稱:"+servletName);

getServletContext().log("Email地址:"+email);

getServletContext().log("電話:"+telephone);

運(yùn)行結(jié)果:

四)下面是一個Servlet,它可以獲得有關(guān)服務(wù)器的信息。

package com.demo;import java.io.*;import java.util.*;import javax.servlet.*;public class ServerInfo extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GB2312"); PrintWriter out = response.getWriter(); ServletContext sc = getServletContext(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>獲取服務(wù)器端信息</title>"); out.println("</head>"); out.println("<body>"); out.println("<h2>服務(wù)器端信息:</h2>"); out.println("<table width=/"500/" border=/"1/">"); out.println("<tr>"); out.println("<td width=/"175/">站點名</td>"); out.println("<td width=/"325/">" + request.getServerName() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>端口號</td>"); out.println("<td>" + request.getServerPort() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>服務(wù)器類型</td>"); out.println("<td>" + sc.getServerInfo() + "</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>支持Servlet版本</td>"); out.println("<td>"+sc.getMajorVersion()+"."+sc.getMinorVersion()+"</td>"); out.println("</tr>"); out.println("<tr>"); out.println("<td>服務(wù)器屬性</td>"); out.println("<td>"); // 獲得服務(wù)器屬性集合 Enumeration attributes = sc.getAttributeNames(); while (attributes.hasMoreElements()) { String name = (String)attributes.nextElement(); out.println(name); } out.println("</td>"); out.println("</tr>"); out.println("</table>"); out.println("</body>"); out.println("</html>"); }}運(yùn)行結(jié)果:

(五)簡單的綜合應(yīng)用

【步驟1】創(chuàng)建一個名為input.html的HTML頁面,其中包括一個表單,表單中包含兩個文本域,分別供用戶輸入學(xué)號和姓名,該頁面也包含提交和重置按鈕。

【步驟2】定義一個名為com.demo.Student類,其中包括學(xué)號sno和姓名name兩個private的成員變量,定義訪問和修改sno和name的方法。

【步驟3】編寫名為FirstServlet的Servlet,要求當(dāng)用戶在input.html中輸入信息后點擊“提交”按鈕,請求FirstServlet對其處理。在FirstServlet中使用表單傳遞的參數(shù)(學(xué)號和姓名)創(chuàng)建一個Student對象并將其作為屬性存儲在ServletContext對象中,然后獲得通過ServletContext的getRequestDispatcher()方法獲得RequestDispatcher()對象,將請求轉(zhuǎn)發(fā)到SecondServlet。

【步驟4】在SecondServlet中取出ServletContext上存儲的Student對象,并顯示輸出該學(xué)生的學(xué)號和姓名。在SecondServlet的輸出中應(yīng)該包含一個超鏈接,點擊該連接可以返回input.html頁面。

步驟1:創(chuàng)建javaweb項目Application,在項目中創(chuàng)建input.html文件。

<html> <head> <title>User Information</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <h1>用戶信息</h1> <form action="FirstServlet" method="post"> <p>學(xué)號:<input type="text" name="stu_id" /></p> <p>姓名:<input type="text" name="stu_name" /></p> <input type="submit" name="sub" value="提交"/> <input type="reset" name="button" value="重置"/> </form> </body></html>運(yùn)行結(jié)果:

步驟2:定義Student類

package com.demo.Student;public class Student { private String sno; //學(xué)號 private String name; //姓名 //訪問學(xué)號 public String get_sno() { return sno; } //訪問姓名 public String get_name() { return name; } //修改學(xué)號 public void set_sno(String v_sno) { this.sno=v_sno; }//修改姓名 public void set_name(String v_name) { this.name=v_name; }}步驟三:

FirstServlet中的doPost方法:

FirstServlet代碼:

package com.demo.Student;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.annotation.WebServlet;import javax.servlet.RequestDispatcher;@WebServlet(name="FirstServlet",urlPatterns={"/FirstServlet"})public class FirstServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet FirstServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet FirstServlet at " + request.getContextPath() + "</h1>"); out.println("</body>"); out.println("</html>"); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("GB2312"); PrintWriter out = response.getWriter(); String stu_id=request.getParameter("stu_id"); String stu_name=request.getParameter("stu_name"); out.println("hello!"); Student stu=new Student(); stu.set_sno(stu_id); stu.set_name(stu_name); this.getServletContext().setAttribute("stu_id", stu.get_sno()); this.getServletContext().setAttribute("stu_name",stu.get_name()); RequestDispatcher report=request.getRequestDispatcher("/SecondServlet"); report.forward(request, response); } @Override public String getServletInfo() { return "Short description"; }// </editor-fold>}SecondServlet中的doGet方法

SecondServlet 代碼:

package com.demo.Student;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name = "SecondServlet", urlPatterns = {"/SecondServlet"})public class SecondServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet SecondServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet SecondServlet at " + request.getContextPath() + "</h1>"); out.println("</body>"); out.println("</html>"); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset = UTF-8"); PrintWriter out = response.getWriter(); Object stu_id=getServletContext().getAttribute("stu_id"); Object stu_name=getServletContext().getAttribute("stu_name"); out.println("學(xué)號:"+stu_id+"/n"); out.println("姓名:"+stu_name);out.println("<a href='E:/Javaweb/Application/build/web/input.html'>返回</a>"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } @Override public String getServletInfo() { return "Short description"; }// </editor-fold>}
圖4.2 input.html頁面顯示結(jié)果
圖4.3 SecondServlet顯示結(jié)果
四、思考題

1. 如何通過ServletConfig獲得Servlet參數(shù)?

通過ServletConfig 接口中的方法獲取參數(shù),通過getServletName()獲取Servlet 的實

例名,通過getInitParameter(“name”)獲取name 的初始化參數(shù)。

2. 如何獲得ServletContext對象,如何通過該對象獲得上下文參數(shù)?

Servlet 容器在初始化Servlet 時向其傳入一個ServletConfig 對象,通過該對象的

getServletContext()方法得到ServletContext 對象,從而獲得上下文參數(shù)。

3. 如何使用ServletContext共享數(shù)據(jù)?

首先將數(shù)據(jù)作為屬性通過setAttribute("name",name)方法存入ServletContext 對象中,

然后如果在其他地方使用,則需要從ServletContext 對象中通過getAttribute("name")方法取

出。

關(guān)鍵詞:容器,模型,報告,實驗

74
73
25
news
  • 網(wǎng)站
  • 營銷
  • 設(shè)計
  • 運(yùn)營
  • 優(yōu)化
  • 效率
  • 專注
  • 電商
  • 方案
  • 推廣
為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉