【问题标题】:Java Spring Friendly Url mapping issuesJava Spring 友好的 URL 映射问题
【发布时间】:2012-10-21 23:08:36
【问题描述】:

我一直在尝试在我的第一个 Java spring 站点中实现友好的 url 映射。我一直在关注这个教程。 http://outbottle.com/spring-3-web-mvc-friendly-url-using-requestmapping-variable-uri/

我当前的映射以 id 作为参数效果很好。本地主机:8080/user?id=1312321321

/*
 * User
*/
@RequestMapping(method=RequestMethod.GET, value={"/user","/user/{id}"})
public ModelAndView profileDisplay(
        HttpServletRequest request,
        HttpServletResponse response,
        @RequestParam(value="id", required=false) String id
) throws UnknownHostException, MongoException {
    ServiceSerlvet.appendSesssion(request);
    //get search ALL users
    BasicDBObject searchQuery = new BasicDBObject();
        searchQuery.put("_id", new ObjectId(id));
    List<DBObject> searchResponse = PersonController.searchUsers(searchQuery);

    //System.out.println("response from search user method: "+searchResponse);

    return new ModelAndView("user", "people", searchResponse);
}

我的 web xml 目前看起来像这样......它可以工作,但是这样写出各种 url 映射是否正确?我认为 * 是允许说 /user/22222 的通配符?

<?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" id="WebApp_ID" version="2.5">
  <display-name>Spring3MVC</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>
                  org.springframework.web.servlet.DispatcherServlet
              </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.html</url-pattern>


    <url-pattern>/gallery/*</url-pattern>
    <url-pattern>/galleryupload/*</url-pattern>

    <url-pattern>/delete/*</url-pattern>
    <url-pattern>/edit/*</url-pattern>

    <url-pattern>/search/*</url-pattern>
    <url-pattern>/members/*</url-pattern>
    <url-pattern>/profile/*</url-pattern>
    <url-pattern>/messages/*</url-pattern>

    <url-pattern>/index/*</url-pattern>
    <url-pattern>/login/*</url-pattern>
    <url-pattern>/logout/*</url-pattern>
    <url-pattern>/register/*</url-pattern>
    <url-pattern>/user/*</url-pattern>
    <url-pattern>/jsoninterests/*</url-pattern>
    <url-pattern>/jsonlocations/*</url-pattern>
    <url-pattern>/jsonmembers/*</url-pattern>
    <url-pattern>/jsonuniqueuser/*</url-pattern>
  </servlet-mapping>
</web-app>

当我尝试修改我的代码以仅取这样的名称时 localhost:8080/user/john

它坏了 - 但我不确定如何在 web.xml 中设置映射,我是否在 web.xml 中设置这样的映射?

@RequestMapping(value="/user/{id}", method= RequestMethod.GET)
        public ModelAndView profileDisplay(
                @PathVariable(value="id") String id,
                HttpServletRequest request,
                HttpServletResponse response
        ) throws UnknownHostException, MongoException {

    ServiceSerlvet.appendSesssion(request);
            //get search ALL users
            BasicDBObject searchQuery = new BasicDBObject();
                searchQuery.put("_id", new ObjectId(id));
            List<DBObject> searchResponse = PersonController.searchUsers(searchQuery);

            //System.out.println("response from search user method: "+searchResponse);

            return new ModelAndView("user", "people", searchResponse);
        }

【问题讨论】:

    标签: java spring mapping friendly-url


    【解决方案1】:

    通常我将每个请求都映射到 web.xml 中的调度程序 servlet。

      <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
                      org.springframework.web.servlet.DispatcherServlet
                  </servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/*</url-pattern>
      </servlet-mapping>
    

    然后在你的控制器中使用@RequestMapping 注解来定义更精细的映射:

        @RequestMapping("/user/{id}")
        public ModelAndView profileDisplay(
                HttpServletRequest request,
                HttpServletResponse response,
                @RequestParam(value="id", required=false) String id
        ) throws UnknownHostException, MongoException {
            ...
        }
    

    【讨论】:

    • 我明白了 - 所以它应该只是 /* - 以免强制执行特定模式 - 这样映射就被接受了?这种方法可以与 PathVariable 方法一起使用吗?所以接受 /user/john 或 /search/football/seriousrelationship/indiancurry - 比如多个参数?
    • 它与路径变量方法一起使用,您只需通过调度程序运行每个请求并依赖您在控制器中建立的映射。唯一的问题是css、js和图像等资源文件将通过控制器发送。 Spring 提供了一些配置来避免这种情况。查看 spring mvc 的任何 maven 原型,它应该包含这个配置。
    猜你喜欢
    • 2012-10-22
    • 2011-01-18
    • 2012-09-14
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2016-05-17
    • 2016-10-05
    • 2011-11-02
    相关资源
    最近更新 更多