这些jar包的作用:第一个日志记录
第二个 使用freemarker制作页面,freemarker和jsp一样都是页面操作的
ognl是struct2提供的向el标签设置的包
struct2-core是struct2的核心jar包
struct2是从xwork继承而来的,struct2中的拦截器都是使用的是xwprk中的
最后一个文件上传使用appach的fileupload进行上传
<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>
4、
6、创建action对象
Struts2登录 需要注意:Struts2需要运行在JRE1.5及以上版本 1、创建Java Web项目 2、引入Struts2的依赖包,将依赖包拷贝到WEB-INF/lib下 * commons-logging-1.0.4.jar * freemarker-2.3.15.jar * ognl-2.7.3.jar * struts2-core-2.1.8.1.jar * xwork-core-2.1.6.jar * commons-fileupload-1.2.1.jar 3、在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher <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> 4、提供struts2配置文件struts.xml,放到src下 5、建立JSP(login.jsp、login_success.jsp、login_error.jsp) 6、创建Struts2的Action,Struts2的action可以不用继承Struts2框架中的任何类 也不用实现Struts2框架中的任何接口,所以Struts2的Action可以是一个POJO(纯粹的Java对象) 所以Struts2的Action测试更容易 Struts2缺省方法名称:public String execute() throws Exception; 7、在Action中提供getter和setter方法,便于收集数据(这样收集数据的模式一般可以成为属性驱动模式) Action是有struct2使用反射模式生成的,然后在调用action之前,struct2的拦截器调用getter和settter方法将属性传递给action 8、将JSP和Action配置到struts.xml配置文件中 9、了解struts-default.xml配置文件,default.properties,Struts2的默认后缀为.action
我们来看下程序的代码:
package com.weiyuan.test;
/**
* struct2的action可以不继承任何框架的接口
* 1、默认调用的是execute()方法
* */
public class LoginAction {
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;
}
public String execute() throws Exception{
System.out.println("execute is called");
System.out.println("execute is called" +username);
System.out.println("execute is called"+password);
if("admin".equals(username)&&"admin".equals(password)){
return "success";
}else{
return "error";
}
}
}
struct.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 需要继承extends="struts-default",否则struct2的拦截器就无法使用 --> <package name="struct2" extends="struts-default"> <action name="login" class="com.weiyuan.test.LoginAction"> <result name="success">/login_sucess.jsp</result> <result name="error">/login_error.jsp</result> </action> </package> </struts>
这里要强调几点:
1、
<result name="success">/login_sucess.jsp</result>里面的名字success必须和
LoginAction中return返回的字符串一一对应,名字不能发送改变
2、struct2以包名对action进行管理,同一模块下的action可以放在同一个包下面,包必须继承struts-default才能保证struct2的拦截器能够正常使用
3、
class="com.weiyuan.test.LoginAction">需要指定action所在的全类名
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="login.action"> 用户:<input type="text" name= "username"><br> 密码 :<input type="text" name="password"><br> <input type="submit" value=" 登陆"> </form> </body> </html>
1、上面login.action中的login必须和struct.xml中的 <action name="login" class="com.weiyuan.test.LoginAction">中name的名字一一对应,action是struct2默认的后缀名
login_sucess.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> 登陆失败 </body> </html>
login_sucess.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> 登陆成功 </body> </html>
整个工程的架构如下所示: