我按照
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>