今天练习了一个关于通配符的小程序
请求的URL为:本机ip+端口号+工程名 是由tomcat直接处理的,默认访问到的是index.jsp,如果没有index.jsp,则会使用默认action,执行相关联的action。有index时,后面乱输入也会执行默认的action
下面看一下我写的小例子
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<!--没有写method的时候它还是会找到,但是平时要写上-->
<action name="*_*" class="com.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
</package>
</struts>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>index.jsp</title>
</head>
<base href="<%=basePath%>">
<body>
使用通配符,就爱那个配置降到最低<br />
<a href="actions/Studentadd">添加学生</a>
<a href="actions/Studentdelete">删除学生</a>
<br/>
不过,一定要遵守"约定优于配置"的原则<br />
<a href="actions/Teacher_add">添加老师</a>
<a href="actions/Teacher_delete">删除老师</a>
<%--<a href="Studentadd_success.jsp">添加学生</a>--%>
<%--<a href="Studentdelete_success.jsp">删除学生</a>--%>
</body>
</html>
此处应注意:index.jsp文件中的链接中的内容应该是直接链接到struts.xml中的action上面,找到对应的action后执行相应的result.在这个链接中最前面可以添加namespace中定义的路径(例如此处的namespace是/actions,链接就可以写成:actions/某个具体的action名字)
*再一个就是通配符的使用,再次看一下上面的struts.xml文件
<action name="*_*" class="com.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
</action>
这里的{1}代表*_*中的第一个*,{2}自然也就代表第二个*了.
来一条分割线吧
-----------------------------
今天遇到的第二个问题
如果有遇到动态方法调用的时候,在struts.xml中设置:
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
它默认是false,设置为true之后就会支持动态方法调用也就是使用!进行方法调用.