Java Spring 友好的 URL 映射问题

标签 java spring mapping friendly-url

我一直在尝试在我的第一个 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);
        }

最佳答案

通常我将每个请求映射到 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>

然后在您的 Controller 中使用 @RequestMapping 注释来定义更精细的映射:

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

关于Java Spring 友好的 URL 映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13175786/

相关文章:

java - GXT号码字段自动计算

java - 为什么我在运行 docker image 时收到 Error : Could not find or load main class . jar

java - Hibernate 复合元素映射

image - 如何生成纹理映射图像?

java - 从 IDEA 调试 Webstorm 的插件

java - 为什么java中引用类型可以与对象类型不同

java - 为什么我们需要初始化 block 的例子

java - 哪种方法是最佳实践?

java - Spring Security 3.2 在用户之间分离数据

java - [Hibernate] 将临时对象与子对象合并