Struts2简介:(链接至百度百科)
简介
这里我们主要解释一下Struts1和Struts2的区别。首先,我们要知道Struts2并不是Struts1的升级版,而是基于WebWork的一个“衍生品”。Struts1的缺点恰恰就是Struts2的优点,因为Struts2就是为了解决Struts1所不方便处理的问题而产生的。
那么,什么是Struts2的优点呢?我总结了下,大体上有一下七点:
-
1.无需与Servlet API整合,更容易测试(不需要有request ,response)
-
2.优雅的请求参数封装(不用重复的使用request.getParameter())
-
3.灵活的视图技术(不仅仅支持jsp)
-
4.丰富的表达式语言(EL表达式,OGNL)
-
5.机动,灵活,简单的配置
-
6.线程的安全控制器(Action)
-
7.插件
接下来我们看看Struts2的工作流程,这里引用了网友“name_s_jimmy”的图片
博客地址
第一步:新建工程,然后进行导包
在Eclipse下进行新建项目,这里需要注意和MyEclipse的区别,勾选添加web.xml的选项,如下图所示。
第二步:对web.xml进行配置
web.xml文件是包含了我们最基础的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>
复制代码
第三步:新建jsp页面
<br>基础配置完成后,编写两个jsp页面,功能分别是用来登录和显示登录成功。具体就不多赘述了,只需要注意一点,**登录页面form表单的设计**。具体代码如下:
复制代码
<form action = "login.action" method="post">
<table border="1px">
<tr>
<td>登录名:</td>
<td style="width:200px"><input type="text" name = "uname"></td>
</tr>
<tr>
<td>密码:</td>
<td style="width:200px"><input type="password" name="pwd"></td>
</tr>
<td colspan="2">
<input type="submit" value="提交"/>
<input type = "reset"/>
</td>
</table>
</form>
复制代码
那么这个form需要注意的就是以下几点:
-
action的命名
Struts2中的action相当于我们之前接触到的MVC模式中的Servlet的逻辑处理角色,这也是Struts2的特色之一。这里我写的是login.action,同样的,写成login也是合理的,这里只是为了方便阅读。 -
method:提交方式,这里采用post
Struts2内部采用的是utf-8编码格式,所以使用post会很方便的解决了中文乱码问题,但是如果换成get就会出问题,这里还请大家思考一下。 -
输入控件的name
控件的name必须和具体action中的私有变量保持一致,Struts2的优点之一就是参数的封装,这个过程全是由Struts2代替我们完成的,所以我们必须让这两个地方的变量保持一致,让Struts2封装前和解封后的数据可以一一对应。(这里是我自己的理解,如果有错,请海涵,在评论区评论,我会及时更正)
第四步:新建struts.xml文件
这里的文件不推荐更改名称,因为这个xml文件是我们整个Struts2工程的核心,我浅显的理解是这算是将MVC中的请求和转发集成到了一个独立的文件中,方便我们阅读和修改。代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/WebContent/index.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="login" class="com.it.Struts2_Demo.action.User">
<result name="success" >success.jsp</result>
<result name="error" type="redirect">index.jsp</result>
</action>
</package>
</struts>
复制代码
这里,我们注意到,文件中有一个action的name是login,与前台form表单中的action相对应,这里的action就是对form中的数据进行转发。转发至class中的类处理
第四步:编写User类(Action类)
User类对应MVC模式中servlet的逻辑控制部分,用来处理前台请求的数据,代码如下:
public class User {
private String uname;
private String pwd;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [uname=" + uname + ", pwd=" + pwd + "]";
}
public String execute() {
if("tom".equals(uname)&&"123".equals(pwd)) {
return "success";
}else {
return "error";
}
}
}
复制代码
最后,我们将工程发布到服务器上,在浏览器中进行测试
附(项目整体图)