由于近段时间一直在忙于ROR的开发,将近快半年没有接触J2EE了,这使得将原先本不熟的Struts2忘的一干二净。于是现静下心来重新复习一下Struts2,并将一些个人认为较精典的例子摘录下来以防以后又忘记。
好了不废话,现进入正题:
开发一个登录示例,暂不考虑连接数据库(本例基于Struts2.2.1,eclipse3.5 for J2EE为背景开发)。
一、配置Tomcat
1.打开Eclipse,选择Window->Preferences,这时打开的为首选项对话框,在其中选择Server的子选项Runtime Environments如图:
2.点击Add添加相应的服务器,这里我们采用的是Tomcat6.0.35,如图:
3.单击Next,进入Tomcat的配置对话框,在其中选择你安装的Tomcat的目录:
注意,在运行Tomcat时要用到JAVA_HOME环境变量,而在事先配置时要设置JAVA_HOME.它指定的为JDK目录,如“C:\Program Files\Java\jdk1.6.0_10”
二、创建项目
在配置好Tomcat后则现在需要新建一个项目,选择File菜单,New子菜单中的Dynamic Web Project选项,来创建一个动态的Web项目.命名为LoginDemo。
接着选择Servers选项卡,在其中右击选择New->Servers:
在弹出的对话框中选择Tomcat6.0:
选择后单击Next,选择LoginDemo单击Add将其添加入Tomcat服务器中:
单击Finish完成,则在Servers选择卡中出现了Tomcat服务器,则可通过右击来控制Tomcat的启动与停止:
这一系列动作完成后,则展开LoginDemo项目的结构如下:
三、使用Struts2框架进行开发
1.将Struts2必需的6个包:commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar、freemarker-2.3.16.jar、javassist-3.7.ga.jar、ognl-3.0.jar、struts2-core-2.2.1.1.jar、xwork-core-2.2.1.1.jar放入WebContent下的lib中。也可直接放入Tomcat的lib目录下(这的区别是一个为局部有效和全局有效)。其中的javassist-3.7.ga.jar包在Struts2.2.1的lib目录下没有。这可以到它的apps目录中的struts2-blank.war压缩示例中找到了。打开它使用WinRAR软件解压.
2.修改WebContent目录下的web.xml文件,添加过滤器,将用户的请求交给Struts2框架处理:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>LoginDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 使用struts2中的拦截器来拦截用户的所有请求,使项目拥有struts2的功能 -->
<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>
</web-app>
3.在WebContent目录下新建login.jsp文件如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引入Struts2的标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>
<!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=UTF-8">
<!-- 使用properties资源文件中key为loginPage的值 -->
<title><s:text name="loginPage" /></title>
</head>
<body>
<!-- Struts2 form标签 -->
<s:form action="login">
<s:textfield name="username" key="user" />
<s:textfield name="password" key="pass" />
<s:submit key="login" />
</s:form>
</body>
</html>
4.由于上面的jsp文件使用了properties资源文件,则在src目录下新建一个mess_zh_CN.properties资源文件信息如下:
这里使用了Eclipse 插件JInto,用于编辑properties文件,方便properties的多语言支持,简化使用native2ascii 命令转换,JInto官网:http://www.guh-software.de/jinto_en.html。关于JInto的安装参考下面的附录。
5.新建登录失败页面error.jsp与登录成功页面welcome.jsp页面:
error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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=UTF-8">
<title><s:text name="errorPage" /></title>
</head>
<body>
<s:text name="failTip" />
</body>
</html>
welcome.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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=UTF-8">
<title><s:text name="succPage" /></title>
</head>
<body>
<s:text name="succTip">
<s:param value="#session.user" />
</s:text>
</body>
</html>
由于资源文件succTip key中使用了{0}占位符,故在这里使用<s:param>标签传入值替换。
6.在src中新建一个org.websoft.action.Action,它继承com.opensymphony.xwork2.ActionSupport(其实也可不继承)。
package org.websoft.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class LoginAction extends ActionSupport {
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 {
if (getUsername().equals("websoft")&&
password.equals("123456")) {
// 得到Session对象,并设置user的值
ActionContext.getContext().getSession().put("user", username);
return SUCCESS;
} else {
return ERROR;
}
}
}
7.在src的根目录下新建struts.xml与于配置Action与页面的映射:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- 指定全局的资源文件mess -->
<constant name="struts.custom.i18n.resources" value="mess" />
<!-- 指定国际化编码所使用的字符集 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<package name ="default" extends="struts-default">
<action name="login" class="org.websoft.action.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
上面的xml DTD声明可以在struts-core-2.2.1.1.jar包中的struts-defaults.xml中找到.因为它为上面struts.xml的父文件。
四、结果浏览
启动Tomcat,在浏览器中输入:http://localhost:8080/LoginDemo/login.jsp
不输入直接单击登录,进入错误页面:
回退输入正确的用户名与密码,进入欢迎页面:
附录:插件JInto的安装:
1.进入JInto的官网http://www.guh-software.de/jinto_en.html,下载Jinto,注意对应Eclipse的版本:
2.解压下载来的ZIP文件得到features和plugins两个目录
3.在eclipse的根目录下新建一个命为ext-links的目录,和另一个命不links的目录
4.再进入ext-links目录,在其中新建一个jinto目录
5.进入jinto目录,在其中新建一个eclipse目录
5.将解压得到的features和plugins两个目录移动到这个新建的eclipse目录下
6.回退到eclipse的根目录下进入最初新建的links目录
7.在links目录下新建一个名为jinto.link的连接文件
8.在jinto.link的第一行中写入:path=./ext-links/jinto
9.重启Eclipse,查看window->preferences->General->Editors->File Asssociations ,看是否找到 .properties,如图:
成功安装后的Eclipse目录文件结构如下: