首页 > 代码库 > 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登录