本年八月份的时候已经是把SSH三层框架学完了,然后又转战Android开发,已经很久没用三大框架做东西了,所以想要花三四天的时间复习一下,就写在博客上。
附带SSH所有jar包网盘下载地址:http://pan.baidu.com/s/1hqf5ta8
首先,我们新创建一个web项目,然后引入jar包:commons-fileupload,commons-io,freemarker,javassist,ognl,struts2-core,xwork-core。
这里只是个简单的struts程序,所以仅仅引入了这些jar包
接下来,我们就是配置web.xml的内容了,web.xml:
<?xml version="1.0" encoding="GBK"?> <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_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 定义Struts2的核心Filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 让Struts2的核心Filter拦截所有请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
这里边是定义了一个Struts2的核心拦截器,Struts2的核心就是围绕拦截器而生的
然后,我们写一个登陆的页面:login.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> <%@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=GBK"> <title><s:text name="loginPage"/></title> </head> <body> <s:form action="login"> <s:textfield name="username" key="user"/> <s:textfield name="password" key="pass"/> <s:submit key="login"/> </s:form> </body> </html>
这里用到了struts2的标签库,在以后会做介绍
在login.jsp我们为form表单定义了一个action,是在点击login之后跳转的作用,在学servlet的时候应该都用过。
这个action我们可以在struts.xml中定义,这个struts.xml我们一般是放在src目录下边,也可以变化(不过也要改变相应的路径)
struts.xml:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <!-- 指定Struts 2配置文件的根元素 --> <struts> <!-- 指定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"/> <!-- 指定国际化编码所使用的字符集 --> <constant name="struts.i18n.encoding" value="GBK"/> <!-- 所有的Action定义都应该放在package下 --> <package name="lee" extends="struts-default"> <action name="login" class="org.crazyit.app.action.LoginAction"> <!-- 定义三个逻辑视图和物理资源之间的映射 --> <result name="input">/login.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
这里其它的东西不用管,我们看下<package></package>标签中的内容,这里边定义了一个action,设置name属性为“login”,class属性为:LoginAction
然后下边是三个result,分别有各自的name属性。
这个struts.xml的作用就是:当页面发来请求,由struts.xml处理,跳转到相应的java处理程序,然后通过java处理程序跳转到相应的result页面
然后,我们看LoginAction.java:
package org.crazyit.app.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { //定义封装请求参数的username和password属性 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; } //定义处理用户请求的execute方法 public String execute() throws Exception { //当username为crazyit.org,password为leegang时即登录成功 if (getUsername().equals("crazyit.org") && getPassword().equals("leegang") ) { ActionContext.getContext().getSession() .put("user" , getUsername()); return SUCCESS; } else { return ERROR; } } }
在LoginAction.java中我们定义了两个属性:username和password,并且定义了一个execute()方法,这个方法是默认的sruts处理方法
在这个execute方法中,我们定义了一个处理的逻辑,
这个逻辑规定用户名和密码等于XXX的时候,利用ActionContext.getContext().getSession().put()函数,添加一个属性user,内容为:getUsername()。并且,return SUCCESS。
这里的SUCCESS对应的就是struts.xml中的<result name="success">/welcome.jsp</result>
PS:需要注意的一点,我们可以return任何的一个字符串,只要在struts.xml中有与其对应的result即可。这里是由于继承了ActionSuppot,所以SUCCESS没有加上双引号,因为SUCCESS在ActionSuppot中默认为“success"字符串。
然后,我们执行:http://localhost:8080/Struts2Demo/login.jsp就可以执行相关的操作了