我按照
this post创建了一个自定义URL应用程序.该动作正在被调用,但是url显示的是会话ID
HTTP://本地主机:8080 / CustomURL {用户名} .action; JSESSIONID = 9C1FB3EB633209C18625BBB40EA61000
我想简单地喜欢http:// localhost:8080 / CustomURL / rajesh
请参阅我的Struts.xml
<struts> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false" /> <constant name="struts.enable.SlashesInActionNames" value="true" /> <constant name="struts.patternMatcher" value="namedVariable" /> <package name="default" namespace="/" extends="struts-default"> <action name=""> <result name="success">home.jsp</result> </action> <action name="{username}" class="com.rajesh.struts2.CustomURL" method="customUrl"> <result name="success">welcome.jsp</result> </action> </package>
看我的jsp页面
<%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>Struts 2 Custom URL</title> </head> <body> <h1>Struts 2 Custom URL</h1> <h3>Enter your name below</h3> <s:form action="{username}"> <s:textfield name="username" /> <s:submit /> </s:form> </body> </html>
请参阅下面的java文件.
public class CustomURL extends ActionSupport { private String username; public String getUsername() { System.out.println("Getter"); return username; } public void setUsername(String username) { System.out.println("Setter"); this.username = username; } private static final long serialVersionUID = -4337790298641431230L; public String customUrl() { return SUCCESS; } }
有任何建议请.
解决方法
首先,如果您不希望用户认为他们的名字有扩展名,您应该摆脱动作扩展.
<constant name="struts.action.extension" value=",action"/>
接下来模式匹配器应该是正则表达式.
<constant name="struts.patternMatcher" value="regex"/>
动作映射
<action name="/CustomURL/{username}" class="com.rajesh.struts2.CustomURL" method="customUrl"> <result name="success">welcome.jsp</result> </action>
在JSP中,您不需要使用表单标记,而是使用锚标记.并使用已知名称.
<a href="http://localhost:8080/CustomURL/rajesh">Click my name</a>