企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
上一篇我们简单了解了[struts](http://blog.csdn.net/lovesummerforever/article/details/18942381)[原理](http://blog.csdn.net/lovesummerforever/article/details/18942381),学习SSH,第一部是傻瓜式学习法,人家怎么做就跟着怎么做就ok。我们以登录为例,Struts配置步骤总结如下(如图2.1): ![](https://box.kancloud.cn/2016-06-21_5769087e2ace6.jpg) 图2.2 ### 1、jar包拷贝 首先是建立java web项目,之后打开我们我们下载好strtus框架,Struts-1.2.9-bin文件夹和struts-1.2.9.src源文件文件夹。在bin文件夹中的lib文件中拷贝struts的jar包,拷贝到我们自己项目struts_login –>lib文件夹下(如图2.2)。 ![](https://box.kancloud.cn/2016-06-21_5769087e4b5fa.jpg) 图2.2 ### 2、web.xml文件配置 找到Struts-1.2.9-bin中Struts-1.2.9-bin-->webapps下的struts实例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,复制配置对ActionServlet的配置,粘贴到我们的项目struts_login的WEB-INF下的web.xml中,代码如下所示。主要是对struts自带的ActionServlet进行配置。 ~~~ <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> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!--Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> ~~~ ### 3、在项目中建立自己的ActionForm 在项目中建立自己的ActionForm,继承struts框架中已经写好的ActionForm,在ActionForm设置用到的数据,并且要和我们界面上设置的名称一致。因为我们在提交表单的时候,所有的请求都会放到ActionForm中。建立登录的ActionForm,LoginActionForm.java代码如下所示。 ~~~ package com.bjpowernode.struts; import org.apache.struts.action.ActionForm; /** * 登录ActionForm,负责表单收集数据. * 表单的属性必须和ActionForm中的get和set的属性一致. * @author summer * */ public classLoginActionForm extends ActionForm { //用户名。 private Stringusername; //密码。 private String password; //设置密码。 public voidsetPassword(Stringpassword) { this.password = password; } //得到用户名。 public StringgetUsername() { return username; } //设置用户名。 public voidsetUsername(Stringusername) { this.username = username; } //得到密码。 public StringgetPassword() { return password; } } ~~~ ### 4、建立自己的Action 建立自己的Action,同时继承struts框架中的org.apache.struts.action.Action,重载父类的execute方法。在这里完成取出表单中的数据。通过CalActionFormcalForm= (CalActionForm)(CalActionForm)form;(struts框架中已经帮我们封装好了,我们去使用就可以了)来取得表单中的值。经过判断后,进行相应的操作,跳转到相应的页面。Action的功能是负责拿到表单数据和调用业务逻辑后进行页面跳转。建立登陆的Action类,LoginAction.java类,调用业务逻辑类UserManager的login方法。代码如下所示。 ~~~ packagecom.bjpowernode.struts; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.struts.action.Action; importorg.apache.struts.action.ActionForm; importorg.apache.struts.action.ActionForward; importorg.apache.struts.action.ActionMapping; /** *登录Action *负责取得表单数据,调用业务逻辑,返回转向信息. * * @author summer * */ public classLoginAction extendsAction { @Override public ActionForward execute(ActionMappingmapping,ActionForm form, HttpServletRequest request, HttpServletResponseresponse) throws Exception { LoginActionForm laf = (LoginActionForm)form; Stringusername = laf.getUsername(); Stringpassword = laf.getPassword(); UserManager userManager = newUserManager(); //传递用户名和密码 try { userManager.login(username, password); request.setAttribute("username", username); return mapping.findForward("success"); }catch(UserNotFoundException e) { e.printStackTrace(); request.setAttribute("msg","用户不能找到,用户名称=[" +username +"+]"); }catch(PasswordErrorException e) { e.printStackTrace(); request.setAttribute("msg","密码错误"); } return mapping.findForward("error"); } } ~~~ ### 5、建立struts-config.xml 作为Struts框架的核心描述,struts-config.xml可以说“一切尽在掌握”。它不但描述了MVC模型,定义所有视图层和控制层之间的接口(ActionForm),与控制层和模型层的接口(Action)进行结合,而且可以定义一些附加组件,如国际化信息资源排至文件,标签库信息等。 仍然是站在巨人的肩膀上,将我们下载的struts  bin文件夹中的struts-config.xml文件复制到我们的项目的WEB-INF中,删除struts-config.xml中的注释部分。把Action和ActionForm配置起来。ActionForm放到<form-beans></form-beans>中,Action配置放到<action-mappings></action-mappings>中,struts-config.xml配置代码如下所示。 ~~~ <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/> </form-beans> <action-mappings> <action path="/login" type="com.bjpowernode.struts.LoginAction" name="loginForm" scope="request" > <forward name="success" path="/login_success.jsp"/> <forward name="error" path="/login_error.jsp"/> </action> </action-mappings> </struts-config> ~~~ 其中form-beans元素中可以定义0个或1个以上的form-bean元素,每个form-bean被认为是一个ActionForm对象,name属性表示form-bean元素的名称,type属性指定其类名和路径。 Action-mappings元素用来包含零到多个action,其子元素action负责具体映射的详细信息。在action-mapping元素中可以定义0个或1个以上的action元素。每个action元素接受path属性定义的请求,并映射到type属性所定义的具体action对象。在映射过程中,将name属性定义的actionform一并传过去,它有如下属性: Parameter,scope两个属性指定了传送方式和范围,scope常用的值有两个“session”和“request”。 Validate属性指定了是否需要actionform的验证。 Forward元素,将请求success转发到”**/**login_success.jsp**”**页面。 **** ### 6、业务逻辑类UserManager和自定义异常类 代码如下所示: ~~~ packagecom.bjpowernode.struts; publicclassUserManager { publicvoid login(Stringusername,Stringpassword) { if(!"admin".equals(username)) { thrownewUserNotFoundException(); } if(!"admin".equals(password)) { thrownewPasswordErrorException(); } } } ~~~ 自定义异常类UserNotFoundException和PasswordErrorException代码如下所示。 ~~~ packagecom.bjpowernode.struts; public class UserNotFoundExceptionextends RuntimeException { public UserNotFoundException() { } public UserNotFoundException(Stringmessage) { super(message); } public UserNotFoundException(Throwable cause) { super(cause); } public UserNotFoundException(Stringmessage,Throwable cause) { super(message, cause); } } packagecom.bjpowernode.struts; public class PasswordErrorExceptionextends RuntimeException { public PasswordErrorException() { } public PasswordErrorException(Stringmessage) { super(message); } public PasswordErrorException(Throwable cause) { super(cause); } public PasswordErrorException(Stringmessage,Throwable cause) { super(message, cause); } } ~~~ ### 7、视图jsp页面调用。 登录界面login.jsp,错误显示界面login_error.jsp,登录成功界面login_success.jsp。代码如下所示。 ~~~ <%@pagelanguage="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Inserttitle here</title> </head> <body> <form action="login.do" method="post"> 用户:<inputtype="text" name="username"><Br> 密码:<inputtype="password" name="password"></br> <input type="submit" value="登录"> </form> </body> </html> ~~~ Login_success.jsp. ~~~ <%@page language="java"contentType="text/html;charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> ${username},登录成功! </body> </html> ~~~ Login_error.jsp界面。 ~~~ <%@page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> </head> <body> <%-- <%=request.getAttribute("msg") %> --%> ${msg } </body> </html> ~~~ 就这样我们实现了运用struts框架完成用户登录。就这样从初步学习到简单应用,随着应用的次数增多,我们会对struts理解越来越深刻,并且感受struts框架给我们带来的便捷。 下一篇[Struts表单处理器ActionForm(静态动态)](http://blog.csdn.net/lovesummerforever/article/details/18951649)