(1)安装与配置
1 下载 在其中有一个all版本
2 解压后有四个目录 apps docs lib src
3 在netbeans中本次没有使用程序提供的struts支持功能,而是手工完成。将lib目录中的所有文件拷贝到项目中WEB-INF的lib目录下。(但是貌似是失败的,netbeans的库管理我一直有点晕,好像还是要在项目中的库里引入struts的jar包们)
4 解压apps中的blank空项目,将其中的web.xml里关于actionServlet的内容拷贝到项目中的web.xml里,对其配置。
5 将apps中的struts-config.xml拷贝到项目的web.xml中。将此xml中的内容修改,删除无用的注释,只保留dtd的约束和
标签。
(2) 用户登陆程序,测试struts的搭建
1 创建登陆页面login.jsp loginSuccess.jsp loginerror.jsp
2 对action 和 actionForm 进行配制。actionForm是用于属性收集,其方法名需要按照javabean的命名规范。这里可以给actionform中的属性定义不同的数据类型,actionform收集的时候自动会进行数据类型的转换。将action 和 actionForm分别命名,并且继承org.apache.struts.action.action(actionForm)。action_login需要重写关于http的execute方法。其中获得的actionForm就是之前的actionForm的对象,可以直接从中获得属性而不必通过request。
3 在action中对于属性处理并且转向VIEW。转向时使用execute中参数中的mapping。mapping中记录很多信息,调用mapping的findForward方法传递进去关于转向VIEW的字符串信息,由struts进行转向。
(3) 进行struts-config.xml的配置
1 首先针对actionForm进行配置。在标签中添加,其中name为名字,type为所对应的类名。
2 在添加对action进行配置,其中属性path(访问路径,这里配置的时候不需要加.do,乃是截取.do之前的路径。例如:/login) type(action的类名) name(action对的actionForm的name) scope(建议为request)
3 action的转向信息在的标签中添加,每一个forward对应一个转向信息。属性name(转向的名称) path(对应的实际路径)。
(4) ActionForm的reset方法和validata方法
1 reset方法用于初始化,每次调用表单时都会调用该方法。 validata方法用于对actionform的表单内容进行服务器端的验证。
2 validata原则是对表单格式验证,不涉及访问数据库。
3 validata方法返回一个actionerror的对象,该对象内部可以包含关于表单的错误信息。一切验证正常则返回null。
4 validata方法默认是自动执行的。在struts-config.xml中在标签中的属性参数validata进行配置,默认true,设置为false时该方法就不进行执行。
(5) 建立LoginManager进行连接数据库验证,并且建立相应异常。
1 建立针对username与password错误的两个异常。分别继承runtimeException(也可以Exception)。
2 建立LoginManager类,并且建立为单例。在其中建立方法login来进行验证。(不建议直接将actionform直接传递给login方法)
3 在login中若验证失败,则抛出已经建立好的相应的异常。
4 在action中执行LoginManager.getInstance().login(参数),并捕获两个对应的异常。在try的正常执行中转向成功页面,在异常处理中转向错误页面。
相关代码如下:
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class Action_Login extends org.apache.struts.action.Action{
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionForm_Login afl = (ActionForm_Login)form;
String username = afl.getUsername();
String password = afl.getPassword();
// if("admin".equals(username)&&"admin".equals(password)){
// request.setAttribute("username", username);
// return mapping.findForward("success");
// }
// else{
// return mapping.findForward("error");
// }
String errorInfo = "";
try{
Login.LoginManager.getInstance().login(username, password);
request.getSession().setAttribute("username", username);
return mapping.findForward("success");
}
catch(Login.UsernameException ue){
errorInfo = "username错误,找不到["+username+"]";
ue.printStackTrace();
}
catch(Login.PasswordException pe){
errorInfo = "password错误";
pe.printStackTrace();
}
request.setAttribute("errorInfo", errorInfo);
request.setAttribute("date", new Date());
return mapping.findForward("error");
// return null;
}
}
|
import org.apache.struts.action.ActionForm;
public class ActionForm_Login extends ActionForm{
private String password;
private String username;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
|
package Login;
public class LoginManager {
private static LoginManager instance = new LoginManager();
private LoginManager(){}
public static LoginManager getInstance(){
return instance;
}
public void login(String username, String password){
if(!"admin".equals(username))throw new UsernameException();
if(!"admin".equals(password))throw new PasswordException();
}
}
|
package Login;
public class PasswordException extends RuntimeException{
}
package Login;
public class UsernameException extends java.lang.RuntimeException{
}
|
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
<h1>User Login Page !!</h1>
<form action="login.do" method="post">
用户: <input type="text" size="10" name="username"/><br>
密码: <input type="password" size="10" name="password"/><br>
<input type="submit" value="Login" />
</form>
</body>
</html>
|
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"">
<%@taglib prefix="bean" uri="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Success !!</title>
</head>
<body>
<h1>Login Success !!</h1>
<h1>Welcome <%=session.getAttribute("username") %></h1><br/>
<h1>bean-write Test <bean:write name="username"></bean:write></h1><br/>
<form name="cal" method="post" action="cal.do">
<input type="text" size="8" name="value1" value="<%=request.getAttribute("value1")%>">
<select name="flag">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" size="8" name="value2" value="<%=request.getAttribute("value2")%>">
<input type="submit" value=" = "/>
<input type="text" value="<%=request.getAttribute("result")%>">
</form>
</body>
</html>
|
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"">
<%@taglib prefix="bean" uri="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Error</title>
</head>
<body>
<h1>Login Error !!</h1>
<h1><%= request.getAttribute("errorInfo")%></h1>
<h1><bean:write name="errorInfo"></bean:write></h1>
<h1><bean:write name="errorInfo" filter="false"></bean:write></h1>
<bean:write name="date" format="yyyy-MM-dd HH:mm:ss"/>
</body>
</html>
|
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
|
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
"">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="ActionForm_Login"></form-bean>
<form-bean name="calForm" type="cal.CalActionForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/login" type="Action_Login" name="loginForm" scope="request">
<forward name="success" path="/LoginSuccess.jsp"></forward>
<forward name="error" path="/LoginError.jsp"></forward>
</action>
<action path="/cal" type="cal.CalAction" name="calForm" scope="request">
<forward name="success" path="/LoginSuccess.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="MessageResources" />
</struts-config>
|
阅读(502) | 评论(0) | 转发(0) |