前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现。
1、新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下。
2、拷贝完jar包还不能进行工作,用户的请求必须达到ActionServlet,我们才能通过struts处理请求,所以还需要将ActionServlet配置在web.xml文件里面。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
3、建立actionForm,表单上的用户名和密码,必须与actionForm中属性的get/set方法后半部分一致。
package com.xxjstgb.struts; import org.apache.struts.action.ActionForm; /** * 登录ActionForm,负责表单收集数据 * @author liuzhengquan * */@SuppressWarnings("serial") public class LoginActionForm extends ActionForm { private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
4、建立LoginAction,这里需要继承struts的Action类。处理Model层的逻辑,并返回转向信息。
package com.xxjstgb.struts; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * 登录Action * 负责取得表单数据、调用业务逻辑、返回转向信息 * @author liuzhengquan * */ public class LoginAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginActionForm laf=(LoginActionForm)form; String userName=laf.getUserName(); String password=laf.getPassword(); UserManager userManager=new UserManager(); try { userManager.login(userName, password); return mapping.findForward("success"); } catch (UserNoFoundException e) { e.printStackTrace(); request.setAttribute("msg", "用户不能找到,用户名称=【"+userName+"】"); }catch (PasswordErrorException e) { e.printStackTrace(); request.setAttribute("msg", "密码错误"); } return mapping.findForward("error"); } }
5、配置struts-config.xml文件。在struts(一)里面我们通过if…else判断截取的URL,根据相应的URL,调用相应的Action。在struts框架里面已经对此做了简单的封装,我们只需要将action和actionForm配置在struts-config.xml文件里面。通过映射他们的关系,来实现匹配工作,替代了原来的if…else语句。
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="LoginForm" type="com.xxjstgb.struts.LoginActionForm"></form-bean> </form-beans> <action-mappings> <action path="/login" type="com.xxjstgb.struts.LoginAction" name="LoginForm" scope="request"> <forward name="success" path="/login_success.jsp"></forward> <forward name="error" path="/login_failed.jsp"></forward> </action> </action-mappings> </struts-config>
6、访问
<body> <form action="login.do" method="post"> 用户名:<input type="text" name="userName"><br> 密 码:<input type="password" name="password"> <br> <input type="submit" value="登录"> </form> </body>
至此,通过struts框架完成了登录实例。