谢谢大家帮我看一下pet store 中的href 语法,究竟是如何实现页面转向 看下用的是什么标签,如果是Struts标签的话,此处是全局跳转 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大师,快帮忙看看,下面这些链接是不是很象这个什么Struts,是用于掩藏链接地址的一种手段吗 <a href="category?category_id=FISH" onmouseover="img_on('fish')" onmouseout="img_off('fish')"><img src="/estore/images/fish.gif" border="0" name="img_fish"></a> <img src="/estore/images/separator.gif" border="0"> <a href="category?category_id=DOGS" onmouseover="img_on('dogs')" onmouseout="img_off('dogs')"><img src="/estore/images/dogs.gif" border="0" name="img_dogs"></a> <img src="/estore/images/separator.gif" border="0"> <a href="category?category_id=REPTILES" onmouseover="img_on('reptiles')" onmouseout="img_off('reptiles')"><img src="/estore/images/reptiles.gif" border="0" name="img_reptiles"></a> <img src="/estore/images/separator.gif" border="0"> <a href="category?category_id=CATS" onmouseover="img_on('cats')" onmouseout="img_off('cats')"><img src="/estore/images/cats.gif" border="0" name="img_cats"></a> <img src="/estore/images/separator.gif" border="0"> <a href="category?category_id=BIRDS" onmouseover="img_on('birds')" onmouseout="img_off('birds')"><img src="/estore/images/birds.gif" border="0" name="img_birds"></a> 谢谢.可我还是不怎么明白,哎,基础太差了,几位前辈可以给我举一个简单范例吗比如说 , a.jsp 如何 调用 b.jsp , 关键是这个传递的参数究竟是在哪里设定的, 我应该如何去控制 http://community.csdn.net/Expert/topic/5756/5756718.xml?temp=.5951349 对不起,我还是闹不明白,能不能再多推荐一点资料,我再举一个例子吧 <a href="/estore/control/signin" onmouseover="img_on('signin')" onmouseout="img_off('signin')"><img src="/estore/images/sign-in.gif" border="0" name="img_signin"></a>这是打开登陆界面,根下有signin.jsp文件,被调用了,可我不明白的是,这些*.jsp是如何组织起来的,是在哪里定义 "/estore/control/signin" = signin.jsp 你看你的web.config 在里面配置的 我估计是用到了struts 所有的请求都到了ActionServlet然后在看看你的 struts-config 里面是不是有个signin 它的redirect到了 signin.jsp? 我用的是 SUN公司的 pet store 1.1.2 版,这是一个J2EE的工程DEMO主体结构是 EJB包 + jsp包 , 发布的是*.ear ,也就是 *.jar + *.war与struts结构是完全不同的另一种结构 jsp里面通过JNDI,可以找到并调用EJB我现在头疼的是jsp是如何找到并调用jsp,怎样实现的 这个东西没接触过,,,,我都一年没接触java了 你还是看看web.config或者把web.config发出来看看 肯定能找到他调用的路径的 谢谢大哥,没有web.config文件,看web.xml可以吗,这是前台的<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN' 'http://java.sun.com/j2ee/dtds/web-app_2.2.dtd'><web-app> <display-name>WebTier</display-name> <description>Web Tier DD for the PetStore application</description> <servlet> <servlet-name>webTierEntryPoint</servlet-name> <display-name>centralServlet</display-name> <description>no description</description> <servlet-class>com.sun.j2ee.blueprints.petstore.control.web.MainServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>webTierEntryPoint</servlet-name> <url-pattern>/control/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>populateServlet</servlet-name> <display-name>Populate Servlet</display-name> <description>no description</description> <servlet-class>com.sun.j2ee.blueprints.tools.populate.web.PopulateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>populateServlet</servlet-name> <url-pattern>/populate</url-pattern> </servlet-mapping> <session-config> <session-timeout>54</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <resource-ref> <res-ref-name>jdbc/EstoreDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <env-entry> <env-entry-name>ejb/catalog/CatalogDAOClass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>com.sun.j2ee.blueprints.shoppingcart.catalog.dao.CatalogDAOImpl</env-entry-value> </env-entry> <env-entry> <env-entry-name>ejb/profilemgr/ProfileMgrDAOClass</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>com.sun.j2ee.blueprints.personalization.profilemgr.dao.ProfileMgrDAOImpl</env-entry-value> </env-entry> <env-entry> <env-entry-name>server/ServerType</env-entry-name> <env-entry-value>Java 2 Enterprise Edition Reference Implementation</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry> <ejb-ref> <ejb-ref-name>ejb/catalog/Catalog</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.j2ee.blueprints.shoppingcart.catalog.ejb.CatalogHome</home> <remote>com.sun.j2ee.blueprints.shoppingcart.catalog.ejb.Catalog</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/cart/Cart</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.j2ee.blueprints.shoppingcart.cart.ejb.ShoppingCartHome</home> <remote>com.sun.j2ee.blueprints.shoppingcart.cart.ejb.ShoppingCart</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/customer/Customer</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.j2ee.blueprints.customer.customer.ejb.CustomerHome</home> <remote>com.sun.j2ee.blueprints.customer.customer.ejb.Customer</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/profilemgr/ProfileMgr</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <home>com.sun.j2ee.blueprints.personalization.profilemgr.ejb.ProfileMgrHome</home> <remote>com.sun.j2ee.blueprints.personalization.profilemgr.ejb.ProfileMgr</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/scc/Scc</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>com.sun.j2ee.blueprints.petstore.control.ejb.ShoppingClientControllerHome</home> <remote>com.sun.j2ee.blueprints.petstore.control.ejb.ShoppingClientController</remote> </ejb-ref> <ejb-ref> <ejb-ref-name>ejb/inventory/Inventory</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <home>com.sun.j2ee.blueprints.inventory.ejb.InventoryHome</home> <remote>com.sun.j2ee.blueprints.inventory.ejb.Inventory</remote> </ejb-ref></web-app> 嘿嘿 不好意思 .net上是web.config....忘记了 你看这段 <servlet> <servlet-name>webTierEntryPoint</servlet-name> <display-name>centralServlet</display-name> <description>no description</description> <servlet-class>com.sun.j2ee.blueprints.petstore.control.web.MainServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>webTierEntryPoint</servlet-name> <url-pattern>/control/*</url-pattern> </servlet-mapping> <url-pattern>/control/*</url-pattern> 表示 你所有"control/包含的请求都交给com.sun.j2ee.blueprints.petstore.control.web.MainServlet来处理 包括你的“/estore/control/signin”然后 MainServlet你的init方法肯定也解析了一个xml 那个xml 里面 就有一个配置 名字是signin 路径就应该是signin.jsp了 大致就是这个意思了 谢谢,帮忙再看看,这是 MainServlet里的init方法,还有另两个XML文件,其中确实有配置signin.jsp的路径, 可我还是难以理解究竟是如何用法,可以讲的详细点吗public void init() { Debug.println("MainServlet: Initializing"); String requestMappingsURL = null; try { requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString(); } catch (java.net.MalformedURLException ex) { Debug.println("ScreenFlowManager: initializing ScreenFlowManager malformed URL exception: " + ex); } urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL); getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings); Debug.println("MainServlet: loaded urlMappings"); String serverType = null; try { InitialContext ic = new InitialContext(); serverType = (String)ic.lookup(JNDINames.SERVER_TYPE); getServletContext().setAttribute(WebKeys.ServerTypeKey, serverType); } catch (NamingException ex) { Debug.println("Server Type not specified in deployment descriptor: using default J2ee Security Adapter"); } getScreenFlowManager(); getRequestProcessor(); Debug.println("MainServlet: Initialization complete"); }--------------------------requestmappings.xml------------------------<?xml version="1.0" encoding="ISO-8859-1"?><request-mappings> <screen-definition url="/WEB-INF/xml/screendefinitions.xml" language="en_US"/> <screen-definition url="/WEB-INF/xml/ja/screendefinitions.xml" language="ja_JP"/> <default-screen>MAIN</default-screen> <signin-screen>SIGN_IN</signin-screen> <signin-error-screen>SIGN_IN_ERROR</signin-error-screen> <url-mapping url="/main" screen="MAIN"/> <url-mapping url="/search" screen="SEARCH"/> <url-mapping url="/category" screen="CATEGORY"/> <url-mapping url="/product" screen="PRODUCT"/> <url-mapping url="/catalog" screen="CATALOG"/> <url-mapping url="/error" screen="ERROR"/> <url-mapping url="/accountcreated" screen="ACCOUNT_CREATED"/> <url-mapping url="/createnewaccount" screen="CREATE_ACCOUNT"/> <url-mapping url="/editaccount" screen="EDIT_ACCOUNT" requiresSignin="true"/> <url-mapping url="/accountedited" screen="ACCOUNT_UPDATED"/> <url-mapping url="/signin" screen ="SIGN_IN_SUCCESS" requiresSignin="true"/> <url-mapping url="/signout" screen="SIGN_OUT" useRequestHandler="true" > <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SignoutHandler</request-handler-class> </url-mapping> <url-mapping url="/language" screen="MAIN" useRequestHandler="true" > <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.LanguageHandler</request-handler-class> </url-mapping> <url-mapping url="/help" screen="HELP"/> <url-mapping url="/checkout" screen="CHECK_OUT"/> <url-mapping url="/placeorder" screen="PLACE_ORDER" requiresSignin="true"/> <url-mapping url="/productdetails" screen="PRODUCT_DETAILS"/> <url-mapping url="/verifysignin" screen="SIGN_IN_SUCCESS" useRequestHandler="true" useFlowHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninFlowHandler"> <handler-result result="2" screen="SIGN_IN_ERROR"/> <handler-result result="1" screen="SIGN_IN_SUCCESS"/> </flow-handler> </url-mapping> <url-mapping url="/validateshippinginformation" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler"> <handler-result result="1" screen="VALIDATE_BILLING_INFORMATION"/> <handler-result result="2" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/validatebillinginformation" screen="VALIDATE_BILLING_INFORMATION" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractBillingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler"> <handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/> <handler-result result="2" screen="VALIDATE_BILLING_INFORMATION"/> <handler-result result="3" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/entershippingaddress" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler"> <handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/> <handler-result result="2" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/validatenewaccount" screen="ACCOUNT_CREATED" useRequestHandler="true" useFlowHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler"> <handler-result result="1" screen="ACCOUNT_CREATED"/> <handler-result result="2" screen="ACCOUNT_CREATED"/> <handler-result result="3" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/updateaccount" screen="ACCOUNT_UPDATED" useRequestHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class> </url-mapping> <url-mapping url="/missingformdata" screen="MISSING_FORM_DATA"/> <url-mapping url="/commitorder" useRequestHandler="true" screen="COMMIT_ORDER" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.OrderHandler</request-handler-class> </url-mapping> <url-mapping url="/cart" useRequestHandler="true" screen="CART"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.CartHandler</request-handler-class> </url-mapping> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException" screen="SIGN_IN_ERROR"/> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.DuplicateAccountException" screen="DUPLICATE_ACCOUNT"/> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException" screen="ERROR"/></request-mappings > ----------------------screendefinitions.xml------------------------<?xml version="1.0" encoding="ISO-8859-1"?><request-mappings> <screen-definition url="/WEB-INF/xml/screendefinitions.xml" language="en_US"/> <screen-definition url="/WEB-INF/xml/ja/screendefinitions.xml" language="ja_JP"/> <default-screen>MAIN</default-screen> <signin-screen>SIGN_IN</signin-screen> <signin-error-screen>SIGN_IN_ERROR</signin-error-screen> <url-mapping url="/main" screen="MAIN"/> <url-mapping url="/search" screen="SEARCH"/> <url-mapping url="/category" screen="CATEGORY"/> <url-mapping url="/product" screen="PRODUCT"/> <url-mapping url="/catalog" screen="CATALOG"/> <url-mapping url="/error" screen="ERROR"/> <url-mapping url="/accountcreated" screen="ACCOUNT_CREATED"/> <url-mapping url="/createnewaccount" screen="CREATE_ACCOUNT"/> <url-mapping url="/editaccount" screen="EDIT_ACCOUNT" requiresSignin="true"/> <url-mapping url="/accountedited" screen="ACCOUNT_UPDATED"/> <url-mapping url="/signin" screen ="SIGN_IN_SUCCESS" requiresSignin="true"/> <url-mapping url="/signout" screen="SIGN_OUT" useRequestHandler="true" > <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SignoutHandler</request-handler-class> </url-mapping> <url-mapping url="/language" screen="MAIN" useRequestHandler="true" > <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.LanguageHandler</request-handler-class> </url-mapping> <url-mapping url="/help" screen="HELP"/> <url-mapping url="/checkout" screen="CHECK_OUT"/> <url-mapping url="/placeorder" screen="PLACE_ORDER" requiresSignin="true"/> <url-mapping url="/productdetails" screen="PRODUCT_DETAILS"/> <url-mapping url="/verifysignin" screen="SIGN_IN_SUCCESS" useRequestHandler="true" useFlowHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninFlowHandler"> <handler-result result="2" screen="SIGN_IN_ERROR"/> <handler-result result="1" screen="SIGN_IN_SUCCESS"/> </flow-handler> </url-mapping> <url-mapping url="/validateshippinginformation" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler"> <handler-result result="1" screen="VALIDATE_BILLING_INFORMATION"/> <handler-result result="2" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/validatebillinginformation" screen="VALIDATE_BILLING_INFORMATION" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractBillingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler"> <handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/> <handler-result result="2" screen="VALIDATE_BILLING_INFORMATION"/> <handler-result result="3" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/entershippingaddress" useRequestHandler="true" useFlowHandler="true" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler"> <handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/> <handler-result result="2" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/validatenewaccount" screen="ACCOUNT_CREATED" useRequestHandler="true" useFlowHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class> <flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler"> <handler-result result="1" screen="ACCOUNT_CREATED"/> <handler-result result="2" screen="ACCOUNT_CREATED"/> <handler-result result="3" screen="MISSING_FORM_DATA"/> </flow-handler> </url-mapping> <url-mapping url="/updateaccount" screen="ACCOUNT_UPDATED" useRequestHandler="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class> </url-mapping> <url-mapping url="/missingformdata" screen="MISSING_FORM_DATA"/> <url-mapping url="/commitorder" useRequestHandler="true" screen="COMMIT_ORDER" requiresSignin="true"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.OrderHandler</request-handler-class> </url-mapping> <url-mapping url="/cart" useRequestHandler="true" screen="CART"> <request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.CartHandler</request-handler-class> </url-mapping> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException" screen="SIGN_IN_ERROR"/> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.DuplicateAccountException" screen="DUPLICATE_ACCOUNT"/> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException" screen="ERROR"/></request-mappings > ----------------------------screendefinitions.xml-------------------------------<screen> <screen-name>SIGN_IN</screen-name> <parameter key="HtmlTitle" value="Sign In" direct="true"/> <parameter key="HtmlBanner" value="/banner.jsp" direct="false"/> <parameter key="HtmlTopIndex" value="/topindex.jsp" direct="false"/> <parameter key="HtmlBody" value="/signin.jsp" direct="false"/> <parameter key="HtmlFooter" value="/footer.jsp" direct="false"/> <parameter key="Annotation" value="/estore/annotation/ann_security_j2ee.jsp" direct="true"/> </screen> 你把 整个MainServlet都贴出来 因为跳转不可能在init里面的 我没调试也不知道requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString(); 这个到底读出来的是什么。。 --------------------MainServlet.java------------------------------/* * $Id: MainServlet.java,v 1.14.4.8 2001/03/15 00:40:02 brydon Exp $ * Copyright 2001 Sun Microsystems, Inc. All rights reserved. * Copyright 2001 Sun Microsystems, Inc. Tous droits r?erv?. */package com.sun.j2ee.blueprints.petstore.control.web;import javax.servlet.ServletException;import javax.servlet.ServletContext;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.PrintWriter;import java.io.OutputStreamWriter;import java.beans.Beans;import java.io.IOException;import java.util.HashMap;import java.util.Locale;import javax.naming.NamingException;import javax.naming.InitialContext;import com.sun.j2ee.blueprints.petstore.util.JNDINames;import com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException;import com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException;import com.sun.j2ee.blueprints.util.tracer.Debug;import com.sun.j2ee.blueprints.petstore.control.web.ModelManager;import com.sun.j2ee.blueprints.petstore.control.web.CustomerWebImpl;import com.sun.j2ee.blueprints.petstore.control.web.ScreenFlowXmlDAO;import com.sun.j2ee.blueprints.petstore.control.web.RequestProcessor;import com.sun.j2ee.blueprints.petstore.util.WebKeys;import com.sun.j2ee.blueprints.petstore.util.JSPUtil;public class MainServlet extends HttpServlet { private HashMap urlMappings; public void init() { Debug.println("MainServlet: Initializing"); String requestMappingsURL = null; try { requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString(); } catch (java.net.MalformedURLException ex) { Debug.println("ScreenFlowManager: initializing ScreenFlowManager malformed URL exception: " + ex); } urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL); getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings); Debug.println("MainServlet: loaded urlMappings"); String serverType = null; try { InitialContext ic = new InitialContext(); serverType = (String)ic.lookup(JNDINames.SERVER_TYPE); getServletContext().setAttribute(WebKeys.ServerTypeKey, serverType); } catch (NamingException ex) { Debug.println("Server Type not specified in deployment descriptor: using default J2ee Security Adapter"); } getScreenFlowManager(); getRequestProcessor(); Debug.println("MainServlet: Initialization complete"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String selectedURL = request.getPathInfo(); // the current tomcat is resetting the outputstream so this is a workaround if ((selectedURL != null) && selectedURL.equals("/white")) return; HttpSession session = request.getSession(); ScreenFlowManager screenManager = null; ModelManager modelManager= (ModelManager)request.getSession().getAttribute(WebKeys.ModelManagerKey); if ( modelManager == null ) { try { modelManager = (ModelManager) Beans.instantiate(this.getClass().getClassLoader(), "com.sun.j2ee.blueprints.petstore.control.web.ModelManager"); } catch (Exception exc) { throw new ServletException ("Cannot create bean of class ModelManager"); } session.setAttribute(WebKeys.ModelManagerKey, modelManager); modelManager.init(getServletContext(), session); } Debug.println("MainServlet: url " + selectedURL); // check if url is protected before processing request URLMapping current = getURLMapping(selectedURL); if ((current != null) && current.requiresSignin()) { CustomerWebImpl customer = modelManager.getCustomerWebImpl(); if (customer.isLoggedIn()) { doProcess(request); } else { String signinScreen = getScreenFlowManager().getSigninScreen(); session.setAttribute(WebKeys.CurrentScreen, signinScreen); session.setAttribute(WebKeys.SigninTargetURL, selectedURL); } } else { doProcess(request); } /** Default to the base language or the site. If a language is found in the session use that template. */ Locale locale = JSPUtil.getLocale(request.getSession()); getServletConfig().getServletContext().getRequestDispatcher(getScreenFlowManager().getTemplate(locale)).forward(request, response); } private void doProcess(HttpServletRequest request) throws ServletException { try { getRequestProcessor().processRequest(request); getScreenFlowManager().getNextScreen(request); } catch (Throwable ex) { String className = ex.getClass().getName(); String exceptionScreen = getScreenFlowManager().getExceptionScreen(className); Debug.println("MainServlet: target screen is: " + exceptionScreen); // put the exception in the request request.setAttribute("javax.servlet.jsp.jspException", ex); if (exceptionScreen != null) { request.getSession().setAttribute(WebKeys.CurrentScreen, exceptionScreen); } else { // send to general error screen Debug.println("MainServlet: unknown exception: " + className); throw new ServletException("MainServlet: unknown exception: " + className); } } } private RequestProcessor getRequestProcessor() { RequestProcessor rp = (RequestProcessor)getServletContext().getAttribute(WebKeys.RequestProcessorKey); if ( rp == null ) { Debug.println("MainServlet: initializing request processor"); rp = new RequestProcessor(); rp.init(getServletContext()); getServletContext().setAttribute(WebKeys.RequestProcessorKey, rp); } return rp; } private ScreenFlowManager getScreenFlowManager() { ScreenFlowManager screenManager = (ScreenFlowManager)getServletContext().getAttribute(WebKeys.ScreenManagerKey); if (screenManager == null ) { Debug.println("MainServlet: Loading screen flow definitions"); screenManager = new ScreenFlowManager(); screenManager.init(getServletContext()); getServletContext().setAttribute(WebKeys.ScreenManagerKey, screenManager); } return screenManager; } /** * The UrlMapping object contains information that will match * a url to a mapping object that contains information about * the current screen, the RequestHandler that is needed to * process a request, and the RequestHandler that is needed * to insure that the propper screen is displayed. */ private URLMapping getURLMapping(String urlPattern) { if ((urlMappings != null) && urlMappings.containsKey(urlPattern)) { return (URLMapping)urlMappings.get(urlPattern); } else { return null; } }} init() 方法是web容器 启动的的时候就解析的~~requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString();将XML解析成一个字符串 具体怎么排列的你调试下就知道了 我没安装环境。urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL); ScreenFlowXmlDAO 这个类是这个工程的类 我想应该是吧 这个字符串解析成一个key对应一个alue的 hashmap 大约就是 signin SIGN_IN_SUCCESS 的样子 然后将这个hashmap 保存 getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings);然后在页面点击连接的时候进行doget和dopost请求都进入 doGet(requet,response)方法 String selectedURL = request.getPathInfo(); 获得uri 然后经过处理 比较modelManager = (ModelManager) Beans.instantiate(this.getClass().getClassLoader(), "com.sun.j2ee.blueprints.petstore.control.web.ModelManager"); 这个就是转向的代码你这个是的deamo 你可以调试一下 一步一步的跟下就很清楚了 其中中间 还经过了很多的处理 有点复杂 我不调试也说不清 有关hibernate3.6的日志问题 一个hibernate 多对多应用上的问题 字符过滤,大家帮帮忙 oracle.jdbc failAL32UTF8Conv 面试大受挫折,求Java面试题大汇总(最少200求),附上答案者高分。应届毕业生应该注意那样东西,请大侠们指点,谢谢 axis 生成的java服务端代码怎样手动修改 微信IM 即时通讯发送视频如何保证文件大小? 新建qq群:9937743 资金短缺,我去北大青鸟面试老师!问几个问题,在线等 hibernate的composeid的问题! Tomcat突然生病?寻良医! 我用的TOMCAT服务器,当修改页面后能不能不重启动服务器?
<img src="/estore/images/separator.gif" border="0">
<a href="category?category_id=DOGS" onmouseover="img_on('dogs')" onmouseout="img_off('dogs')"><img src="/estore/images/dogs.gif" border="0" name="img_dogs"></a>
<img src="/estore/images/separator.gif" border="0">
<a href="category?category_id=REPTILES" onmouseover="img_on('reptiles')" onmouseout="img_off('reptiles')"><img src="/estore/images/reptiles.gif" border="0" name="img_reptiles"></a>
<img src="/estore/images/separator.gif" border="0">
<a href="category?category_id=CATS" onmouseover="img_on('cats')" onmouseout="img_off('cats')"><img src="/estore/images/cats.gif" border="0" name="img_cats"></a>
<img src="/estore/images/separator.gif" border="0">
<a href="category?category_id=BIRDS" onmouseover="img_on('birds')" onmouseout="img_off('birds')"><img src="/estore/images/birds.gif" border="0" name="img_birds"></a>
然后在看看你的 struts-config 里面是不是有个signin 它的redirect到了 signin.jsp?
与struts结构是完全不同的另一种结构
jsp里面通过JNDI,可以找到并调用EJB
我现在头疼的是jsp是如何找到并调用jsp,怎样实现的
或者把web.config发出来看看 肯定能找到他调用的路径的
<display-name>WebTier</display-name>
<description>Web Tier DD for the PetStore application</description> <servlet>
<servlet-name>webTierEntryPoint</servlet-name>
<display-name>centralServlet</display-name>
<description>no description</description>
<servlet-class>com.sun.j2ee.blueprints.petstore.control.web.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webTierEntryPoint</servlet-name>
<url-pattern>/control/*</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>populateServlet</servlet-name>
<display-name>Populate Servlet</display-name>
<description>no description</description>
<servlet-class>com.sun.j2ee.blueprints.tools.populate.web.PopulateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>populateServlet</servlet-name>
<url-pattern>/populate</url-pattern>
</servlet-mapping> <session-config>
<session-timeout>54</session-timeout>
</session-config> <welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/EstoreDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref> <env-entry>
<env-entry-name>ejb/catalog/CatalogDAOClass</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>com.sun.j2ee.blueprints.shoppingcart.catalog.dao.CatalogDAOImpl</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>ejb/profilemgr/ProfileMgrDAOClass</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>com.sun.j2ee.blueprints.personalization.profilemgr.dao.ProfileMgrDAOImpl</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>server/ServerType</env-entry-name>
<env-entry-value>Java 2 Enterprise Edition Reference Implementation</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry> <ejb-ref>
<ejb-ref-name>ejb/catalog/Catalog</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.sun.j2ee.blueprints.shoppingcart.catalog.ejb.CatalogHome</home>
<remote>com.sun.j2ee.blueprints.shoppingcart.catalog.ejb.Catalog</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/cart/Cart</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.sun.j2ee.blueprints.shoppingcart.cart.ejb.ShoppingCartHome</home>
<remote>com.sun.j2ee.blueprints.shoppingcart.cart.ejb.ShoppingCart</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/customer/Customer</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.sun.j2ee.blueprints.customer.customer.ejb.CustomerHome</home>
<remote>com.sun.j2ee.blueprints.customer.customer.ejb.Customer</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/profilemgr/ProfileMgr</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.sun.j2ee.blueprints.personalization.profilemgr.ejb.ProfileMgrHome</home>
<remote>com.sun.j2ee.blueprints.personalization.profilemgr.ejb.ProfileMgr</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/scc/Scc</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.sun.j2ee.blueprints.petstore.control.ejb.ShoppingClientControllerHome</home>
<remote>com.sun.j2ee.blueprints.petstore.control.ejb.ShoppingClientController</remote>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/inventory/Inventory</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.sun.j2ee.blueprints.inventory.ejb.InventoryHome</home>
<remote>com.sun.j2ee.blueprints.inventory.ejb.Inventory</remote>
</ejb-ref>
</web-app>
你看这段 <servlet>
<servlet-name>webTierEntryPoint</servlet-name>
<display-name>centralServlet</display-name>
<description>no description</description>
<servlet-class>com.sun.j2ee.blueprints.petstore.control.web.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>webTierEntryPoint</servlet-name>
<url-pattern>/control/*</url-pattern>
</servlet-mapping>
<url-pattern>/control/*</url-pattern> 表示 你所有"control/包含的请求都交给com.sun.j2ee.blueprints.petstore.control.web.MainServlet来处理 包括你的
“/estore/control/signin”
然后 MainServlet你的init方法肯定也解析了一个xml 那个xml 里面 就有一个配置 名字是signin 路径就应该是signin.jsp了 大致就是这个意思了
Debug.println("MainServlet: Initializing");
String requestMappingsURL = null;
try {
requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString();
} catch (java.net.MalformedURLException ex) {
Debug.println("ScreenFlowManager: initializing ScreenFlowManager malformed URL exception: " + ex);
}
urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL);
getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings);
Debug.println("MainServlet: loaded urlMappings");
String serverType = null;
try {
InitialContext ic = new InitialContext();
serverType = (String)ic.lookup(JNDINames.SERVER_TYPE);
getServletContext().setAttribute(WebKeys.ServerTypeKey, serverType);
} catch (NamingException ex) {
Debug.println("Server Type not specified in deployment descriptor: using default J2ee Security Adapter");
}
getScreenFlowManager();
getRequestProcessor();
Debug.println("MainServlet: Initialization complete");
}--------------------------requestmappings.xml------------------------
<?xml version="1.0" encoding="ISO-8859-1"?><request-mappings>
<screen-definition url="/WEB-INF/xml/screendefinitions.xml" language="en_US"/>
<screen-definition url="/WEB-INF/xml/ja/screendefinitions.xml" language="ja_JP"/> <default-screen>MAIN</default-screen>
<signin-screen>SIGN_IN</signin-screen>
<signin-error-screen>SIGN_IN_ERROR</signin-error-screen>
<url-mapping url="/main" screen="MAIN"/>
<url-mapping url="/search" screen="SEARCH"/>
<url-mapping url="/category" screen="CATEGORY"/>
<url-mapping url="/product" screen="PRODUCT"/>
<url-mapping url="/catalog" screen="CATALOG"/>
<url-mapping url="/error" screen="ERROR"/>
<url-mapping url="/accountcreated" screen="ACCOUNT_CREATED"/>
<url-mapping url="/createnewaccount" screen="CREATE_ACCOUNT"/>
<url-mapping url="/editaccount" screen="EDIT_ACCOUNT" requiresSignin="true"/>
<url-mapping url="/accountedited" screen="ACCOUNT_UPDATED"/> <url-mapping url="/signin" screen ="SIGN_IN_SUCCESS" requiresSignin="true"/>
<url-mapping url="/signout" screen="SIGN_OUT" useRequestHandler="true" >
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SignoutHandler</request-handler-class>
</url-mapping> <url-mapping url="/language" screen="MAIN" useRequestHandler="true" >
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.LanguageHandler</request-handler-class>
</url-mapping> <url-mapping url="/help" screen="HELP"/>
<url-mapping url="/checkout" screen="CHECK_OUT"/>
<url-mapping url="/placeorder" screen="PLACE_ORDER" requiresSignin="true"/>
<url-mapping url="/productdetails" screen="PRODUCT_DETAILS"/>
<url-mapping url="/verifysignin" screen="SIGN_IN_SUCCESS" useRequestHandler="true" useFlowHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninFlowHandler">
<handler-result result="2" screen="SIGN_IN_ERROR"/>
<handler-result result="1" screen="SIGN_IN_SUCCESS"/>
</flow-handler>
</url-mapping>
<url-mapping url="/validateshippinginformation" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler">
<handler-result result="1" screen="VALIDATE_BILLING_INFORMATION"/>
<handler-result result="2" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/validatebillinginformation" screen="VALIDATE_BILLING_INFORMATION" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractBillingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler">
<handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/>
<handler-result result="2" screen="VALIDATE_BILLING_INFORMATION"/>
<handler-result result="3" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping>
<url-mapping url="/entershippingaddress" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler">
<handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/>
<handler-result result="2" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/validatenewaccount" screen="ACCOUNT_CREATED" useRequestHandler="true" useFlowHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler">
<handler-result result="1" screen="ACCOUNT_CREATED"/>
<handler-result result="2" screen="ACCOUNT_CREATED"/>
<handler-result result="3" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/updateaccount" screen="ACCOUNT_UPDATED" useRequestHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class>
</url-mapping> <url-mapping url="/missingformdata" screen="MISSING_FORM_DATA"/>
<url-mapping url="/commitorder" useRequestHandler="true" screen="COMMIT_ORDER" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.OrderHandler</request-handler-class>
</url-mapping> <url-mapping url="/cart" useRequestHandler="true" screen="CART">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.CartHandler</request-handler-class>
</url-mapping> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException" screen="SIGN_IN_ERROR"/>
<exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.DuplicateAccountException" screen="DUPLICATE_ACCOUNT"/>
<exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException" screen="ERROR"/></request-mappings >
<?xml version="1.0" encoding="ISO-8859-1"?><request-mappings>
<screen-definition url="/WEB-INF/xml/screendefinitions.xml" language="en_US"/>
<screen-definition url="/WEB-INF/xml/ja/screendefinitions.xml" language="ja_JP"/> <default-screen>MAIN</default-screen>
<signin-screen>SIGN_IN</signin-screen>
<signin-error-screen>SIGN_IN_ERROR</signin-error-screen>
<url-mapping url="/main" screen="MAIN"/>
<url-mapping url="/search" screen="SEARCH"/>
<url-mapping url="/category" screen="CATEGORY"/>
<url-mapping url="/product" screen="PRODUCT"/>
<url-mapping url="/catalog" screen="CATALOG"/>
<url-mapping url="/error" screen="ERROR"/>
<url-mapping url="/accountcreated" screen="ACCOUNT_CREATED"/>
<url-mapping url="/createnewaccount" screen="CREATE_ACCOUNT"/>
<url-mapping url="/editaccount" screen="EDIT_ACCOUNT" requiresSignin="true"/>
<url-mapping url="/accountedited" screen="ACCOUNT_UPDATED"/> <url-mapping url="/signin" screen ="SIGN_IN_SUCCESS" requiresSignin="true"/>
<url-mapping url="/signout" screen="SIGN_OUT" useRequestHandler="true" >
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SignoutHandler</request-handler-class>
</url-mapping> <url-mapping url="/language" screen="MAIN" useRequestHandler="true" >
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.LanguageHandler</request-handler-class>
</url-mapping> <url-mapping url="/help" screen="HELP"/>
<url-mapping url="/checkout" screen="CHECK_OUT"/>
<url-mapping url="/placeorder" screen="PLACE_ORDER" requiresSignin="true"/>
<url-mapping url="/productdetails" screen="PRODUCT_DETAILS"/>
<url-mapping url="/verifysignin" screen="SIGN_IN_SUCCESS" useRequestHandler="true" useFlowHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninFlowHandler">
<handler-result result="2" screen="SIGN_IN_ERROR"/>
<handler-result result="1" screen="SIGN_IN_SUCCESS"/>
</flow-handler>
</url-mapping>
<url-mapping url="/validateshippinginformation" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler">
<handler-result result="1" screen="VALIDATE_BILLING_INFORMATION"/>
<handler-result result="2" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/validatebillinginformation" screen="VALIDATE_BILLING_INFORMATION" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractBillingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler">
<handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/>
<handler-result result="2" screen="VALIDATE_BILLING_INFORMATION"/>
<handler-result result="3" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping>
<url-mapping url="/entershippingaddress" useRequestHandler="true" useFlowHandler="true" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.ExtractShippingInformationHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.ShippingFlowHandler">
<handler-result result="1" screen="ENTER_SHIPPING_INFORMATION"/>
<handler-result result="2" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/validatenewaccount" screen="ACCOUNT_CREATED" useRequestHandler="true" useFlowHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class>
<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountFlowHandler">
<handler-result result="1" screen="ACCOUNT_CREATED"/>
<handler-result result="2" screen="ACCOUNT_CREATED"/>
<handler-result result="3" screen="MISSING_FORM_DATA"/>
</flow-handler>
</url-mapping> <url-mapping url="/updateaccount" screen="ACCOUNT_UPDATED" useRequestHandler="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.AccountHandler</request-handler-class>
</url-mapping> <url-mapping url="/missingformdata" screen="MISSING_FORM_DATA"/>
<url-mapping url="/commitorder" useRequestHandler="true" screen="COMMIT_ORDER" requiresSignin="true">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.OrderHandler</request-handler-class>
</url-mapping> <url-mapping url="/cart" useRequestHandler="true" screen="CART">
<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.CartHandler</request-handler-class>
</url-mapping> <exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException" screen="SIGN_IN_ERROR"/>
<exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.DuplicateAccountException" screen="DUPLICATE_ACCOUNT"/>
<exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException" screen="ERROR"/></request-mappings >
<screen>
<screen-name>SIGN_IN</screen-name>
<parameter key="HtmlTitle" value="Sign In" direct="true"/>
<parameter key="HtmlBanner" value="/banner.jsp" direct="false"/>
<parameter key="HtmlTopIndex" value="/topindex.jsp" direct="false"/>
<parameter key="HtmlBody" value="/signin.jsp" direct="false"/>
<parameter key="HtmlFooter" value="/footer.jsp" direct="false"/>
<parameter key="Annotation" value="/estore/annotation/ann_security_j2ee.jsp" direct="true"/>
</screen>
因为跳转不可能在init里面的
我没调试也不知道requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString();
这个到底读出来的是什么。。
/*
* $Id: MainServlet.java,v 1.14.4.8 2001/03/15 00:40:02 brydon Exp $
* Copyright 2001 Sun Microsystems, Inc. All rights reserved.
* Copyright 2001 Sun Microsystems, Inc. Tous droits r?erv?.
*/package com.sun.j2ee.blueprints.petstore.control.web;import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.beans.Beans;
import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import com.sun.j2ee.blueprints.petstore.util.JNDINames;import com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException;
import com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException;
import com.sun.j2ee.blueprints.util.tracer.Debug;
import com.sun.j2ee.blueprints.petstore.control.web.ModelManager;
import com.sun.j2ee.blueprints.petstore.control.web.CustomerWebImpl;
import com.sun.j2ee.blueprints.petstore.control.web.ScreenFlowXmlDAO;
import com.sun.j2ee.blueprints.petstore.control.web.RequestProcessor;
import com.sun.j2ee.blueprints.petstore.util.WebKeys;
import com.sun.j2ee.blueprints.petstore.util.JSPUtil;public class MainServlet extends HttpServlet { private HashMap urlMappings; public void init() {
Debug.println("MainServlet: Initializing");
String requestMappingsURL = null;
try {
requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString();
} catch (java.net.MalformedURLException ex) {
Debug.println("ScreenFlowManager: initializing ScreenFlowManager malformed URL exception: " + ex);
}
urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL);
getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings);
Debug.println("MainServlet: loaded urlMappings");
String serverType = null;
try {
InitialContext ic = new InitialContext();
serverType = (String)ic.lookup(JNDINames.SERVER_TYPE);
getServletContext().setAttribute(WebKeys.ServerTypeKey, serverType);
} catch (NamingException ex) {
Debug.println("Server Type not specified in deployment descriptor: using default J2ee Security Adapter");
}
getScreenFlowManager();
getRequestProcessor();
Debug.println("MainServlet: Initialization complete");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
doGet(request, response);
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
String selectedURL = request.getPathInfo();
// the current tomcat is resetting the outputstream so this is a workaround
if ((selectedURL != null) && selectedURL.equals("/white")) return;
HttpSession session = request.getSession();
ScreenFlowManager screenManager = null;
ModelManager modelManager= (ModelManager)request.getSession().getAttribute(WebKeys.ModelManagerKey);
if ( modelManager == null ) {
try {
modelManager = (ModelManager) Beans.instantiate(this.getClass().getClassLoader(), "com.sun.j2ee.blueprints.petstore.control.web.ModelManager");
} catch (Exception exc) {
throw new ServletException ("Cannot create bean of class ModelManager");
}
session.setAttribute(WebKeys.ModelManagerKey, modelManager);
modelManager.init(getServletContext(), session);
}
Debug.println("MainServlet: url " + selectedURL);
// check if url is protected before processing request
URLMapping current = getURLMapping(selectedURL);
if ((current != null) && current.requiresSignin()) {
CustomerWebImpl customer = modelManager.getCustomerWebImpl();
if (customer.isLoggedIn()) {
doProcess(request);
} else {
String signinScreen = getScreenFlowManager().getSigninScreen();
session.setAttribute(WebKeys.CurrentScreen, signinScreen);
session.setAttribute(WebKeys.SigninTargetURL, selectedURL);
}
} else {
doProcess(request);
}
/**
Default to the base language or the site.
If a language is found in the session use that template.
*/
Locale locale = JSPUtil.getLocale(request.getSession());
getServletConfig().getServletContext().getRequestDispatcher(getScreenFlowManager().getTemplate(locale)).forward(request, response); } private void doProcess(HttpServletRequest request) throws ServletException {
try {
getRequestProcessor().processRequest(request);
getScreenFlowManager().getNextScreen(request);
} catch (Throwable ex) {
String className = ex.getClass().getName();
String exceptionScreen = getScreenFlowManager().getExceptionScreen(className);
Debug.println("MainServlet: target screen is: " + exceptionScreen);
// put the exception in the request
request.setAttribute("javax.servlet.jsp.jspException", ex);
if (exceptionScreen != null) {
request.getSession().setAttribute(WebKeys.CurrentScreen, exceptionScreen);
} else {
// send to general error screen
Debug.println("MainServlet: unknown exception: " + className);
throw new ServletException("MainServlet: unknown exception: " + className);
}
}
} private RequestProcessor getRequestProcessor() {
RequestProcessor rp = (RequestProcessor)getServletContext().getAttribute(WebKeys.RequestProcessorKey);
if ( rp == null ) {
Debug.println("MainServlet: initializing request processor");
rp = new RequestProcessor();
rp.init(getServletContext());
getServletContext().setAttribute(WebKeys.RequestProcessorKey, rp);
}
return rp;
} private ScreenFlowManager getScreenFlowManager() {
ScreenFlowManager screenManager = (ScreenFlowManager)getServletContext().getAttribute(WebKeys.ScreenManagerKey);
if (screenManager == null ) {
Debug.println("MainServlet: Loading screen flow definitions");
screenManager = new ScreenFlowManager();
screenManager.init(getServletContext());
getServletContext().setAttribute(WebKeys.ScreenManagerKey, screenManager);
}
return screenManager;
} /**
* The UrlMapping object contains information that will match
* a url to a mapping object that contains information about
* the current screen, the RequestHandler that is needed to
* process a request, and the RequestHandler that is needed
* to insure that the propper screen is displayed.
*/ private URLMapping getURLMapping(String urlPattern) {
if ((urlMappings != null) && urlMappings.containsKey(urlPattern)) {
return (URLMapping)urlMappings.get(urlPattern);
} else {
return null;
}
}}
requestMappingsURL = getServletContext().getResource("/WEB-INF/xml/requestmappings.xml").toString();将XML解析成一个字符串 具体怎么排列的你调试下就知道了 我没安装环境。
urlMappings = ScreenFlowXmlDAO.loadRequestMappings(requestMappingsURL);
ScreenFlowXmlDAO 这个类是这个工程的类 我想应该是吧 这个字符串解析成一个key对应一个alue的 hashmap 大约就是 signin SIGN_IN_SUCCESS 的样子 然后将这个hashmap 保存 getServletContext().setAttribute(WebKeys.URLMappingsKey, urlMappings);然后在页面点击连接的时候进行doget和dopost请求都进入 doGet(requet,response)方法 String selectedURL = request.getPathInfo(); 获得uri 然后经过处理 比较modelManager = (ModelManager) Beans.instantiate(this.getClass().getClassLoader(), "com.sun.j2ee.blueprints.petstore.control.web.ModelManager"); 这个就是转向的代码你这个是的deamo 你可以调试一下 一步一步的跟下就很清楚了 其中中间 还经过了很多的处理 有点复杂 我不调试也说不清