提前说明 为了简单我们往往复制工程,工程名改后注意要改项目名。myeclipse的改法是 右键单击项目名选property-->myeclipe-->web eclipse的改法是server-->server.xml
在host元素中增加或修改即可。
一验证:登陆小例子
页面:
1,用el表达式
<form action="login.do" method="post">
<div class="error">${actionErrors[0]}</div>
username:<input type="text" name="username"><span class="error">${fieldErrors.username[0]}</span><br>
password:<input type="password" name="pwd"><span class="error">${fieldErrors.pwd[0]}</span><br>
<input type="submit" value="submit">
</form>
<s:debug></s:debug>
记住要
<%@taglib prefix="s" uri="/struts-tags" %>
<s:debug>是用来查看request域中的值栈,其中fieldError是map类型actionError是数组类型(点击页面的debug看看最好,不要死记)
2,用struts标签
<form action="login.do" method="post">
<div class="error"><s:property value="actionErrors[0]"/> </div>
username:<input type="text" name="username"><span class="error"><s:property value="fieldErrors.username[0]"/> </span><br>
password:<input type="password" name="pwd"><span class="error"><s:property value="fieldErrors.pwd[0]"/> </span><br>
<input type="submit" value="submit">
</form>
<s:debug></s:debug>
3,也是struts标签,但是效果不同
<form action="login.do" method="post">
<div class="error"><s:actionerror/></div>
username:<input type="text" name="username"><span class="error"><s:fielderror><s:param>username</s:param></s:fielderror></span><br>
password:<input type="password" name="pwd"><span class="error"><s:fielderror><s:param>pwd</s:param></s:fielderror></span><br>
<input type="submit" value="submit">
</form>
<s:debug></s:debug>
action类:
我推荐先用汉字写出流程,在填充代码
public class LoginAction extends ActionSupport {
//1.获取表单数据
private String username;
private String pwd;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
//2.验证表单数据
@Override
public void validate() {
if(GenericValidator.isBlankOrNull(username)){
this.addFieldError("username", "username is blank");
}else if(GenericValidator.isBlankOrNull(pwd)){
this.addFieldError("pwd", "pwd is blank");
}
}
//3.验证业务逻辑
@Override
public String execute() throws Exception {
if(username.startsWith("a")&&"123456".equals(pwd)){
return Action.SUCCESS;
}else{
this.addActionError("username or pwd is error");
return Action.ERROR;
}
}
}
其中要注意一 :变量名和页面对应name值保持一致,且要提供Set方法
二:validate对应配置文件<result>标签中的input(因为表示数据有误) execute对应error(表示业务逻辑错误)
struts配置文件
<package name="" namespace = "/" extends="struts-default">
<!-- 服务器启动时就会加载该配置文件 -->
<action name="login" class="com.pk.web.action.LoginAction">
<result>/welcome.jsp</result>
<result name="error">/login.jsp</result>
<result name="input">/login.jsp</result>
</action>
</package>
二 通过路径来访问action 首先还是路径是由(namespace+action+struts.action.extension)组成,404时要检查这里
第一种方式,最普通的方法一个包名对应一个类名 一个action名对应一个Action类中的方法
类的代码
public class LoginAction extends ActionSupport {
public String saveUser() throws Exception {
System.out.println("saveUser");
return null;
}
public String updateUser() throws Exception {
System.out.println("updateUser");
return null;
}
public String deleteUser() throws Exception {
System.out.println("deleteUser");
return null;
}
public String showUser() throws Exception {
System.out.println("showUser");
return null;
}
}
struts配置文件的代码
<package name="user" namespace = "/user" extends="struts-default">
<!-- 服务器启动时就会加载该配置文件 -->
< action name="saveUser" class="com.pk.web.action.LoginAction" method="saveUser">
</action>
<action name="deleteUser" class="com.pk.web.action.LoginAction" method="deleteUser">
</action>
<action name="showUser" class="com.pk.web.action.LoginAction" method="showUser">
</action>
<action name="updateUser" class="com.pk.web.action.LoginAction" method="updateUser">
</action> -->
</package>
第二种方式一个action去掉method因为我们要通过路径来指定方法user/action名字!方法名字+后缀,但是这种很耗资源,不大推荐所以可以禁用
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
第三种方式,使用通配符
<action name="*" class="com.pk.web.action.LoginAction" method="{0}User"></action>