Thanks Mike, actually there is a file exist in that location. HTTP ERROR 404
Problem accessing /WEB-INF/view/jsp/error.jsp. Reason: NOT_FOUND Powered by Jetty:// I am getting error like that above and of course I changed few things according to your comments. and I found out that this will work when I upload the project to GAE site. seems like it only happens in localhost. On May 18, 12:11 am, "Mike!" <michael.d.en...@gmail.com> wrote: > Quick question, do you have "error.jsp" in your /WEB-INF/view/jsp/ > folder? Also, in your first method > (TestController.testStringResult()) you misspelled "redirect", which > will also result in 404. Also, take off the leading "/" for the > testModelAndView() and testString()...you're effectively looking for / > WEB-INF/view/jsp//error.jsp (which should still resolve, but is not > necessary and clouds up the code a bit) > > Mike! > > On May 15, 9:09 pm, jlc488 <jlc...@gmail.com> wrote: > > > > > > > > > I've implemented a site using SpringMVC RESTful approaches. I did not > > need any view such as JSP or Velocity and stuff at that time. > > > For some reason, I needed views using JSPs. Somehow It is showing 404 > > not found on JSPs or any views include HTMLs on Google AppEngine. > > > My requirements are > > > 1) It should work as RESTful approach which means It returns JSON > > formats of results according to the request. --> working like charm > > > 2) It should be able to show the JSP result pages on such requests > > like clicking User status confirmation link. --> 404 not found. > > > I suspect this would be the ViewResolver problems but I have no clue > > about which resolver and how to use it properly. > > > My configurations are below. > > > ----------- start of restTask-servlet.xml ------------- > > > <context:annotation-config /> > > <bean > > class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandl > > erAdapter"> > > <property name="messageConverters"> > > <list> > > <ref bean="jsonHttpMessageConverter" /> > > <ref bean="stringHttpMessageConverter" /> > > <ref bean="formHttpMessageConverter" /> > > </list> > > </property> > > </bean> > > > <bean id="jsonHttpMessageConverter" > > class="org.springframework.http.converter.json.MappingJacksonHttpMessageCon > > verter"/ > > > <bean id="stringHttpMessageConverter" > > class="org.springframework.http.converter.StringHttpMessageConverter" / > > > <bean id="formHttpMessageConverter" > > class="org.springframework.http.converter.FormHttpMessageConverter" /> > > > <bean > > class="com.otuls.task.view.json.MyContentNegotiatingViewResolver"> > > <property name="mediaTypes"> > > <map> > > <entry key="html" value="text/html" /> > > <entry key="text" value="text/plain" /> > > <entry key="json" value="application/json" /> > > </map> > > </property> > > <property name="defaultContentType" value="application/json" /> > > <property name="defaultViews"> > > <list> > > <bean class="com.otuls.task.view.json.JsonView" /> > > </list> > > </property> > > </bean> > > > <bean > > > class="org.springframework.web.servlet.view.InternalResourceViewResolver"> > > <property name="order" value="2" /> > > <property name="prefix" value="/WEB-INF/view/jsp/" /> > > <property name="suffix" value=".jsp" /> > > </bean> > > ------------- end of restTask-servlet.xml ------------------- > > > ------------- start of JsonView Class ------------------- > > > public class JsonView extends AbstractView{ > > > public static final String DEFAULT_CONTENT_TYPE = > > "application/json"; > > > private ObjectMapper objectMapper = new ObjectMapper(); > > > private JsonEncoding encoding = JsonEncoding.UTF8; > > > private boolean prefixJson = false; > > > private Set<String> renderedAttributes; > > > public JsonView() { > > setContentType(DEFAULT_CONTENT_TYPE); > > } > > > public void setObjectMapper(ObjectMapper objectMapper) { > > Assert.notNull(objectMapper, "'objectMapper' must not be > > null"); > > this.objectMapper = objectMapper; > > } > > > public void setEncoding(JsonEncoding encoding) { > > Assert.notNull(encoding, "'encoding' must not be null"); > > this.encoding = encoding; > > } > > > public void setPrefixJson(boolean prefixJson) { > > this.prefixJson = prefixJson; > > } > > > /** > > * Sets the attributes in the model that should be rendered by this > > view. When set, all other model attributes will be > > * ignored. > > */ > > public void setRenderedAttributes(Set<String> renderedAttributes) { > > this.renderedAttributes = renderedAttributes; > > } > > > @Override > > protected void prepareResponse(HttpServletRequest request, > > HttpServletResponse response) { > > response.setContentType(getContentType()); > > response.setCharacterEncoding(encoding.getJavaName()); > > } > > > @Override > > protected void renderMergedOutputModel(Map<String, Object> model, > > HttpServletRequest request, > > HttpServletResponse response) throws Exception { > > model = filterModel(model); > > JsonGenerator generator = > > objectMapper.getJsonFactory().createJsonGenerator(response.getWriter()); > > if (prefixJson) { > > generator.writeRaw("{} && "); > > } > > objectMapper.writeValue(generator, model); > > } > > > /** > > * Filters out undesired attributes from the given model. > > * > > * <p>Default implementation removes {@link BindingResult} instances > > and entries not included in the {@link > > * #setRenderedAttributes(Set) renderedAttributes} property. > > */ > > protected Map<String, Object> filterModel(Map<String, Object> model) > > { > > Map<String, Object> result = new HashMap<String, > > Object>(model.size()); > > Set<String> renderedAttributes = ! > > org.springframework.util.CollectionUtils.isEmpty(this.renderedAttributes) ? > > this.renderedAttributes : model.keySet(); > > for (Map.Entry<String, Object> entry : model.entrySet()) { > > if (!(entry.getValue() instanceof BindingResult) && > > renderedAttributes.contains(entry.getKey())) { > > result.put(entry.getKey(), > > entry.getValue()); > > } > > } > > return result; > > } > > > } > > > ------------------ end of JsonView class ----------------------- > > > ------------------ start of MyContentNegotiatingViewResolver > > ------------------------ > > > public class MyContentNegotiatingViewResolver extends > > ContentNegotiatingViewResolver { > > > @Override > > protected List<MediaType> getMediaTypes(HttpServletRequest request) > > { > > List<MediaType> result = super.getMediaTypes(request); > > if (result.size() == 1) > > result = Arrays.asList(result.get(0)); > > return result; > > }} > > > ---------------------- end of MyContentNegotiatingViewResolver > > -------------------------- > > > ----------------------- start of web.xml --------------------------- > > > <context-param> > > <param-name>log4jConfigLocation</param-name> > > <param-value>/WEB-INF/log4j.properties</param-value> > > </context-param> > > <context-param> > > <param-name>contextConfigLocation</param-name> > > <param-value> > > /WEB-INF/restTask-servlet.xml > > /WEB-INF/classes/com/otuls/task/common/config/ > > applicationContext.xml > > > > /WEB-INF/classes/com/otuls/task/common/config/aop.xml > > > > /WEB-INF/classes/com/otuls/task/common/config/controller.xml > > > > /WEB-INF/classes/com/otuls/task/common/config/service.xml > > > > /WEB-INF/classes/com/otuls/task/common/config/persistence.xml > > </param-value> > > </context-param> > > > <listener> > > > > <listener-class>org.springframework.web.util.Log4jConfigListener</ > > listener-class> > > </listener> > > > <listener> > > <listener- > > class>org.springframework.web.context.ContextLoaderListener</listener- > > class> > > </listener> > > > <servlet> > > <servlet-name>restTask</servlet-name> > > > > <servlet-class>org.springframework.web.servlet.DispatcherServlet</ > > servlet-class> > > <init-param> > > <param-name>contextConfigLocation</param-name> > > <param-value> > > /WEB-INF/restTask-servlet.xml > > > > /WEB-INF/classes/com/otuls/task/common/config/ > > applicationContext.xml > > ... > > read more » -- 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 google-appengine-java@googlegroups.com. To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en.