前两篇讲解了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框架完成了登录实例。