ජේඑස්පී ලිපිගොනු වල ජාවා කේතය වළක්වා ගන්නේ කෙසේද?


1684

මම ජාවා ඊඊ වෙත අලුත් වන අතර පහත දැක්වෙන පේළි තුනට සමාන යමක් ඇති බව මම දනිමි

<%= x+1 %>
<%= request.getParameter("name") %>
<%! counter++; %>

කේතීකරණයේ පැරණි පාසල් ක්‍රමයක් වන අතර ජේඑස්පී අනුවාදය 2 හි ජේඑස්පී ලිපිගොනු වල ජාවා කේතය වළක්වා ගැනීමට ක්‍රමයක් තිබේ. කරුණාකර මට විකල්ප ජේඑස්පී 2 පේළි මට කියන්න පුළුවන්ද, මෙම තාක්ෂණය හඳුන්වන්නේ කුමක්ද?


22
Ora කොරේ ටුගේ, කවුන්ටරයේ විචල්‍යය භාවිතයට පෙර කොතැනක හෝ ප්‍රකාශයට පත් කර ඇති තාක් කල් එය නිසැකවම වලංගු වේ ...
ෂෙල්ඩන් ආර්.

He ෂෙල්ඩන් ආර්. මෙය වලංගු වේ: <% = කවුන්ටරය ++%> හෝ මෙය: <%! int කවුන්ටරය = 0; int x = counter ++; %> නමුත් නොවේ: <%! int කවුන්ටරය = 0; කවුන්ටරය ++; %>
කෝරේ ටුගෙයි

Ora කොරායි ටුගෙයි, මා අදහස් කළේ විචල්‍ය කවුන්ටරය කලින් ස්ක්‍රිප්ට් බ්ලොක් එකක ප්‍රකාශයට පත් කළේ නම් එය පසුකාලීන කොටසක වලංගු විය යුතුය. නමුත් අවසාන වශයෙන්, මේ දිනවල J2EE ක්‍රමලේඛකයින් කෙසේ හෝ ස්ක්‍රිප්ට්ලට් වෙනුවට EL විචල්‍යයන් භාවිතා කළ යුතුය ...
ෂෙල්ඩන් ආර්.

Answers:


1982

ජේඑස්පී හි පිටපත් (එම <% %>දේවල්) භාවිතය උපතේ සිටම සැබවින්ම අධෛර්යමත් කර ඇත taglibs (වගේ JSTL ) සහ එල් ( භාව ප්රකාශනය භාෂා , එම${} 2001 දී දේවල්) මාර්ගය නැවත.

ප්රධාන අවාසි scriptlets ඇත:

  1. නැවත භාවිතා කිරීමේ හැකියාව: ඔබට පිටපත් නැවත භාවිතා කළ නොහැක.
  2. ප්‍රතිස්ථාපනය කිරීමේ හැකියාව: ඔබට තිර පිටපත් වියුක්ත කළ නොහැක.
  3. OO- හැකියාව: ඔබට උරුමය / සංයුතිය භාවිතා කළ නොහැක.
  4. නිදොස් කිරීමේ හැකියාව: ස්ක්‍රිප්ට්ලට් ව්‍යතිරේකය අඩක් විසි කළහොත් ඔබට ලැබෙන්නේ හිස් පිටුවක් පමණි.
  5. පරීක්ෂණ හැකියාව: ඒකක පරීක්‍ෂා කළ නොහැක.
  6. නඩත්තු කිරීමේ හැකියාව: මිශ්‍ර / අවුල් සහගත / අනුපිටපත් කේත තර්කනය පවත්වා ගැනීමට වැඩි කාලයක් අවශ්‍ය වේ.

(ටැග්) පංති මගින් එකම ක්‍රියාකාරීත්වයක් ඇති විට ස්ක්‍රිප්ට්ලට් භාවිතා නොකිරීමට සන් ඔරකල් විසින්ම ජේඑස්පී කේතකරණ සම්මුතීන්හි නිර්දේශ කරයි . අදාළ කරුණු කිහිපයක් මෙන්න:

JSP 1.2 පිරිවිතරයෙන්, ඔබේ වෙබ් යෙදුමේ JSP සම්මත ටැග් පුස්තකාලය (JSTL) භාවිතා කිරීම රෙකමදාරු කරනු ලැබේ. ඔබේ පිටු වල ජේඑස්පී ස්ක්‍රිප්ට්ලෙට් වල අවශ්‍යතාවය අඩු . JSTL භාවිතා කරන පිටු සාමාන්‍යයෙන් කියවීමට හා නඩත්තු කිරීමට පහසුය.

...

හැකි නම්, JSP scriptlets වළක්වා ටැගය පුස්තකාල සමාන පහසුකම් ලබා විට. මෙය පිටු කියවීමට හා නඩත්තු කිරීමට පහසු කරයි, ඉදිරිපත් කිරීමේ තර්කනයෙන් ව්‍යාපාර තර්කනය වෙන් කිරීමට උපකාරී වන අතර ඔබේ පිටු ජේඑස්පී 2.0 විලාසිතාවේ පිටු බවට පරිණාමය වීමට පහසු කරයි (ජේඑස්පී 2.0 පිරිවිතරයන් සහාය දක්වයි, නමුත් ස්ක්‍රිප්ට්ලෙට් භාවිතය අවධාරණය කරයි).

...

ව්‍යාපාර තර්කනයෙන් ඉදිරිපත් කිරීමේ ස්ථරය අතර සම්බන්ධතාවය අඩු කිරීම සඳහා ආදර්ශ-දර්ශන-පාලක (එම්වීසී) සැලසුම් රටාව අනුගමනය කිරීමේ අරමුණින්, ව්‍යාපාර තර්කනය ලිවීම සඳහා ජේඑස්පී පිටපත් භාවිතා නොකළ යුතුය . ඒ වෙනුවට, සේවාදායකයාගේ ඉල්ලීම් නිසි ග්‍රාහක-සූදානම් ආකෘතියකට සැකසීමෙන් ආපසු ලබා දෙන දත්ත ("වටිනා වස්තු" ලෙසද හැඳින්වේ) පරිවර්තනය කිරීමට අවශ්‍ය නම් ජේඑස්පී ස්ක්‍රිප්ට්ලට් භාවිතා කරයි. එසේ වුවද, ඉදිරිපස පාලක සේවාදායකයක් හෝ අභිරුචි ටැගයක් සමඟ මෙය වඩා හොඳ වනු ඇත.


ස්ක්‍රිප්ට්ලට් සම්පූර්ණයෙන්ම ප්‍රතිස්ථාපනය කරන්නේ කෙසේද යන්න කේතයේ / තර්කනයේ එකම අරමුණ මත රඳා පවතී. බොහෝ විට මෙම කේතය පූර්ණ සුදුසු ජාවා පන්තියක තැබිය යුතුය:

  • සෑම ඉල්ලීමකදීම එකම ජාවා කේතය ඉල්ලීමට ඔබට අවශ්‍ය නම් , ඉල්ලූ පිටුව නොසලකා අඩු හෝ වැඩි ගණනක්, උදා: පරිශීලකයෙකු ලොග් වී ඇත්දැයි පරීක්ෂා කිරීම, ඉන්පසු පෙරනයක් ක්‍රියාත්මක කර ඒ අනුව කේතයක් ලිවීම . උදා:doFilter()

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
            ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page.
        } else {
            chain.doFilter(request, response); // Logged in, just continue request.
        }
    }

    <url-pattern>ජේඑස්පී රුචිකත්වයන් ආවරණය වන පරිදි සුදුසු පරිදි සිතියම් ගත කළ විට , ඔබට එකම කේත කැබැල්ලක් සමස්ත ජේඑස්පී පිටු පිටපත් කිරීමට අවශ්‍ය නොවේ.


  • ඉල්ලීමක් පෙර සැකසීම සඳහා ඔබට යම් ජාවා කේතයක් කැඳවීමට අවශ්‍ය නම් , උදා: දත්ත සමුදායකින් යම් ලැයිස්තුවක් යම් වගුවක ප්‍රදර්ශනය කිරීම සඳහා පූර්ව පැටවීම, අවශ්‍ය නම් සමහර විමසුම් පරාමිතීන් මත පදනම්ව, පසුව සේවාදායකයක් ක්‍රියාත්මක කර ඒ අනුව කේතයක් ලිවීම doGet(). උදා:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            List<Product> products = productService.list(); // Obtain all products.
            request.setAttribute("products", products); // Store products in request scope.
            request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response); // Forward to JSP page to display them in a HTML table.
        } catch (SQLException e) {
            throw new ServletException("Retrieving products failed!", e);
        }
    }

    ව්‍යතිරේකයන් සමඟ කටයුතු කිරීම මේ ආකාරයෙන් පහසුය. ජේඑස්පී විදැහුම්කරණය මධ්‍යයේ ඩීබී වෙත පිවිසෙන්නේ නැත, නමුත් ජේඑස්පී දර්ශනය වීමට බොහෝ කලකට පෙරය. ඩීබී ප්‍රවේශය ව්‍යතිරේකයක් විසි කරන සෑම විටම ප්‍රතිචාරය වෙනස් කිරීමට ඔබට තවමත් හැකියාවක් ඇත. ඉහත නිදසුනේ, පෙරනිමි දෝෂයක් 500 පිටුව මගින් කෙසේ හෝ සකසුරුවම් කරන ඔබට හැකි ප්රදර්ශනය වනු ඇත <error-page>තුල web.xml.


  • ඉල්ලීමක් කල්තබා ගැනීම සඳහා ඔබට යම් ජාවා කේතයක් කැඳවීමට අවශ්‍ය නම් , උදා: පෝරමයක් ඉදිරිපත් කිරීම සැකසීම, ඉන්පසු සේවාදායකයක් ක්‍රියාත්මක කර ඒ අනුව කේතයක් ලිවීම doPost(). උදා:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        User user = userService.find(username, password);
    
        if (user != null) {
            request.getSession().setAttribute("user", user); // Login user.
            response.sendRedirect("home"); // Redirect to home page.
        } else {
            request.setAttribute("message", "Unknown username/password. Please retry."); // Store error message in request scope.
            request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); // Forward to JSP page to redisplay login form with error.
        }
    }

    විවිධ ප්‍රති result ල පිටු ගමනාන්ත සමඟ කටයුතු කිරීම පහසුය: දෝෂයක් ඇති වූ විට වලංගු කිරීමේ දෝෂ සහිතව පෝරමය නැවත ප්‍රදර්ශනය කිරීම (මෙම විශේෂිත උදාහරණයේ දී ඔබට එය EL${message} හි නැවත ප්‍රදර්ශනය කළ හැකිය ), හෝ සාර්ථක වූ විට අපේක්ෂිත ඉලක්ක පිටුවට රැගෙන යාම.


  • ක්‍රියාත්මක කිරීමේ සැලැස්ම සහ / හෝ ඉල්ලීමේ ගමනාන්තය සහ ප්‍රතිචාරය පාලනය කිරීම සඳහා ඔබට යම් ජාවා කේතයක් යෙදවීමට අවශ්‍ය නම් , එම්වීසී හි ඉදිරිපස පාලක රටාවට අනුව සේවාදායකයක් ක්‍රියාත්මක කරන්න . උදා:

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Action action = ActionFactory.getAction(request);
            String view = action.execute(request, response);
    
            if (view.equals(request.getPathInfo().substring(1)) {
                request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
            } else {
                response.sendRedirect(view);
            }
        } catch (Exception e) {
            throw new ServletException("Executing action failed.", e);
        }
    }

    නැතහොත් JSF , Spring MVC , Wicket වැනි MVC රාමුවක් අනුගමනය කරන්න , එවිට ඔබට අභිරුචි සේවාදායකයක් නොමැතිව JSP / Facelets පිටුවක් සහ ජාවාබීන් පන්තියක් සමඟ අවසන් වේ.


  • ජේඑස්පී පිටුවක් තුළ ඇති ප්‍රවාහය පාලනය කිරීම සඳහා ඔබට යම් ජාවා කේතයක් යෙදීමට අවශ්‍ය නම්, ඔබට ජේඑස්ටීඑල් හරය වැනි (පවතින) ප්‍රවාහ පාලන ටැග්ලිබ් එකක් අල්ලා ගත යුතුය . උදා List<Product>: වගුවක පෙන්වීම :

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    ...
    <table>
        <c:forEach items="${products}" var="product">
            <tr>
                <td>${product.name}</td>
                <td>${product.description}</td>
                <td>${product.price}</td>
            </tr>
        </c:forEach>
    </table>

    විවිධ HTML හා ගැලපෙන XML ශෛලීය ටැග් සමඟ, කේතය විවිධ විවෘත හා සංවෘත වරහන් සහිත ස්ක්‍රිප්ට්ලට් පොකුරකට වඩා කියවිය හැකි (සහ වඩා හොඳින් නඩත්තු කළ හැකි) වේ ( "මෙම වසා දැමීමේ වරහන අයත් වන්නේ කොහේද?" ). පහත දැක්වෙන කොටස එකතු කිරීමෙන් ස්ක්‍රිප්ට්ලට් තවමත් භාවිතා කරන සෑම අවස්ථාවකම ව්‍යතිරේකයක් විසි කිරීම සඳහා ඔබේ වෙබ් යෙදුම වින්‍යාස කිරීම පහසු ආධාරයකිweb.xml :

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <scripting-invalid>true</scripting-invalid>
        </jsp-property-group>
    </jsp-config>

    දී Facelets , ජාවා EE කොටසක් වන JSP වන අනුප්රාප්තිකයා MVC රාමුව ලබා JSF , එය දැනටමත් නොවේ භාවිතා කිරීමට හැකි scriptlets . මේ ආකාරයෙන් ඔබට "නිවැරදි මාර්ගය" කිරීමට ස්වයංක්‍රීයව බල කෙරෙයි.


  • ජේඑස්පී පිටුවක් තුළ "බැකෙන්ඩ්" දත්ත වෙත ප්‍රවේශ වීමට සහ ප්‍රදර්ශනය කිරීමට ඔබට යම් ජාවා කේතයක් කැඳවීමට අවශ්‍ය නම්, ඔබ ඒ ${}දේවල් EL (ප්‍රකාශන භාෂාව) භාවිතා කළ යුතුය . උදා: ඉදිරිපත් කළ ආදාන අගයන් නැවත ප්‍රදර්ශනය කිරීම:

    <input type="text" name="foo" value="${param.foo}" />

    හි ${param.foo}ප්‍රති come ල පෙන්වයි request.getParameter("foo").


  • ඔබට සමහර උපයෝගීතා ජාවා කේත සෘජුවම ජේඑස්පී පිටුවට කැඳවීමට අවශ්‍ය නම් (සාමාන්‍යයෙන් public staticක්‍රම), එවිට ඔබ ඒවා EL ශ්‍රිත ලෙස අර්ථ දැක්විය යුතුය. ජේඑස්ටීඑල් හි සම්මත කාර්යයන් ටැග්ලිබ් ඇත, නමුත් ඔබට පහසුවෙන්ම කාර්යයන් නිර්මාණය කළ හැකිය . XSS ප්‍රහාරfn:escapeXml වැළැක්වීම සඳහා JSTL ප්‍රයෝජනවත් වන ආකාරය මෙන්න .

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
    ...
    <input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

    XSS සංවේදීතාව කිසිදු ආකාරයකින් ජාවා / ජේඑස්පී / ජේඑස්ටීඑල් / ඊඑල් / කුමක් හෝ සම්බන්ධ නොවන බව සලකන්න, ඔබ සංවර්ධනය කරන සෑම වෙබ් යෙදුමකදීම මෙම ගැටළුව සැලකිල්ලට ගත යුතුය . ස්ක්‍රිප්ට්ලෙට් වල ගැටළුව නම්, එය අවම වශයෙන් සම්මත ජාවා ඒපීඅයි භාවිතා නොකිරීම, බිල්ඩින් වැළැක්වීමේ ක්‍රමයක් ලබා නොදීමයි. ජේඑස්පී හි අනුප්‍රාප්තික ෆේස්ලෙට්ස් දැනටමත් ව්‍යාජ HTML ගැලවී යාමක් ඇති බැවින් ෆේස්ලට් වල එක්ස්එස්එස් සිදුරු ගැන කරදර විය යුතු නැත.

මෙයද බලන්න:


117
+1 නියම පිළිතුර. නමුත් පිස්සු වැටෙන්න එපා, සමහර විට ස්ක්‍රිප්ට්ලට් භාවිතා කිරීම හරි, නමුත් එය නියමය සනාථ කරන ව්‍යතිරේකය විය යුතුය.
svachon

26
vsvachon: ඉක්මන් මූලාකෘතිකරණය / පරීක්ෂා කිරීම සඳහා ස්ක්‍රිප්ට්ලට් ප්‍රයෝජනවත් වේ. මා දන්නා පරිදි, වෙබ් බ්‍රව්සරයේ වෙබ් පිටු විග්‍රහ කිරීමේ කාර්ය සාධනය වැඩි දියුණු කිරීම <% response.getWriter().flush(); %>සඳහා </head>සහ <body>පිටපත් අතර එකම “නීත්‍යානුකූල” නිෂ්පාදන භාවිතයක් ඇත . නමුත් සේවාදායක පැත්තේ ප්‍රතිදාන බෆරයේ ප්‍රමාණය (1 ~ 2KB) අඩු වූ විට මෙම භාවිතය සම්පූර්ණයෙන්ම නොසැලකිලිමත් වේ. මෙම ලිපියද බලන්න .
BalusC

5
AlBalusC මම කිහිප වතාවක්ම ජාවා පංති සමඟ සිරවී සිටිමි. IMHO යනු ස්ක්‍රිප්ටෙල් විසින් එම කාර්යය කරන අවස්ථාවකි.
svachon

41
vsvachon: මම එම පංති තමන්ගේම ජාවාබීන් පන්ති වලින් ඔතා ඒ වෙනුවට භාවිතා කරමි.
BalusC

31
එය ඉතා හොඳ පිළිතුරකි, නමුත් doGet සහ doPost කොටස් නොමඟ යවන සුළුය. එම ක්‍රම විශේෂිත ඉල්ලීම් (HEAD, GET සහ POST) හැසිරවීම සඳහා වන අතර ඒවා “පෙර සැකසුම්” හෝ “පසු සැකසුම්” ඉල්ලීම් සඳහා නොවේ!
MetroidFan2002

226

ආරක්ෂාවක් ලෙස: හොඳ සඳහා පිටපත් අක්‍රීය කරන්න

ලෙස තවත් ප්රශ්නයක් සාකච්ඡා කෙරෙන, ඔබ හා සෑම විටම scriptlets ඔබේ අක්රීය කළ හැකි web.xmlවෙබ් යෙදුම descriptor.

ඕනෑම සංවර්ධකයෙකු ස්ක්‍රිප්ට් එකතු කිරීම වැළැක්වීම සඳහා මම සෑම විටම එසේ කරමි, විශේෂයෙන් විශාල සමාගම් වල ඔබට ඉක්මනින් හෝ පසුව දළ විශ්ලේෂණය අහිමි වනු ඇත. මෙම web.xmlසැකසුම් මේ වගේ දෙස බලන්න:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
     <scripting-invalid>true</scripting-invalid>
  </jsp-property-group>
</jsp-config>

4
මෙය ස්ක්‍රිප්ට්ලට් අදහස් ද අක්‍රීය කරයිද?: <%-- comment that i don't want in the final HTML --%>. HTML අදහස් දැක්වීමට වඩා මේවා භාවිතා කිරීම ප්‍රයෝජනවත් බව මට පෙනේ.
ඩේවිඩ් ලැවෙන්ඩර්

16
RMrSpoon ඔබ වෙනුවෙන් පිළිතුරක් සොයා ගත්තේය. අනුව මෙම පිළිතුර + අදහස් , scriptlets ලකුණු මෙම මාරුවෙන් මාරුවට <% %>, scriptlet ප්රකාශන <%! %>, සහ scriptlet ප්රකාශ <%= %>. එයින් අදහස් කරන්නේ විධානයන් <%@ %>සහ අදහස් <%-- --%>සක්‍රීය සහ භාවිතයට ගතහැකි ලෙස පවතින බැවින් ඔබට තවමත් අදහස් දැක්වීම් සහ ඇතුළත් කිරීම් කළ හැකිය.
මාටින් කානි

3
ස්ක්‍රිප්ට්ලට් විධානයන් අක්‍රීය කිරීම භයානක වනු ඇත - අමතර සුදු අවකාශයක් සමඟ විහිළු කරන උරුම පද්ධති සමඟ අන්තර් ක්‍රියා කිරීම සඳහා ටිම් වයිට්ස්පේස් මිල කළ නොහැකි ය.
corsiKa

109

JSTL විසින් කොන්දේසි, ලූප, කට්ටල, ලබා ගැනීම යනාදිය සඳහා ටැග් ඉදිරිපත් කරයි. උදාහරණයක් ලෙස:

<c:if test="${someAttribute == 'something'}">
   ...
</c:if>

JSTL ඉල්ලීම ගුණාංග සමග වැඩ - ඔවුන් බොහෝ විට වන Servlet, විසින් ඉල්ලීමක් සකසා ඉදිරියට යන JSP කිරීමට.


2
JSTL ඉල්ලීම් ගුණාංග සමඟ ක්‍රියා කරන්නේ යැයි ඔබ කියන්නේ ඇයි? ඔවුන්ට ඕනෑම විෂය පථයක ගුණාංග සමඟ වැඩ කළ හැකිය, එසේ නොවේ ද?
කෝරේ ටුගෙයි

61

මට මෙය නිවැරදිදැයි මට විශ්වාස නැත.

ඔබ MVC ගැන යමක් කියවිය යුතුය. වසන්ත එම්වීසී සහ ස්ට්‍රට්ස් 2 වඩාත් පොදු විසඳුම් දෙක වේ.


29
වසන්තය හෝ ස්ට්‍රට්ස් නොමැතිව ඉහත බොහෝ ශිල්පීය ක්‍රම භාවිතා කරමින් MVC සර්වට්ලට් / ජේඑස්පී සමඟ ක්‍රියාත්මක කළ හැකිය.
stepanian

18
එය ප්‍රශ්නයට පිළිතුරු දෙන්නේ කෙසේද?
xyz

54

ජාවා සහ HTML කේත අතරමැදි වීම වළක්වා ගැනීම සඳහා ඔබට EL ප්‍රකාශන සමඟ JSTL ටැග් භාවිතා කළ හැකිය:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
    <head>
    </head>
    <body>

        <c:out value="${x + 1}" />
        <c:out value="${param.name}" />
        // and so on

    </body>
</html>

34

ඔබ වෙනුවෙන් HTML විශාල ප්‍රමාණයක් ජනනය කරන විකට් වැනි සංරචක පාදක රාමු ද ඇත . HTML වලින් අවසන් වන ටැග් අතිශයින්ම මූලික වන අතර කිසිදු තර්කනයක් මුසු නොවේ. එහි ප්‍රති result ලය සාමාන්‍ය HTML මූලද්‍රව්‍ය සහිත හිස් වැනි HTML පිටු ය. අවාසිය නම් කඩුල්ලේ බොහෝ සංරචක තිබීමයි ඉගෙනීමට ඒපීඅයි සමහර සීමාවන් එම සීමාවන් යටතේ සාක්ෂාත් කර ගැනීම දුෂ්කර විය හැකිය.


33

MVC වාස්තු විද්‍යාත්මක රටාව තුළ, JSPs දර්ශන තට්ටුව නියෝජනය කරයි. ජේඑස්පී වල ජාවා කේතය කාවැද්දීම නරක ක්‍රියාවක් ලෙස සැලකේ. ඔබට JSTL , freeMarker , JSP සමඟ ප්‍රවේගය "අච්චු එන්ජිම" ලෙස භාවිතා කළ හැකිය . එම ටැග් සඳහා දත්ත සපයන්නා රඳා පවතින්නේ ඔබ ගනුදෙනු කරන රාමු මත ය . Struts 2හා webworkMVC රටාව සඳහා ක්රියාත්මක ලෙස භාවිතා කරයි OGNL "JSP කිරීමට බෝංචි ප්රොපර්ටීස් හෙළිදරව් කිරීමට ඉතා රසවත් තාක්ෂණය".


27

අත්දැකීම් වලින් පෙන්නුම් කර ඇත්තේ ජේඑස්පී හි යම් අඩුපාඩු ඇති අතර, ඉන් එකක් සත්‍ය කේතය සමඟ සලකුණු කිරීම වළක්වා ගැනීම දුෂ්කර ය.

ඔබට හැකි නම්, ඔබ කළ යුතු දේ සඳහා විශේෂිත තාක්ෂණයක් භාවිතා කිරීම ගැන සලකා බලන්න. ජාවා ඊඊ 6 හි ජේඑස්එෆ් 2.0 ඇත, එය #{bean.method(argument)}ප්‍රවේශය හරහා ජාවා බෝංචි සහ ජේඑස්එෆ් පිටු සමඟ ඇලවීම ඇතුළු හොඳ විශේෂාංග රැසක් සපයයි .


3
පැරණි පිළිතුර නමුත් ජාවා අවකාශයේ වඩාත්ම බිහිසුණු සොයාගැනීමක් ජේඑස්එෆ් බව පැවසීමට මට විරුද්ධ විය නොහැක. තනි (HTTP GET වැනි) සබැඳියක් සෑදීමට උත්සාහ කරන්න, ඒ මන්දැයි ඔබට වැටහෙනු ඇත.
ඇලෙක්ස්

Lex ඇලෙක්ස් නමුත් තවමත් හොඳයි. ඊටත් වඩා හොඳ දෙයක් නිර්දේශ කිරීමට නිදහස් වන්න.
Thorbj Rrn Ravn Andersen

26

ඔබට ජේඑස්පී හි ජාවා කේතීකරණයේ ඇති අඩුපාඩු මඟහරවා ගැනීමට අවශ්‍ය නම් ඔබට එය පිටපත් සමඟ පවා කළ හැකිය. ජේඑස්පී හි අවම ජාවා තිබීම සඳහා යම් විනයක් අනුගමනය කරන්න. ජේඑස්පී පිටුවේ ගණනය කිරීම් සහ තර්කනයන් නොමැති තරම්ය.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%//instantiate a JSP controller
MyController clr = new MyController(request, response);

//process action if any
clr.process(request);

//process page forwaring if necessary

//do all variable assignment here
String showMe = clr.getShowMe();%>

<html>
    <head>
    </head>
    <body>
        <form name="frm1">
            <p><%= showMe %>
            <p><% for(String str : clr.listOfStrings()) { %>
            <p><%= str %><% } %>

            // and so on   
        </form>
    </body>
</html>

26

JSTL භාවිතා කර ඔබේම ටැග් අභිරුචිකරණය කිරීමට සහ ලිවීමට ඉගෙන ගන්න

EL යනු EviL බව සලකන්න (ධාවන කාල ව්‍යතිරේක, ප්‍රතිනිර්මාණය කිරීම)
කඩුල්ල ද නපුරු විය හැකිය (කාර්ය සාධනය, කුඩා යෙදුම් සඳහා වෙහෙසකාරී හෝ සරල දර්ශන තට්ටුවක්) java2s

වෙතින් උදාහරණය ,

මෙය වෙබ් යෙදුමේ web.xml වෙත එක් කළ යුතුය

<taglib>
    <taglib-uri>/java2s</taglib-uri>
    <taglib-location>/WEB-INF/java2s.tld</taglib-location>
</taglib>

ගොනුව සාදන්න: java2s.tld / WEB-INF / හි

<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
   "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<!-- a tab library descriptor -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor">
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>Java2s Simple Tags</short-name>

    <!-- this tag manipulates its body content by converting it to upper case
    -->
    <tag>
        <name>bodyContentTag</name>
        <tag-class>com.java2s.BodyContentTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
          <name>howMany</name>
        </attribute>
    </tag>
</taglib>

පහත කේතය WEB-INF \ පන්ති \ com \ java2s වෙත සම්පාදනය කරන්න

package com.java2s;

import java.io.IOException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class BodyContentTag extends BodyTagSupport{
    private int iterations, howMany;

    public void setHowMany(int i){
        this.howMany = i;
    }

    public void setBodyContent(BodyContent bc){
        super.setBodyContent(bc);
        System.out.println("BodyContent = '" + bc.getString() + "'");
    }

    public int doAfterBody(){
        try{    
            BodyContent bodyContent = super.getBodyContent();
            String bodyString  = bodyContent.getString();
            JspWriter out = bodyContent.getEnclosingWriter();

            if ( iterations % 2 == 0 ) 
                out.print(bodyString.toLowerCase());
            else
                out.print(bodyString.toUpperCase());

            iterations++;
            bodyContent.clear(); // empty buffer for next evaluation
        }
        catch (IOException e) {
            System.out.println("Error in BodyContentTag.doAfterBody()" + e.getMessage());
            e.printStackTrace();
        } // end of catch

        int retValue = SKIP_BODY;

        if ( iterations < howMany ) 
            retValue = EVAL_BODY_AGAIN;

        return retValue;
    }
}

සේවාදායකය ආරම්භ කර bodyContent.jsp බ්‍රව්සරයේ පටවන්න

<%@ taglib uri="/java2s" prefix="java2s" %>
<html>
    <head>
        <title>A custom tag: body content</title>
    </head>
    <body>
        This page uses a custom tag manipulates its body content.Here is its output:
        <ol>
            <java2s:bodyContentTag howMany="3">
            <li>java2s.com</li>
            </java2s:bodyContentTag>
        </ol>
    </body>
</html>

සංරචක නැවත භාවිතා කිරීමේ හැකියාව යහපත් වුවද එය යම් ක්ෂේත්‍රයක් ඉලක්ක කරයි
tomasb

25

ජාවා යනු html වෙතින් සම්පූර්ණයෙන්ම වෙන් කරන විකල්පයක් වන කඩුල්ල, එබැවින් නිර්මාණකරුවෙකුට සහ ක්‍රමලේඛකයෙකුට එකිනෙකා ගැන එතරම් අවබෝධයක් නොමැතිව එකට හා විවිධ කේත කට්ටලවල වැඩ කළ හැකිය.

කඩුල්ල දෙස බලන්න.


23

ඔබ හොඳ ප්‍රශ්නයක් මතු කළ අතර ඔබට හොඳ පිළිතුරු ලැබුණද, මම යෝජනා කරන්නේ ඔබ ජේඑස්පී ඉවත් කරන ලෙසයි. එය යල් පැන ගිය තාක්‍ෂණයකි. අච්චු එන්ජින් වැනි නවීන ප්‍රවේශයක් භාවිතා කරන්න. ඔබට ව්‍යාපාර සහ ඉදිරිපත් කිරීමේ ස්ථර ඉතා පැහැදිලිව වෙන් කරනු ඇති අතර නිසැකවම සැකිලි වල ජාවා කේතයක් නොමැත, එබැවින් ඔබට වෙබ් ඉදිරිපත් කිරීමේ සංස්කරණ මෘදුකාංගයෙන් කෙලින්ම සැකිලි උත්පාදනය කළ හැකිය, බොහෝ විට WYSIWYG උත්තේජනය කරයි.

පෙරහන් සහ පෙර හා පසු සැකසුම් වලින් stay ත්ව සිටින්න, එසේ නොමැතිනම් විචල්‍යයට වටිනාකම ලැබෙන්නේ කොහෙන්දැයි ඔබ නොදන්නා බැවින් ඔබට සහාය / නිදොස්කරණය කිරීමේ දුෂ්කරතා සමඟ කටයුතු කළ හැකිය.


9
ජේඑස්පී යනු අච්චු එන්ජිමකි
වෝර්ෆොක්ස්

1
-1 - පෙරහන්, පෙර සකසනයන් සහ පශ්චාත් සකසනයන් භාවිතා කිරීමට සම්පූර්ණයෙන්ම වලංගු හේතු බොහොමයක් ඇත . ඔව්, ඔබට අභිරහස් ලෙස පෙනෙන සාරධර්ම සමඟ අවසන් විය හැකිය, නමුත් ඔබේ ගෘහ නිර්මාණ ශිල්පය ඔබ තේරුම් ගන්නේ නම් නොවේ.
RustyTheBoyRobot

21

ජේඑස්පී ලිපිගොනු වල ජාවා කේතය වළක්වා ගැනීම සඳහා ජාවා දැන් ජේඑස්ටීඑල් වැනි ටැග් පුස්තකාල සපයයි. ජාවා ජේඑස්එෆ් සමඟ පැමිණ ඇති අතර එමඟින් ඔබට සියලුම ක්‍රමලේඛන ව්‍යුහයන් ටැග් ස්වරූපයෙන් ලිවිය හැකිය.


21

ඔබ වළක්වා ගැනීමට කොතරම් උත්සාහ කළත්, ඔබ වෙනත් සංවර්ධකයින් සමඟ වැඩ කරන විට, ඔවුන්ගෙන් සමහරක් තවමත් ස්ක්‍රිප්ට්ලට් වලට වැඩි කැමැත්තක් දක්වන අතර පසුව නපුරු කේතය ව්‍යාපෘතියට ඇතුළත් කරනු ඇත. එමනිසා, ඔබට ස්ක්‍රිප්ට්ලට් කේතය අඩු කිරීමට අවශ්‍ය නම් පළමු සං sign ාවේදී ව්‍යාපෘතිය සැකසීම ඉතා වැදගත් වේ. මෙය මඟහරවා ගැනීම සඳහා ක්‍රම කිහිපයක් තිබේ (වෙනත් සඳහන් කළ රාමු කිහිපයක් ඇතුළුව). කෙසේ වෙතත්, ඔබ පිරිසිදු JSP ක්‍රමයට කැමති නම්, JSTL ටැග් ගොනුව භාවිතා කරන්න. මෙහි ඇති හොඳ දෙය නම් ඔබේ ව්‍යාපෘතිය සඳහා ප්‍රධාන පිටු සැකසිය හැකි බැවින් අනෙක් පිටුවලට ප්‍රධාන පිටු උරුම කර ගත හැකිය

පහත දැක්වෙන අන්තර්ගතය සමඟ ඔබේ වෙබ්-අයිඑන්එෆ් / ටැග් යටතේ base.tag නමින් ප්‍රධාන පිටුවක් සාදන්න

<%@tag description="Overall Page template" pageEncoding="UTF-8"%>

<%@attribute name="title" fragment="true" %>

<html>
  <head>
    <title>  
       <jsp:invoke fragment="title"></jsp:invoke>
    </title>

  </head>
  <body>
    <div id="page-header">
       ....
    </div>
    <div id="page-body">
      <jsp:doBody/>
    </div>
    <div id="page-footer">
      .....
    </div>
  </body>
</html>

මෙම මාතෘ පිටුවේ, මම "මාතෘකාව" නමින් කැබැල්ලක් නිර්මාණය කළෙමි, එවිට ළමා පිටුවේ, මාස්ටර් පිටුවේ මෙම ස්ථානයට තවත් කේත ඇතුළත් කළ හැකිය. එසේම, ටැගය<jsp:doBody/> ළමා පිටුවේ අන්තර්ගතය මගින් ප්‍රතිස්ථාපනය වේ

ඔබේ වෙබ් අන්තර්ගත ෆෝල්ඩරයේ ළමා පිටුව (child.jsp) සාදන්න:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:base>
    <jsp:attribute name="title"> 
        <bean:message key="hello.world" />
    </jsp:attribute>

    <jsp:body>
    [Put your content of the child here]
    </jsp:body>   
</t:base>

<t:base>ඔබට භාවිතා කිරීමට අවශ්‍ය ප්‍රධාන පිටුව සඳහන් කිරීමට භාවිතා කරයි (එය මේ මොහොතේ base.tag වේ). <jsp:body>මෙහි ඇති ටැගය තුළ ඇති සියලුම අන්තර්ගතයන් <jsp:doBody/>ඔබගේ ප්‍රධාන පිටුවේ ප්‍රතිස්ථාපනය වේ. ඔබේ ළමා පිටුවට ඕනෑම ටැග් ලිබ් ඇතුළත් කළ හැකි අතර සාමාන්‍යයෙන් සඳහන් කළ ආකාරයටම ඔබට එය භාවිතා කළ හැකිය. කෙසේ වෙතත්, ඔබ මෙහි ( <%= request.getParameter("name") %>...) කිසියම් ස්ක්‍රිප්ට් කේතයක් භාවිතා කර මෙම පිටුව ක්‍රියාත්මක කිරීමට උත්සාහ කළහොත් ඔබට ලැබෙනුයේ a JasperException because Scripting elements ( &lt;%!, &lt;jsp:declaration, &lt;%=, &lt;jsp:expression, &lt;%, &lt;jsp:scriptlet ) are disallowed here. එමනිසා, වෙනත් පුද්ගලයින්ට නපුරු කේතය jsp ගොනුවට ඇතුළත් කළ හැකි ක්‍රමයක් නොමැත

ඔබගේ පාලකයෙන් මෙම පිටුව අමතන්න:

ඔබේ පාලකයෙන් ඔබට child.jsp ගොනුව පහසුවෙන් ඇමතිය හැකිය. මෙය ද නූල් රාමුව සමඟ හොඳින් ක්‍රියා කරයි


"ඔබ වළක්වා ගැනීමට කොතරම් උත්සාහ කළත්, ඔබ වෙනත් සංවර්ධකයින් සමඟ වැඩ කරන විට, ඔවුන්ගෙන් සමහරක් තවමත් ස්ක්‍රිප්ට්ලට් වලට වැඩි කැමැත්තක් දක්වන අතර පසුව නපුරු කේතය ව්‍යාපෘතියට ඇතුළත් කරනු ඇත." "ආරක්ෂකයෙකු ලෙස: හොඳ සඳහා පිටපත් අක්‍රීය කරන්න" පිළිතුර බලන්න.
ලුයිස් මාටිනස්


18

JSTL ටැගය සහ EL ප්‍රකාශනය භාවිතා කරන්න.


17

යමෙකුට එකකට වඩා වැඩි භාෂාවලින් වැඩසටහන්කරණයට විරුද්ධ නම් , මම GWT යෝජනා කරමි, න්‍යායාත්මකව ඔබට සියලු JS සහ HTML අංග මඟ හැරිය හැක, මන්ද ගූගල් මෙවලම් කට්ටලය සියළුම සේවාදායකයා සහ හවුල් කේතය JS බවට පරිවර්තනය කරයි, ඔබට ඔවුන් සමඟ ගැටළුවක් ඇති නොවනු ඇත, එබැවින් ඔබට වෙනත් භාෂාවලින් කේත නොකර වෙබ් සේවාවක් ඇත. දිගු (ස්මාර්ට් ජීඩබ්ලිව්ටී හෝ වඩින්) මඟින් ලබා දී ඇති පරිදි ඔබට කොහේ හෝ සිට සුපුරුදු CSS භාවිතා කළ හැකිය. ඔබට විවරණ දුසිම් ගණනක් ඉගෙන ගැනීමට අවශ්‍ය නැත.

ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය නම්, ඔබට කේතයේ ගැඹුරට අනවසරයෙන් ඇතුළු වී JS එන්නත් කර ඔබේ HTML පිටුව පොහොසත් කළ හැකිය, නමුත් ඇත්ත වශයෙන්ම ඔබට අවශ්‍ය නම් එය වළක්වා ගත හැකි අතර වෙනත් ඕනෑම රාමුවක ලියා ඇති පරිදි ප්‍රති result ලය හොඳ වනු ඇත. මම කියන්නේ උත්සාහ කිරීම වටී, සහ මූලික GWT මනාව ලේඛනගත කර ඇත.

ඇත්ත වශයෙන්ම බොහෝ සෙසු ක්‍රමලේඛකයින් මෙයින් වෙනත් විසඳුම් කිහිපයක් විස්තර කර හෝ නිර්දේශ කර ඇත. GWT යනු වෙබ් කොටස සමඟ ගනුදෙනු කිරීමට හෝ එය අවම කිරීමට සැබවින්ම අකමැති පුද්ගලයින් සඳහා ය.


1
OP හි ප්‍රශ්නයට සැබවින්ම පිළිතුරු සපයන්නේ නැත.
ඉවාන් ඩොනොවන්

1
Van ඉවාන් ඩොනොවන් හොඳයි, ප්‍රායෝගිකව එය පිළිතුරක් ලබා දෙයි. ඔබට ජාවා කේත වෙනත් භාෂා සමඟ මිශ්‍ර වීම අවුල් කිරීමට අවශ්‍ය නැත. කේතකරණය සඳහා එය ජාවා භාවිතා කරන බව මම පිළිගනිමි, නමුත් එය ජාවා ඇමතුම් නොමැතිව JS වෙත පරිවර්තනය කරනු ඇත. එහෙත් ප්‍රශ්නයේ විෂය පථය වන්නේ සම්භාව්‍ය ජේඑස්පී අවුල්සහගත තත්ත්වය වළක්වා ගන්නේ කෙසේද යන්නයි. GWT තාක්ෂණය එය විසඳයි. මම මෙම පිළිතුර එකතු කළේ කිසිවෙකු එය සඳහන් නොකළ නමුත් එය ජේඑස්පීයට විකල්පයක් බැවින් අදාළ වේ. ප්‍රශ්නයේ සම්පූර්ණ විෂය පථයට පිළිතුරු දීමට මට අවශ්‍ය නොවීය, නමුත් විකල්ප සඳහා යොමුවී සිටින පුද්ගලයින් සඳහා වටිනා තොරතුරු එක් කිරීමට.
CsBalazsHungary

16

පයිතන් ලෝකයෙන් ඉතා හොඳ අදහසක් වන්නේ අච්චු ආරෝපණ භාෂා ය ; TAL හඳුන්වා දුන්නේ Zope (එබැවින් "Zope Page Template", ZPT) වන අතර එය ප්‍රමිතියකි, PHP, XSLT සහ Java වලද ක්‍රියාත්මක වේ (මම පයිතන් / Zope සහ PHP අවතාර භාවිතා කර ඇත). සැකසීමේ භාෂා මෙම පන්තියේදී, ඉහත එක් උදාහරණයක් මේ වගේ විය හැකිය:

<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name">Example product</td>
        <td tal:content="product/description">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

කේතය සාමාන්‍ය HTML (හෝ XHTML) සහ XML නාම අවකාශයක විශේෂ ලක්ෂණ ලෙස පෙනේ; එය බ්‍රව්සරයකින් නැරඹිය හැකි අතර නිර්මාණකරුවෙකු විසින් ආරක්ෂිතව වෙනස් කළ හැකිය. මැක්‍රෝස් සඳහා සහ i18n සඳහා ද සහාය ඇත:

<h1 i18n:translate="">Our special offers</h1>
<table>
    <tr tal:repeat="product products">
        <td tal:content="product/name"
            i18n:translate="">Example product</td>
        <td tal:content="product/description"
            i18n:translate="">A nice description</td>
        <td tal:content="product/price">1.23</td>
    </tr>
</table>

අන්තර්ගතයේ පරිවර්තන තිබේ නම් ඒවා භාවිතා වේ.

මම ජාවා ක්‍රියාත්මක කිරීම ගැන වැඩි යමක් දන්නේ නැහැ .


1
ජේඑස්පී 2009 දෙසැම්බරයේ සිට මේ සඳහා සහාය වන ෆේස්ලෙට්ස් විසින් අනුප්‍රාප්තිකය. ෆේස්ලට් ද එක්ස්එම්එල් මත පදනම් වේ. අන් අය අතර ද බලන්න ජාවා EE දී Facelets පරිච්ඡේදය 6 නිබන්ධනය සහ ui:xxxFacelts VDL දී ටැග් .
BalusC

මම ෆේස්ලට් ගැන හොඳින් නොදනිමි, නමුත් IIRC යනු අභිරුචි XML අංග ක්‍රියාත්මක කරන පන්ති ලිවීමයි. TAL / ZPT ක්‍රමය නම් සත්‍ය (X) HTML අඩංගු අච්චු මුල් අංග පිරවීම හෝ ප්‍රතිස්ථාපනය කිරීම විශේෂ ලක්ෂණ සහිතව තිබීම; මේ අනුව, ඔබට වැඩකරන අච්චුව නැරඹිය හැකි අතර ලස්සන ව්‍යාජ අන්තර්ගතයන් සහිත මූලාකෘතියක් දැකිය හැකිය. අභිරුචි ගුණාංග භාවිතා කරමින් මුල් HTML මූලද්‍රව්‍ය (අතිරේක නාම අවකාශයක්) වෙනස් කිරීමට ෆේස්ලට් ඉඩ දෙන බව මට විශ්වාස නැත.
ටොබියාස්

මට මේ ෆේස්ලට් දේවල් ගැන තවත් බැලීමක් කළා. එහි සියලු ආකාරයේ වලංගු කිරීමේ පහසුකම් ආදිය අඩංගු වන අතර එමඟින් TAL ට වඩා සම්පූර්ණයෙන්ම වෙනස් දර්ශනයක් අනුගමනය කරයි. TAL ක්‍රමය නම්, "තර්කනය හැකි තරම් පිරිසිදුව අච්චුවෙන් පිටත තබා ගන්න; සියලු සංකීර්ණ දේවල් එය පෝෂණය කරන පාලක විසින් කළ යුතුද යන්නයි." නිර්මාණකරුවෙකුට ඔහු / ඇය එය වෙනස් කිරීමට ෆේස්ලෙට් අච්චුවක් ලබා නොදේ. එය කළ නොහැකි ය. උත්පාදනය කළ අන්තර්ගතය සම්බන්ධයෙන් - එය tal:replace="structure (expression)"සෑම විටම ගුණාංග භාවිතා කිරීමක් වැනිය .
ටොබියාස්

15

ජේඑස්පී වල පිටපත් භාවිතා කිරීම හොඳ පුරුද්දක් නොවේ.

ඒ වෙනුවට, ඔබට භාවිතා කළ හැකිය:

  1. JSTL ටැග්
  2. EL ප්‍රකාශන
  3. අභිරුචි ටැග්- ඔබට භාවිතා කිරීමට ඔබේම ටැග් අර්ථ දැක්විය හැකිය.

කරුණාකර යොමු වන්න:

  1. http://docs.oracle.com/javaee/1.4/tutorial/doc/JSTL3.html
  2. ඊ.එල්

14

ෂුවර්, ප්රතිස්ථාපනය කරන්න <%! counter++; %>කවුන්ටරය වැඩි කිරීමේ අවශ්‍යතාවය පිළිබඳව ව්‍යාපාරික ස්ථරයට දැනුම් දී ඇති සිදුවීම් නිෂ්පාදක-පාරිභෝගික ගෘහ නිර්මාණ ශිල්පය මගින් , එය ඒ අනුව ප්‍රතික්‍රියා කරන අතර ඉදිරිපත් කරන්නන් හට අදහස් යාවත්කාලීන කරන ලෙස දැනුම් දෙයි. දත්ත සමුදා ගනුදෙනු ගණනාවක් සම්බන්ධ වන අතර, අනාගතයේ දී කවුන්ටරයේ නව සහ පැරණි වටිනාකම දැන ගැනීමට අපට අවශ්‍ය වනු ඇත, එය වැඩි කර ඇත්තේ කවුරුන්ද සහ කුමන අරමුණක් ඇතිවද යන්න. ස්ථර මුළුමනින්ම විසන්ධි වී ඇති බැවින් නිසැකවම අනුක්‍රමිකකරණය සම්බන්ධ වේ. RMI, IIOP, SOAP හරහා ඔබේ කවුන්ටරය වැඩි කිරීමට ඔබට හැකි වේ. නමුත් HTML පමණක් අවශ්‍ය වන අතර, එය ක්‍රියාත්මක නොකරන බැවින් එය එතරම් ලෞකික අවස්ථාවකි. ඔබගේ නව ඉලක්කය වන්නේ ඔබේ නව දිලිසෙන E7, 64GB RAM සේවාදායකයේ තත්පරයට වර්ධක 250 ක් කරා ළඟා වීමයි.

මට අවුරුදු 20 කට වඩා වැඩි කාලයක් වැඩසටහන්කරණයේ යෙදී ඇත, බොහෝ ව්‍යාපෘති සෙක්ස්ටෙට් වලට පෙර අසාර්ථක වේ: නැවත භාවිතා කළ හැකි ප්‍රතිස්ථාපනය කිරීමේ හැකියාව OO- හැකියාව නිදොස් කිරීමේ හැකියාව පරීක්ෂා කිරීමේ හැකියාව නඩත්තු කිරීමේ හැකියාව පවා අවශ්‍ය වේ. ක්‍රියාකාරීත්වය ගැන පමණක් සැලකිලිමත් වූ පුද්ගලයින් විසින් පවත්වාගෙන යනු ලබන වෙනත් ව්‍යාපෘති අතිශයින් සාර්ථක විය. තවද, ව්‍යාපෘතියේ ඉතා ඉක්මණින් ක්‍රියාත්මක කරන ලද දැඩි වස්තු ව්‍යුහය මඟින් පිරිවිතරයන්හි (අකා වේගවත්) වෙනස්වීම් වලට අනුවර්තනය වීමට නොහැකි වේ.

එබැවින් ව්‍යාපෘතියේ මුල් අවධියේදී හෝ විශේෂයෙන් අවශ්‍ය නොවන විට “ස්ථර” හෝ අතිරික්ත දත්ත ව්‍යුහයන් නිර්වචනය කිරීමේ ක්‍රියාකාරකම් කල් දැමීමක් ලෙස මම සලකමි.  


11

තාක්ෂණික වශයෙන්, ජේඑස්පී සියල්ලම ධාවන කාලය තුළ සර්වට්ලට් බවට පරිවර්තනය වේ . ජේඑස්පී මුලින් නිර්මාණය කරන ලද්දේ එම්වීසී රටාව අනුගමනය කරමින් ව්‍යාපාර තර්කනය සහ සැලසුම් තර්කනය විසන්ධි කිරීමේ අරමුණින් ය. එබැවින් ජේඑස්පී යනු තාක්ෂණික වශයෙන් සියලුම ජාවා කේත වේ. නමුත් ප්‍රශ්නයට පිළිතුරු සැපයීම සඳහා, ටැග් පුස්තකාල සාමාන්‍යයෙන් ජේඑස්පී පිටුවලට තර්කනය (ජාවා කේත ඉවත් කිරීම) යෙදීම සඳහා යොදා ගනී.


8

අපි ජාවා වෙබ් යෙදුමක පහත සඳහන් දෑ භාවිතා කරන්නේ නම්, ජාවා කේතය ජේඑස්පී පෙරබිමෙන් ඉවත් කළ හැකිය.

  1. වෙබ් යෙදුම සඳහා MVC ගෘහ නිර්මාණ ශිල්පය භාවිතා කරන්න

  2. JSP ටැග් භාවිතා කරන්න

    ඒ. සම්මත ටැග්

    බී. අභිරුචි ටැග්

  3. ප්‍රකාශන භාෂාව


8

ජේඑස්පී ලිපිගොනු වල ජාවා කේතය වළක්වා ගන්නේ කෙසේද?

ප්‍රකාශන භාෂාවට ( EL ) අමතරව JSTL වැනි ටැබ් පුස්තකාල ටැග් භාවිතා කළ හැකිය . නමුත් ජේඑස්පී සමඟ ඊඑල් හොඳින් ක්‍රියා නොකරයි. එබැවින් ජේඑස්පී සම්පූර්ණයෙන්ම අතහැර ෆේස්ලට් භාවිතා කිරීම වඩා හොඳය .

ජේඑස්එෆ් (ජාවා සර්වර් ෆේස්) සඳහා නිර්මාණය කරන ලද පළමු ජේඑස්පී නොවන පිටු ප්‍රකාශන භාෂාව ෆේස්ලෙට්ස් වන අතර එය ජේඑස්පී සංවර්ධකයින්ට ජේඑස්පී හා සසඳන විට සරල හා වඩා ප්‍රබල ක්‍රමලේඛන ආකෘතියක් සපයයි. වෙබ් යෙදුම් සංවර්ධනය සඳහා ජේඑස්පී හි ඇති විවිධ ගැටළු එය විසඳයි.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

මූලාශ්රය


මම අනිවාර්යයෙන්ම මෙම ප්‍රතිචාරය දෙවෙනි කරමි. ෆේස්ලට් සමඟ හෝ නැතිව ජේඑස්එෆ්. මීට වසර 10 කට පෙර ජේඑස්පී හි සංවර්ධනය බොහෝ දුරට නතර වී ඇතැයි මම සිතුවෙමි. මම අවසන් වරට ජේඑස්පී ලිව්වේ 2000 දී!
කැස්පේජ්

4

ස්ක්‍රිප්ට්ලට් භාවිතා කිරීම ඉතා පැරණි ක්‍රමයක් වන අතර එය නිර්දේශ නොකරයි. ඔබේ ජේඑස්පී පිටුවල යමක් සෘජුවම ප්‍රතිදානය කිරීමට අවශ්‍ය නම් ජේඑස්ටීඑල් සමඟ ප්‍රකාශන භාෂාව ( ඊඑල් ) භාවිතා කරන්න .

Velocity, Freemarker, Thymeleaf වැනි සැකිලි එන්ජිමක් භාවිතා කිරීම වැනි වෙනත් විකල්ප ද ඇත. නමුත් EL සහ JSTL සමඟ සරල JSP භාවිතා කිරීම මගේ අරමුණ බොහෝ විට ඉටු කරන අතර එය ආරම්භකයෙකුට සරලම බව පෙනේ.

එසේම, දර්ශන තට්ටුව තුළ ව්‍යාපාර තර්කනය කිරීම හොඳම භාවිතයක් නොවන බව සලකන්න, ඔබ සේවා ස්ථරයේ ඔබේ ව්‍යාපාර තර්කනයන් සිදු කළ යුතු අතර ප්‍රතිදාන ප්‍රති result ලය පාලකයෙකු හරහා ඔබේ අදහස් වෙත යොමු කරන්න.


3

ඒ කිසිවක් තවදුරටත් භාවිතා නොවේ මගේ මිතුරා, මගේ අවවාදය නම් සේවාදායකයෙන් දර්ශනය (css, html, javascript, ආදිය) විකේතනය කිරීමයි.

මගේ නඩුවේදී මම කෝණ සමඟ දර්ශනය හසුරුවන අතර අවශ්‍ය ඕනෑම දත්තයක් සේවාදායකයෙන් විවේක සේවා භාවිතා කරමි.

මාව විශ්වාස කරන්න, මෙය ඔබ සැලසුම් කරන ආකාරය වෙනස් කරයි


3

UI නිර්මාණය සඳහා කොඳු නාරටිය, ජාවාස්ක්‍රිප්ට් රාමුව වැනි කෝණික භාවිතා කර විවේක api භාවිතා කරමින් දත්ත ලබා ගන්න. මෙය UI වෙතින් ජාවා පරායත්තතාවය සම්පූර්ණයෙන්ම ඉවත් කරයි.


3

ජේඑස්පී 2.0 හි "ටැග් ෆයිල්ස්" නමින් විශේෂාංගයක් ඇත , ඔබට බාහිර javaකේතයකින් තොරව ටැග් ලිවිය හැකිය tld. ඔබට .tagගොනුවක් සාදා එය තුළට දැමිය යුතු අතර WEB-INF\tagsඔබේ ටැග් ඇසුරුම් කිරීම සඳහා නාමාවලි ව්‍යුහයක් පවා නිර්මාණය කළ හැකිය.

උදාහරණයක් වශයෙන්:

/WEB-INF/tags/html/label.tag

<%@tag description="Rensders a label with required css class" pageEncoding="UTF-8"%>
<%@attribute name="name" required="true" description="The label"%>

<label class="control-label control-default"  id="${name}Label">${name}</label>

එය මෙන් භාවිතා කරන්න

<%@ taglib prefix="h" tagdir="/WEB-INF/tags/html"%>
<h:label  name="customer name" />

එසේම, ඔබට ටැග් බොඩි පහසුවෙන් කියවිය හැකිය

/WEB-INF/tags/html/bold.tag
<%@tag description="Bold tag" pageEncoding="UTF-8"%>
<b>
  <jsp:doBody/>
</b>

එය භාවිතා කරන්න

<%@ taglib prefix="h" tagdir="/WEB-INF/tags/bold"%>
<h:bold>Make me bold</h:bold>

සාම්පල ඉතා සරල නමුත් ඔබට මෙහි සංකීර්ණ කාර්යයන් රාශියක් කළ හැකිය. : (උදා: ඔබ වෙනත් ටැග් භාවිතා කළ හැකිය පිළිබඳව කරුණාකර අවධානය යොමු කරන්න JSTLවගේ ටැග් පාලනය කර ඇති if/forEcah/chosenවගේ පෙළ හැසිරවීම format/contains/uppercaseහෝ SQL ටැග් select/updateඋදාහරණයක් සියලු ආකාරයේ පරාමිතීන් සම්මත,), Hashmap, ප්රවේශ session, requestද, ... ඔබගේ ටැගය ගොනුවේ.

ටැග් ගොනුව ඉතා පහසුවෙන් සංවර්ධනය කර ඇති අතර ජේඑස්පී ලිපිගොනු වැනි සේවාදායකය වෙනස් කිරීමේදී ඔබට ඒවා නැවත ආරම්භ කිරීමට අවශ්‍ය නොවීය. මෙය ඔවුන් සංවර්ධනය සඳහා පහසු කරයි.

හොඳ ටැග් රාශියක් ඇති ස්ට්‍රට්ස් 2 වැනි රාමුවක් ඔබ භාවිතා කළත්, ඔබේම ටැග් තිබීම ඔබේ කේතය විශාල වශයෙන් අඩු කළ හැකි බව ඔබට පෙනී යනු ඇත. ඔබට ඔබේ ටැග් පරාමිතීන් නූල් වලට යැවිය හැකි අතර මේ ආකාරයෙන් ඔබේ රාමු ටැගය රිසිකරණය කරන්න.

ඔබට ජාවා වළක්වා ගැනීමට පමණක් නොව ඔබේ HTML කේත අවම කිරීමට ටැගය භාවිතා කළ හැකිය. මගේ පිටුවල කේත අනුපිටපත් ආරම්භ වූ විගසම මම HTML කේත සමාලෝචනය කිරීමට සහ ටැග් සෑදීමට උත්සාහ කරමි.

(ඔබ ජේඑස්පී කේතයේ ජාවා භාවිතා කිරීම අවසන් කළත්, මම නොසිතමි, ඔබට එම කේතය ටැගයකින් සංයුක්ත කළ හැකිය)


1

බොහෝ පිළිතුරු පවසන පරිදි, JSTL භාවිතා කරන්න හෝ ඔබේම අභිරුචි ටැග් සාදන්න. අභිරුචි ටැග් සෑදීම පිළිබඳ හොඳ පැහැදිලි කිරීමක් මෙන්න


1
  1. ඔබේ සේවාදායක පන්ති තුළ ඔබේ අගයන් සහ පරාමිතීන් සාදන්න
  2. JSTL / Taglib භාවිතා කර ඔබේ JSP තුළ එම අගයන් සහ පරාමිතීන් ලබා ගන්න

මෙම ප්‍රවේශයේ ඇති හොඳ දෙය නම් ඔබේ කේතය කේත වැනි HTML ද වීමයි!


0

ඊඑල් ප්‍රකාශනය සමඟ ජේඑස්ටීඑල් ටැග් භාවිතා කිරීමෙන් ඔබට මෙය වළක්වා ගත හැකිය. පහත දැක්වෙන දෑ ඔබගේ jsp පිටුවේ තබන්න:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.