首页 > 代码库 > Struts2--使用Struts登录

Struts2--使用Struts登录

第一个Struts2项目(登录):
首先在MyEcilpse开发环境中创建Web Project项目。

 

导入jar包:

技术分享

 

 

Struts2框架是基于MVC模式开发的,他提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为StrutsPrepareAndExceptionFilter的Servlet过滤器来充当的。

需要在web.xml文件 重配置StrutsPrepareAndExceptionFilter过滤器。

web.xml代码:

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">    <filter>        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    </filter>
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list> <welcome-file>jsp/login.jsp</welcome-file> </welcome-file-list></web-app>

 编写实体类(UserInfo):

    private String name;  //用户名    private String password;  //密码        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    

编写Action类:

  一个action就是一搬只有特定的URl被请求时才会执行的代码。

   在Struts2中,系统不会识别哪些属性用于接受请求参数,哪些属性用于输出处理结果,只要对属性设置了setter和getter方法,该属性就可以被自动处理。

  此外,Action类中还可以使用复查的属性,如用户自定义的类、数组、集合对象等。

package cn.happy.action;import cn.happy.entity.UserInfo;import com.opensymphony.xwork2.Action;public class LoginAction implements Action {        private UserInfo user;      @Override    public String execute() throws Exception {        if(user.getName().equals("admin") && user.getPassword().equals("admin")){            return "success";        }else{            return "error";        }    }        public UserInfo getUser() {        return user;    }    public void setUser(UserInfo user) {        this.user = user;    }    }
当Struts2处理用户请求时,在默认配置下调用execute()方法

编写Struts2.xml文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>    <!-- 修改不用重启Tomcat -->    <constant name="struts.devMode" value=http://www.mamicode.com/"true" />  <!-- 创建一个default包,继承自Struts2的struts-default包 -->    <package name="default" namespace="/" extends="struts-default">        <action name="LoginAction" class="cn.happy.action.LoginAction">            <result name="success">/jsp/success.jsp</result>            <result name="error">/jsp/Login.jsp</result>        </action>    </package></struts>

 在Struts 2 配置文件中,包含了一下几个元素。

  package元素用于定义Struts 2处理请求的逻辑单元,name属性为必须的并且唯一,用来指定包的名称(被其他包引用);extends属性类似Java的extends关键字,用于指定要扩展的包。

  action元素用于配置Struts 2 框架的 "工作单元" Action类。action元素将一个请求的URL(action的名字)对应到一个Action类。name属性是必须的,用来表示action的名字;class属性可选,

用来设定Action类的权限定名。

  result元素用来设定Action类处理结束后,系统下一步将要做什么。name属性表示result的逻辑视图名称,必须与Action类返回的字符串进行匹配;而result元素的值表示与逻辑视图名称对应的物

理资源之间的映射,用来指定这个结果对应的实际资源的位置。

注意:

  在struts.xml文件中,每一个result属性的name名称都要与Action中返回的逻辑名称保持一致;否则,程序在运行时将无法正确运行。

 

 创建jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!-- 导入标签库 --><%@taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="http://www.mamicode.com/"> <title>登录页面</title> </head> <body> <div>
      <!-- action中添加的是LoginAction类 --> <s:form name="form1" namespace="/" method="post" action="LoginAction">

      <!-- 这里name中添加的属性一定要跟UserInfo类中的属性一样 --> 请输入用户名: <s:textfield name="user.userName"></s:textfield> <br/> <s:textfield name="user.password"></s:textfield><br/> <s:submit value="http://www.mamicode.com/登陆"></s:submit> </s:form> </div> </body></html>

jsp页面中的<s:textfield name="user.userName">这么写是不有种很别扭的感觉呢,这么才能不别扭呢,那么就要用到一个新的接口ModelDriven

下面看新的LoginAction类:

package cn.happy.action;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ModelDriven;import cn.happy.entity.UserInfo;public class LoginAction implements Action,ModelDriven<UserInfo>   {    private UserInfo user =new UserInfo();            @Override    public String execute() throws Exception {        System.out.println(user.getUserName());        if(user.getUserName().equals("admin") && user.getPassword().equals("admin")){            return "success";        }else{            return "error";        }    }        public UserInfo getUser() {        return user;    }    public void setUser(UserInfo user) {        this.user = user;    }    @Override    public UserInfo getModel() {                return user;    }    }

 ModelDriven<这里写的是一个实体类> ,UserInfo类一定要new,否则会报异常    java.lang.NullPointerException

再看jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!-- 导入标签库 --><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href=http://www.mamicode.com/"<%=basePath%>">    <title>登录</title>  </head>    <body>     <s:form name="form1" namespace="/" method="post" action="LoginAction">           请输入用户名: <s:textfield name="userName"></s:textfield> <br/>        <s:textfield name="password"></s:textfield><br/>        <s:submit value=http://www.mamicode.com/"登陆"></s:submit>     </s:form>       </body></html>

这会是不是感觉好多了。


好下面开始测试:

技术分享

测试成功!

技术分享

 

Struts2--使用Struts登录