מדריך להערות בנושא Java EE

1. סקירה כללית

ביאורי Java EE מקלים על חיי המפתחים בכך שהם מאפשרים להם לציין כיצד רכיבי היישום צריכים להתנהג במיכל. אלו חלופות מודרניות לתיאורי XML ובעצם, מאפשרים להימנע מקוד הדוד.

במאמר זה נתמקד בהערות שהוצגו עם Servlet API 3.1 ב- Java EE 7. נבדוק את מטרתן ונבחן את השימוש בהן.

2. הערות באינטרנט

Servlet API 3.1 הציג קבוצה חדשה של סוגי הערות שניתן להשתמש בהם סרוולט שיעורים:

  • @WebServlet
  • @WebInitParam
  • @WebFilter
  • @WebListener
  • @ServletSecurity
  • @HttpConstraint
  • @HttpMethodConstraint
  • @MultipartConfig

נבחן אותם בפירוט בסעיפים הבאים.

3. @WebServlet

במילים פשוטות, ביאור זה מאפשר לנו להכריז על שיעורי Java כ- servlets:

@WebServlet ("/ account") מחלקה ציבורית AccountServlet מרחיב את javax.servlet.http.HttpServlet {public void doGet (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק IOException {// ...} מבט ריק ציבורי doPost (HttpServletRequest), Http IOException {// ...}}

3.1. שימוש בתכונות של @WebServlet ביאור

@WebServlet יש קבוצה של תכונות המאפשרות לנו להתאים אישית את ה- servlet:

  • שֵׁם
  • תיאור
  • urlPatterns
  • initParams

אנו יכולים להשתמש בהם כפי שמוצג בדוגמה הבאה:

@WebServlet (name = "BankAccountServlet", תיאור = "מייצג חשבון בנק והעסקאות שלו", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " חסכון ")}) מחלקה ציבורית AccountServlet מרחיב את javax.servlet.http.HttpServlet {String accountType = null; init חלל ציבורי (ServletConfig config) זורק ServletException {// ...} public void doGet (HttpServletRequest request, HttpServletResponse response) זורק IOException {// ...} public void doPost (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק IO ...}}

ה שֵׁם מאפיין עוקף את שם ברירת המחדל של סרוולט שהוא שם המחלקה המוסמך לחלוטין כברירת מחדל. אם אנו רוצים לספק תיאור של מה ש- servlet עושה, אנו יכולים להשתמש ב- תיאור תְכוּנָה.

ה urlPatterns התכונה משמשת כדי לציין את כתובות האתר בהן ה- servlet זמין (ניתן לספק מספר מאפיינים לתכונה זו כפי שמוצג בדוגמת הקוד).

4. @WebInitParam

הערה זו משמשת עם initParams תכונה של @WebServlet ביאור ופרמטרי האתחול של ה- servlet.

בדוגמה זו, הגדרנו פרמטר לאתחול של סרוולט סוּג, לערך 'חיסכון':

@WebServlet (name = "BankAccountServlet", תיאור = "מייצג חשבון בנק והעסקאות שלו", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " חיסכון ")}) AccountServlet בכיתה ציבורית מרחיב את javax.servlet.http.HttpServlet {String accountType = null; init חלל ציבורי (ServletConfig config) זורק ServletException {accountType = config.getInitParameter ("סוג"); } doPost ציבורי ריק (בקשת HttpServletRequest, תגובה HttpServletResponse) זורק IOException {// ...}}

5. @WebFilter

אם אנו רוצים לשנות את הבקשה והתגובה של servlet מבלי לגעת בהיגיון הפנימי שלו, אנו יכולים להשתמש ב- WebFilter ביאור. אנו יכולים לשייך פילטרים ל- servlet או לקבוצת servlets ותוכן סטטי על ידי ציון דפוס URL.

בדוגמה שלהלן אנו משתמשים ב- @WebFilter ביאור להפניית כל גישה בלתי מורשית לדף הכניסה:

@WebFilter (urlPatterns = "/ account / *", filterName = "LoggingFilter", תיאור = "סנן את כל כתובות האתר של עסקאות החשבון") מחלקה ציבורית LogInFilter מיישם javax.servlet.Filter {public void init (FilterConfig filterConfig) זורק ServletException {} public void doFilter (בקשת ServletRequest, תגובת ServletResponse, שרשרת FilterChain) זורק בקשת IOException, ServletException {HttpServletRequest req = (HttpServletRequest) בקשה; HttpServletResponse res = (HttpServletResponse) תגובה; res.sendRedirect (req.getContextPath () + "/ login.jsp"); chain.doFilter (בקשה, תגובה); } הרס ציבורי הרס () {}}

6. @WebListener

אם נרצה ידע או שליטה על אופן ומתי אתחול או שינוי של סרוולט ובקשותיו, נוכל להשתמש ב- @WebListener ביאור.

כדי לכתוב מאזין לאינטרנט עלינו להרחיב אחד או יותר מהממשקים הבאים:

  • ServletContextListener - עבור הודעות על ServletContext מעגל החיים
  • ServletContextAttributeListener - עבור הודעות כאשר א ServletContext המאפיין השתנה
  • ServletRequestListener - עבור התראות בכל פעם שמתבצעת בקשה למשאב
  • ServletRequestAttributeListener - עבור התראות כאשר תכונה מתווספת, מוסרת או משתנה ב- ServletRequest
  • HttpSessionListener - עבור התראות כאשר מושב חדש נוצר ונהרס
  • HttpSessionAttributeListener - עבור התראות כאשר מאפיין חדש מתווסף או מוסר מהפעלה

להלן דוגמה כיצד אנו יכולים להשתמש ב- ServletContextListener להגדרת יישום אינטרנט:

המחלקה הציבורית @WebListener BankAppServletContextListener מיישמת את ServletContextListener {context void publicInitialized (ServletContextEvent sce) {sce.getServletContext (). SetAttribute ("ATTR_DEFAULT_LANGUAGE", "אנגלית"); } הקשר בטל ציבורי הרס (ServletContextEvent sce) {// ...}}

7. @ServletSecurity

כאשר אנו רוצים לציין את מודל האבטחה עבור ה- servlet שלנו, כולל תפקידים, דרישות בקרת גישה ואימות אנו משתמשים בהערה @ServletSecurity.

בדוגמה זו נגביל את הגישה שלנו AccountServlet משתמש ב @ServletSecurity ביאור:

@WebServlet (name = "BankAccountServlet", תיאור = "מייצג חשבון בנק והעסקאות שלו", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " חסכון ")}) @ ServletSecurity (value = @ HttpConstraint (roleAllowed = {" Member "}), httpMethodConstraints = {@ HttpMethodConstraint (value =" POST ", roleAllowed = {" Admin "})) מחלקה ציבורית AccountServlet מאריך javax. servlet.http.HttpServlet {חשבון מחרוזת סוג = null; init void public (ServletConfig config) זורק ServletException {// ...} public void doGet (HttpServletRequest request, HttpServletResponse response) זורק IOException {// ...} public void doPost (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק כפול = 1000d; מחרוזת paramDepositAmt = request.getParameter ("dep"); depositAmt כפול = Double.parseDouble (paramDepositAmt); accountBalance = accountBalance + depositAmt; כותב PrintWriter = response.getWriter (); writer.println ("יתרה בחשבון" + accountType + "הוא:" + accountBalance + ""); writer.flush (); }}

במקרה זה, בעת הפעלת ה- AccountServlet, הדפדפן קופץ מסך כניסה למשתמש כדי להזין שם משתמש וסיסמא תקפים.

אנחנו יכולים להשתמש @HttpConstraint ו @HttpMethodConstraint ביאורים כדי לציין ערכים לתכונות ערך ו httpMethodConstraints, שֶׁל @ServletSecurity ביאור.

@HttpConstraint ההערה חלה על כל שיטות ה- HTTP. במילים אחרות, הוא מציין את מגבלת האבטחה המוגדרת כברירת מחדל.

@HttpConstraint יש שלוש תכונות:

  • ערך
  • תפקידים מותר
  • תחבורה אחריות

מתוך מאפיינים אלה, התכונה הנפוצה ביותר היא תפקידים מותר. בקטע הקוד לדוגמה שלמעלה, משתמשים השייכים לתפקיד חבר רשאים להפעיל את כל שיטות ה- HTTP.

@HttpMethodConstraint ביאור מאפשר לנו לציין את מגבלות האבטחה של שיטת HTTP מסוימת.

@HttpMethodConstraint בעל התכונות הבאות:

  • ערך
  • emptyRoleSemantic
  • תפקידים מותר
  • תחבורה אחריות

בקטע הקוד לדוגמה שלמעלה, הוא מראה כיצד ה- doPost השיטה מוגבלת רק למשתמשים השייכים ל- מנהל תפקיד, מה שמאפשר לבצע את פונקציית ההפקדה רק על ידי מנהל מִשׁתַמֵשׁ.

8. @MultipartConfig

הערה זו משמשת כאשר אנו זקוקים להערת סרוולט לטיפול נתונים מרובי חלקים / טפסים בקשות (משמשות בדרך כלל עבור סרוולט העלאת קבצים).

זה יחשוף את getParts () ו getPart (שם) שיטות של HttpServletRequest ניתן להשתמש בהם כדי לגשת לכל החלקים כמו גם לחלק בודד.

ניתן לכתוב את הקובץ שהועלה לדיסק על ידי התקשרות ל- כתוב (fileName) של אובייקט החלק.

כעת נבחן דוגמה לשרת UploadCustomerDocumentsServlet המדגים את השימוש בו:

@WebServlet (urlPatterns = {"/ uploadCustDocs"}) @MultipartConfig (fileSizeThreshold = 1024 * 1024 * 20, maxFileSize = 1024 * 1024 * 20, maxRequestSize = 1024 * 1024 * 25, location = "./custDocs") public class UploadCustomer מרחיב HttpServlet {מוגן void doPost (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק ServletException, IOException {עבור (חלק חלק: request.getParts ()) {part.write ("myFile"); }}}

@MultipartConfig בעל ארבע תכונות:

  • fileSizeThreshold - זהו סף הגודל בעת שמירת הקובץ שהועלה באופן זמני. אם גודלו של הקובץ שהועלה גדול מסף זה, הוא יאוחסן בדיסק. אחרת, הקובץ נשמר בזיכרון (גודל בתים)
  • maxFileSize - זה הגודל המקסימלי של הקובץ שהועלה (גודל בתים)
  • maxRequestSize - זה הגודל הגבוה ביותר של הבקשה, כולל קבצים שהועלו ונתוני טופס אחרים (גודל בתים)
  • מקום - זו הספריה בה מאוחסנים קבצים שהועלו

9. מסקנה

במאמר זה, בחנו כמה הערות Java EE שהוצגו עם Servlet API 3.1 ואת מטרתן והשימוש בהן.

קוד המקור הקשור למאמר זה ניתן למצוא באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found