Thank you for explanation, Chau.  Checking .xsd file is really a good
practice when having a question about xml schema.



On Sat, Apr 17, 2010 at 2:47 AM, Chau Huynh <[email protected]> wrote:

> On Sat, Apr 17, 2010 at 8:43 AM, bosun <[email protected]> wrote:
> Is there a order requirement in <servlet/> element? Or should only one
> servlet defined in this section?  Anyone know how does invocation make on
> servlets in section of <servlet/> and <servlet-mapping/> in web.xml ?   Does
> invocation go through chains of servlet?
>
> It's because of incorrect <servlet> and <servlet-mapping> declaration in
> your old web.xml.
> Should use each <servlet> to define 1 servlet only (no limit on numer of
> servlet)
> The link in web.xml file reference to those syntax
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
> or you can just google "web.xml" for easier explanation.
>
>
> On Sat, Apr 17, 2010 at 8:43 AM, bosun <[email protected]> wrote:
>
>> From my observation, <form action="/sign" method="post"> in guestbook.jsp
>> is expected to trigger doPost method in SignGuestBookServlet but instead, it
>> invoks doGet method in GuestbookServlet as it's the first servlet defined in
>> web.xml.  Thus, it causes the error message like HTTP method POST is not
>> supported by this URL.
>>
>> I have been working on this issue for hours and finally I made it worked
>> but I have to delete the servlet guestbook from entries in <servlet/> and
>> <servlet-mapping/> in web.xml.  But in tutorial, it didn't mention the
>> deletion.  It also works if I moved up the servlet sign to the first entry.
>>   I don't understand why it behaves like this.  It looks to me that doGet
>> method in GuestbookServet other than doPost method in SignGuestbookServlet
>> gets invoked immediately after a user clicks Post Greetings, which posts
>> data in the form.  Is there a order requirement in <servlet/> element? Or
>> should only one servlet defined in this section?  Anyone know how does
>> invocation make on servlets in section of <servlet/> and <servlet-mapping/>
>> in web.xml ?   Does invocation go through chains of servlet?
>>
>> After deletion, web.xml now looks like below:
>> <?xml version="1.0" encoding="utf-8"?>
>> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> xmlns="http://java.sun.com/xml/ns/javaee";
>> xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"; version="2.5">
>>  <servlet>
>> <servlet-name>sign</servlet-name>
>>  <servlet-class>guestbook.SignGuestbookServlet</servlet-class>
>> </servlet>
>>  <servlet-mapping>
>> <servlet-name>sign</servlet-name>
>>  <url-pattern>/sign</url-pattern>
>> </servlet-mapping>
>>  <welcome-file-list>
>> <welcome-file>guestbook.jsp</welcome-file>
>>  </welcome-file-list>
>> </web-app>
>>
>> On Fri, Apr 16, 2010 at 12:42 PM, bosun <[email protected]> wrote:
>>
>>> Hi Chau,
>>> I used the code in the tutorial with a slightly change.  Data is posted
>>> by POST method in the form so SignGuestbookServlet should use doPost to
>>> handle it.
>>> Anothe thing I am confused is that I can't see log message in Eclipse
>>> console if I added custom message like log.info or system.out.printlin
>>> alough I givie guestbook.level = INFO in logging.properties.
>>>
>>> Code below is SignGuestbookServlet.java:
>>> import com.google.appengine.api.users.UserService;
>>> import com.google.appengine.api.users.UserServiceFactory;
>>> public class SignGuestbookServlet {
>>>     private static final Logger log =
>>> Logger.getLogger(SignGuestbookServlet.class.getName());
>>>
>>>     public void doPost(HttpServletRequest req, HttpServletResponse resp)
>>>                 throws IOException {
>>>         UserService userService = UserServiceFactory.getUserService();
>>>         User user = userService.getCurrentUser();
>>>
>>>         String content = req.getParameter("content");
>>>         if (content == null) {
>>>             content = "(No greeting)";
>>>         }
>>>         if (user != null) {
>>>             log.info("Greeting posted by user " + user.getNickname() +
>>> ": " + content);
>>>         } else {
>>>             log.info("Greeting posted anonymously: " + content);
>>>         }
>>>         resp.sendRedirect("/guestbook.jsp");
>>>     }
>>> }
>>> Code below is guestbook.jsp:
>>>
>>> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
>>> <%@ page import="com.google.appengine.api.users.User" %>
>>> <%@ page import="com.google.appengine.api.users.UserService" %>
>>> <%@ page import="com.google.appengine.api.users.UserServiceFactory" %>
>>> <html>
>>>   <body>
>>> <%
>>>     UserService userService = UserServiceFactory.getUserService();
>>>     User user = userService.getCurrentUser();
>>>     if (user != null) {
>>> %>
>>> <p>Hi, <%= user.getNickname() %>! (You can
>>> <a href="<%= userService.createLogoutURL(request.getRequestURI())
>>> %>">sign out</a>.)</p>
>>> <%
>>>     } else {
>>> %>
>>> <p>Hello!
>>> <a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign
>>> in</a>
>>> to include your name with greetings you post.</p>
>>> <%
>>>     }
>>> %>
>>> Comment Board:
>>> <form action="/sign" method="post">
>>>     <div><textarea name="content" rows="3" cols="60"></textarea></div>
>>>     <div><input type="submit" value="Post Greeting" /></div>
>>> </form>
>>>   </body>
>>> </html>
>>>
>>> code below is GuestbookServlet.java:
>>> package guestbook;
>>> import java.io.IOException;
>>> import javax.servlet.http.*;
>>> import com.google.appengine.api.users.User;
>>> import com.google.appengine.api.users.UserService;
>>> import com.google.appengine.api.users.UserServiceFactory;
>>>
>>> @SuppressWarnings("serial")
>>> public class GuestbookServlet extends HttpServlet {
>>>  public void doGet(HttpServletRequest req, HttpServletResponse resp)
>>> throws IOException {
>>>   UserService userService = UserServiceFactory.getUserService();
>>>         User user = userService.getCurrentUser();
>>>         //log.info("user name is " + user.getNickname());
>>>         if (user != null) {
>>>             resp.setContentType("text/plain");
>>>             resp.getWriter().println("Hello, " + user.getNickname());
>>>         } else {
>>>
>>> resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
>>>         }
>>>   }
>>> }
>>>
>>> On Fri, Apr 16, 2010 at 12:16 PM, Chau Huynh <[email protected]> wrote:
>>>
>>>> And next you'll need to post your servlet ;-)
>>>>
>>>> Just wonder if you code SignGuestbookServlet servlet yourself - in such
>>>> a case, you might code doGet() while your JSP posts to the servlet? Error
>>>> message from your post: "HTTP method POST is not supported by this URL"
>>>>
>>>>
>>>> On Fri, Apr 16, 2010 at 10:59 PM, bosun <[email protected]> wrote:
>>>>
>>>>> Hi Rajeev,
>>>>>
>>>>> Thank you for helping me troubleshooting this issue.
>>>>>
>>>>> Below is web.xml
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8"?>
>>>>> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>> xmlns="http://java.sun.com/xml/ns/javaee";
>>>>> xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
>>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>>>>> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"; version="2.5">
>>>>>  <servlet>
>>>>>   <servlet-name>Guestbook</servlet-name>
>>>>>   <servlet-class>guestbook.GuestbookServlet</servlet-class>
>>>>>   <servlet-name>sign</servlet-name>
>>>>>         <servlet-class>guestbook.SignGuestbookServlet</servlet-class>
>>>>>  </servlet>
>>>>>  <servlet-mapping>
>>>>>   <servlet-name>Guestbook</servlet-name>
>>>>>   <url-pattern>/guestbook</url-pattern>
>>>>>         <servlet-name>sign</servlet-name>
>>>>>         <url-pattern>/sign</url-pattern>
>>>>>  </servlet-mapping>
>>>>>  <welcome-file-list>
>>>>>   <welcome-file>guestbook.jsp</welcome-file>
>>>>>  </welcome-file-list>
>>>>> </web-app>
>>>>>
>>>>> below is appengine-web.xml
>>>>>
>>>>> <?xml version="1.0" encoding="utf-8"?>
>>>>> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0";>
>>>>>  <application></application>
>>>>>  <version>1</version>
>>>>>
>>>>>  <!-- Configure java.util.logging -->
>>>>>  <system-properties>
>>>>>   <property name="java.util.logging.config.file"
>>>>> value="WEB-INF/logging.properties"/>
>>>>>  </system-properties>
>>>>>
>>>>> </appengine-web-app>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Apr 16, 2010 at 10:29 AM, Rajeev Dayal <[email protected]>wrote:
>>>>>
>>>>>> Can you post the contents of your web.xml file and your
>>>>>> appengine-web.xml file?
>>>>>>
>>>>>>   On Thu, Apr 15, 2010 at 10:21 PM, bosun <[email protected]>wrote:
>>>>>>
>>>>>>>  I forgot mention in my post about the version of Eclipse I am using
>>>>>>> is Galileo.  I downloaded Google plugin for this version.
>>>>>>>
>>>>>>> The link to the Tutorial where I am stuck on is:
>>>>>>> http://code.google.com/intl/en/appengine/docs/java/gettingstarted/usingjsps.html
>>>>>>>
>>>>>>> In Eclipse console, all log messages after server restarted are like
>>>>>>> below:
>>>>>>>
>>>>>>>  Apr 16, 2010 2:05:54 AM
>>>>>>> com.google.apphosting.utils.config.AppEngineWebXmlReader 
>>>>>>> readAppEngineWebXml
>>>>>>> INFO: Successfully processed
>>>>>>> C:\EclipseGalileo\workspace\Guestbook\war\WEB-INF/appengine-web.xml
>>>>>>> Apr 16, 2010 2:05:54 AM
>>>>>>> com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
>>>>>>> INFO: Successfully processed
>>>>>>> C:\EclipseGalileo\workspace\Guestbook\war\WEB-INF/web.xml
>>>>>>> The server is running at http://localhost:8888/
>>>>>>> Apr 16, 2010 2:07:08 AM
>>>>>>> com.google.appengine.tools.development.LocalResourceFileServlet doGet
>>>>>>>  WARNING: No file found for: /favicon.ico
>>>>>>> Apr 16, 2010 2:07:25 AM
>>>>>>> com.google.appengine.tools.development.LocalResourceFileServlet doGet
>>>>>>>  WARNING: No file found for: /favicon.ico
>>>>>>>
>>>>>>> Please advise where it goes wrong.
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Apr 15, 2010 at 9:57 PM, bobo <[email protected]> wrote:
>>>>>>>
>>>>>>>> Hi
>>>>>>>>
>>>>>>>> I run Google App Engine (Java) locally with Eclipse.  Following the
>>>>>>>> tutorial of Getting Started - Java,  I lean it step by step and my
>>>>>>>> local server works well until the section Using JSPs.  After adding
>>>>>>>> SignGuestbookServlet.java and greeting form in guestbook.jsp as well
>>>>>>>> as editing web.xml for servlet mapping for sign and /sign,  I
>>>>>>>> restarted the server. My browser displayed error message immediately
>>>>>>>> after I tried to post a greeting message:
>>>>>>>>
>>>>>>>> HTTP ERROR 405
>>>>>>>> Problem accessing /sign. Reason:    HTTP method POST is not
>>>>>>>> supported
>>>>>>>> by this URL
>>>>>>>>
>>>>>>>> In Eclipse console,  the red error message like:
>>>>>>>> Apr 16, 2010 1:34:31 AM
>>>>>>>> com.google.appengine.tools.development.LocalResourceFileServlet
>>>>>>>> doGet
>>>>>>>> WARNING: No file found for: /favicon.ico
>>>>>>>>
>>>>>>>> I googled this error but seems no one having this problem before.  I
>>>>>>>> am stuck on this point and anyone who can shed me a light?
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>>
>>>>>>>   --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "Google App Engine for Java" group.
>>>>>>> To post to this group, send email to
>>>>>>> [email protected].
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> [email protected]<google-appengine-java%[email protected]>
>>>>>>> .
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Google App Engine for Java" group.
>>>>>> To post to this group, send email to
>>>>>> [email protected].
>>>>>> To unsubscribe from this group, send email to
>>>>>> [email protected]<google-appengine-java%[email protected]>
>>>>>> .
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Google App Engine for Java" group.
>>>>> To post to this group, send email to
>>>>> [email protected].
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected]<google-appengine-java%[email protected]>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Google App Engine for Java" group.
>>>> To post to this group, send email to
>>>> [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<google-appengine-java%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>>
>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<google-appengine-java%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine-java%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to