一直想学习server端的开发,但是没有时间,最近终于有空闲下来学习一些基本的入门知识,听论坛里边都说struts架构在java web中特别流行,就搜了一个iteye,发现有一篇文章,操作和入门知识介绍比较详细,就照着他的步骤一步一步操作下来,觉得获益匪浅,在此展示原文出处http://dianziermu.iteye.com/blog/296650,感谢点子二木大侠的勤劳总结,为我java web struts框架的学习打下基础。
首先,开发需要IDE,很多人建议MyEclipse,因为其中有可视化工具,可以把Struts、Spring、Hibernate等框架可视化的加入到项目中。鱼和熊掌不可兼得,毕竟MyEclipse的功能强大是建立在收费的基础上的,因此我选择直接利用eclipse。eclipse有很多版本,如:for JEE,for Java,for RCP,for C++等,我当然选择for JEE的版本,即:Eclipse IDE for Java EE Developers。
下载成功后,需要安装JDK,(当然也有不需要安装JDK的版本),然后就可以打开Eclipse开始新建项目。File-》New-》Project,自然是选择Dynamic Web Project,然后项目名称根据自己的情况,我建立的项目名称为dianziStruts2Base,目的是同原作保持一致,以免发生错误,却不知道在哪里修改,然后点击Finish完成。
下面需要把项目部署到Tomcat服务器中,我使用的是tomcat6.0版。在java透视中,下方有一个Servers标签,在其中,new一个Servers,然后右击此project,在选项卡中选择run as -》Run on Server,然后eclipse会让选择tomcat server,选择刚才创建的tomcat 6.0,点击finish,此网站工程便可运行在tomcat 服务器上。现在需要将Struts2框架(struts2架构我们会在后边详细学习)加入到项目中,下载完Struts2的框架包后,在lib文件夹里我们只需找出
- xwork-core-2.3.14.jar
- struts2-core-2.3.14.jar
- ognl-3.0.6.jar
- freemarker-2.3.19.jar
- javassist-3.15.0-ga.jar
- commons-io-2.0.1.jar
- commons-fileupload-1.2.2.jar
- commons-lang3-3.1.jar
这七个jar包(jar包的版本有可能与我的不一致,没关系)加载到项目即可,Struts2框架lib文件夹下其他jar包可根据项目需要,另行加入。加入这4个jar包的方法是,在项目中找到dianziStruts2Base-》WebContent-》WEB-INF-》lib,然后复制这四个jar包,再粘贴到项目下的lib中,此时可以看到dianziStruts2Base-》Libararies-》Web App Libraries中新增了这四个jar包,框架导入成功。
接下来,开始编写第一个jsp页面。在WebContent下新建一个default.jsp页面,此页面暂时不可修改为其他名称,待以后懂得如何在web.xml中配置首页面后,可以改为其他名称。其中需要注意一下<form action="login.action"method="post">,具体含义后面会讲解。default.jsp页面内容如下:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <!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=GBK"> <title>首页</title> </head> <body> <form action="login.action" method="post"> <table align="center"> <caption>用户登录</caption> <tr> <td>用户名:<input type="text" name="username" /></td> </tr> <tr> <td>密 码:<input type="password" name="password" /></td> </tr> <tr> <td><input type="submit" value="登录" /></td> </tr> </table> </form> </body> </html>
下面开始建立分发控制器,即Action。在src文件夹下建立com.dianziaction.login.LoginAction类,此类可以要实现Action接口,才能使用Action接口中内置的SUCCESS等属性。
/** * */ package com.dianzi.actionlogin; import com.opensymphony.xwork2.Action; /** * * @author frand * @date 2013-05-10 * @version 1.0 */ public class LoginAction implements Action { private String username;//用户名 private String password;//密码 private String result;//返回结果 /* * (non-Javadoc) * * @see com.opensymphony.xwork2.Action#execute() */ public String execute() throws Exception { return null; } /** * 登录 * * @return */ public String login() { if (username.equals(password)) { return SUCCESS; } else { return ERROR; } } /** * 登出 * * @return */ public String logout() { result = "请重新登录!"; return SUCCESS; } 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 getResult() { return result; } public void setResult(String result) { this.result = result; } }
其中,属性username、password,是首页default.jsp中的属性,两者必须对应一致。里面的get、set方法不可少。当首页表单提交后,即点击登录按钮后,触发action="login.action",Struts2框架将会在Struts2的配置文件中找名称为login的Action,下面我们需要新建这个配置文件,即struts.xml。新建的位置必须是根目录下,即src下,且文件名不可改。内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configeration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 登录配置文件 --> <include file="struts-login.xml" /> </struts>
原本可以直接在struts.xml中配置Action对应路径,但为了防止系统扩大,我们可以将配置路径写到其他xml文件中,然后在struts.xml中引用这个文件,这样我们可以把相关模块的配置文件写到一个配置文件中,例如我新建了一个struts-login.xml,位置必须和struts.xml在一个目录下,但名称可以任意。下面是struts-login.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configeration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="login" extends="struts-default">
<action name="login"
class="com.dianzi.action.login.LoginAction" method="login">
<result name="success">/jsp/welcome.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
<action name="logout"
class="com.dianzi.action.login.LoginAction" method="logout">
<result name="success">/jsp/login.jsp</result>
<result name="error">/jsp/error.jsp</result>
</action>
</package>
</struts>
我们可以看到,<action name="login"class="com.dianzi.login.action.LoginAction" method="login">一句,是将name="login"的Action配置给了LoginAction的login方法。如果不写参数 method="login",则将该login配置给LoginAction的execute方法。其中name="login"的login就是页面中所引用的action="login.action"的login,两者必须一致,但name的值可以为任意,只要两者一致即可。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" 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"> <display-name>dianziStruts2Base</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> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
这样,我们简单登录及跳转页面就做好了。