如何在url中隐藏参数值

时间:2015-03-09 07:28:13

标签: java spring hibernate

我正在使用hibernate和Spring MVC架构开发项目。 我的问题是我在我的web应用程序中使用(* .htm)url模式,在这种情况下,我将一个产品的id发送到控制器,以便在url中编辑特定的产品id。

"localhost:8080/MyApp/editProduct.htm?productId=03".

但我不想要这个。我只想要

"localhost:8080/MyApp/editProduct.htm?productId" or "localhost:8080/MyApp/editProduct.htm/productId/03" 

我无法在我的控制器中使用@PathVariable Annotation,因为我的url模式(* .htm)和使用@PathVariable Annotation,JSP页面永远不会正确加载。 有什么建议 。提前致谢。

控制器: -

@RequestMapping(value = "/{sId}/deleteState.htm")
public ModelAndView deleteState(@PathVariable("sId") int sId ){
    ModelAndView mav = new ModelAndView();

    try{
        stateDAO.deleteById(sId);
        mav.addAllObjects(prepapareModel());
        mav.addObject("msg", "State Deleted Succesdfully");
        mav.setViewName("admin/viewState");
        return mav;
    }catch(Exception e){
        e.printStackTrace();
        mav.addAllObjects(prepapareModel());
        mav.addObject("err", "Failed to Delete State");
        mav.setViewName("admin/viewState");
        return mav;
    }
}

public Map prepapareModel(){
    Map map = new HashMap();
    map.put("states", stateDAO.findAll());
    return map;
}

从数据库中删除状态后的URL: -

http://localhost:8080/PujaInBox/10/deleteState.htm

我认为国家身份正在制造问题。 10是状态的Id。

4 个答案:

答案 0 :(得分:0)

将servlet默认网址格式更改为:

 <servlet-mapping>
    <servlet-name>servlet_name</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

但在这种情况下,更好的选择是在URL的中间部分管理您的@PathVariables,例如:

/myapp/product/{productId}/edit.html

答案 1 :(得分:0)

如果您想使用@PathVariable年金,那么网址应为

/MyApp/productId/03/editProduct.htm - 以您的扩展程序结束,您的控制器映射应该是这样的

@RequestMapping(value="/productId/{id}/editProduct")
public String editProduct(@PathVariable String id, Model model) {

}

这里要注意的另一个变化是我提到了一个相对URL而不是像localhost:8080/MyApp/productId/03/editProduct.htm这样的绝对URL,包括主机名和端口。当您在实际服务器中部署应用程序时,这不会起作用,因为localhost始终引用您当前的计算机,但您的应用程序部署在其他主机上。

希望有道理:)

答案 2 :(得分:0)

我在课堂上做作业。

我猜测第一步是使用通配符(*)来映射您的URL。在您的网页中,您可以使用您喜欢的任何网址。

然后,您可以在servlet中调用方法getPathInfo()

String action = request.getPathInfo();

或者您可以致电getHeader("referer")获取您的网址,然后操纵您的字符串以获取您需要的信息。

最后,您可以将字符串放在if-else或switch语句中。

答案 3 :(得分:0)

您所要做的就是在html页面中使用method = post

创建一个表单
<form method="post">

然后在此表单中创建字段,如果没有任何应显示的字段,则使用类型为hidden的输入。

<input type="hidden" name="parametername" id="parameterid" value="parametervalue">

这将解决问题,它不会在URL中显示任何参数值,您可以像以前一样访问这些值。

希望这会有所帮助......