最近刚刚接触SSH框架,接手别人的代码,要尽快熟悉以便日后维护,但感觉无从入手,一开始对着代码好几个小时连java类是怎么被调用的都不知道,从网上找的一些文章,大多都是教怎么配置而缺少解释。这两天查了些资料,把基本配置贴出来,解释一下部分代码,希望能给初学的人一些帮助。
1.Struts
这里按惯例我也用一个登陆界面为例。
我使用的编译器是Myeclipse,首先要去官网下载struts的包(我下的版本是struts-2.2.3.1-all):http://struts.apache.org/
嫌麻烦的话也可以不去下载,因为MyEclipse已经把这个放到了%MyEclipse for Spring%\MyEclipse for Spring 9\configuration\org.eclipse.osgi\bundles\95\1\.cp\data\2.1\core路径下面。
新建web project,解压刚下载的struts包并将下面九个包放到lib目录下(保险的办法的把所有jar包全放过去,必须用到的是下面的几个,比较多的说法是引五个核心包,但只有那五个是不够的):
commons-fileupload-1.2.2.jar(文件上传);
commons-io-2.0.1.jar(输入输出流组建);
commons-lang-2.5.jar(工具类);
commons-logging-1.1.1.jar(日志包);
freemarker-2.3.16.jar(UI标签模板);
javassist-3.11.0.GA.jar(分析、编辑和创建Java字节码的类库);
ognl-3.0.1.jar(语言包);
struts2-core-2.2.3.1.jar(核心类库);
xwork-core-2.2.3.1.jar(Xwork类库)。
下面进行FilterDispatcher的配置:
打开WebRoot/WEB-INF/web.xml文件,加入如下代码:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7 <display-name></display-name>
8
9 <!--=======================配置struts2============================-->
10 <filter>
11 <filter-name>struts2</filter-name>
12 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
13 </filter>
14 <filter-mapping>
15 <filter-name>struts2</filter-name>
16 <url-pattern>*.action</url-pattern>
17 <url-pattern>*.jsp</url-pattern>
18 </filter-mapping>
19 <!--==============================================================-->
20
21 <welcome-file-list>
22 <welcome-file>login.jsp</welcome-file>
23 </welcome-file-list>
24 </web-app>
这里FilterDispatcher用来初始化struts2,并且处理以.action和.jsp结尾的web请求。
在WebRoot下新建一个login.jsp,显示登陆界面(上面已配置该页面为本站点默认页面,提交给LoginAction类处理,实际上并不是直接提交给这个类,后面会介绍):
1 <%@ page language="java"import="java.util.*" pageEncoding="gb2312"%>
2 <%@ taglib uri="/struts-tags" prefix="s"%>
3
4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
5 <html>
6 <head></head>
7 <body>
8 <s:form action="LoginAction.action">
9 <s:textfield name="username" label="用户名:"></s:textfield>
10 <s:password name="password" label="密码:"></s:password>
11 <s:submit value="登陆"></s:submit>
12 </s:form>
13 </body>
14 </html>
在src中新建LoginAction类,处理登录请求:
1 package action;
2 import com.opensymphony.xwork2.ActionSupport;
3
4 @SuppressWarnings("serial")
5 public class LoginAction extends ActionSupport {
6 private String username =null;
7 private String password =null;
8 @Override
9 public String execute() throws Exception {
10 // TODO Auto-generated method stub
11 if(username.equals("admin") && password.equals("888888")){
12 return SUCCESS;//Action类中的常量,值为字符串success
13 }
14 return LOGIN;//Action类中的常量,值为字符串login
15 }
16 public String getUsername() {
17 return username;
18 }
19 publicvoid setUsername(String username) {
20 this.username = username;
21 }
22 public String getPassword() {
23 return password;
24 }
25 public void setPassword(String password) {
26 this.password = password;
27 }
28 }
下面编写登陆成功后的页面,在WebRoot下新建success.jsp:
1 <%@ page language="java"import="java.util.*" pageEncoding="gb2312"%>
2 <%@ taglib uri="/struts-tags" prefix="s"%>
3
4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
5 <html>
6 <head></head>
7 <body>
8 <h1>欢迎回来 <s:property value="username"/></h1>
9 </body>
10 </html>
之后在src目录下建struts.xml,用来配置上面Action的信息:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4 "http://struts.apache.org/dtds/struts-2.3.dtd">
5 <struts>
6 <package name="package"extends="struts-default">
7 <global-results>
8 <result name="login">/login.jsp</result>
9 </global-results>
10 <action name="LoginAction"class="action.LoginAction">
11 <result name="success">/success.jsp</result>
12 </action>
13 </package>
14 </struts>
此时运行程序,打开浏览器预览,可以看到登陆界面,输入admin/888888,即可转到登陆成功的界面。
这里解释一下struts.xml中的配置:
package是一个类似对象的组件,name属性指定一个名字,便于被其他package引用;extends属性(可选)是说从继承哪个package的行为,struts-default.xml许多包里都有定义,这里的是源自struts2-core-2.2.3.1.jar;所有的result、action必须配置到package中。
global-results指定所有的全局result,当返回结果为String类型的login(name属性的值)时,进入login.jsp页面。
action指定一个类,当action.LoginAction(调用覆写的execute方法)返回字符串success时,即转到success.jsp页面。
具体实现过程是:提交表单后,数据被提交到/struts2/下的一个.action程序,struts2截获这个请求(在web.xml中进行的配置,处理.action和.jsp结尾的请求),之后程序查找struts.xml文件,找到名为LoginAction的action,根据class名生成一个这个类的实例,将数据set到该实例中,调用execute方法,result标签则根据返回的结果进行页面的重定向,最后销毁这个action实例。
到这儿,Struts的基本工作流程就进行完了,以后会把拦截器、数据校验那些贴出来用作参考,主要java web方面我没有找到一个像w3school那样有效地参考网站,如果哪位朋友有类似的参考网站,麻烦说一下,我也就懒得敲那么多东西了。