Struts2简介
      Struts是一款Apache基金会旗下的开源的web开发框架,分为struts1和struts2,但其实这两个版本没有直接联系,Struts2框架基于WebWork开发(另外一款web开发框架),
      是目前最为流行的框架,基本上可以说是目前web开发的一个标准,它可以替代Servlet这个请求控制层,并且提供了企业级开发所需要的各种强大的功能。
      Struts2的跳转路径基于xml配置,但是不是web.xml配置,而是在一个struts.xml的文件中配置(这个名字也可改),这样做的好处是可以在专门的文件中查看目前项目中已有的路径配置,方便我们调试。
      使用Servlet在接收用户请求时,需要通过request.getParameter()来得到表单的值,假如表单域多了的话,你需要在Servlet中写很多这种代码,而Struts2可以让你把form中的表单域和后台中的某个pojo绑定,一旦提交form,会自动给我们的pojo对应的属性赋值
      使用Servlet在实现上传功能时,需要我们手动的导入一些外部的包,并且自己实现上传的功能,而Struts2可以非常方便的在后台自动处理上传
      Servlet在多线程情况下可能会出现线程安全问题,而Struts2对每个请求都会生成一个Action去处理,所以不会出现线程安全问题
     当然,还有很多常用功能Servlet也不支持,比如拦截器,json,模板语言等等(需要我们自己编写代码实现)

首先建立一个web的工程:

导入struts2所需要的jar包,名字如下:

asm-3.3.jar  

asm-commons-3.3.jar

asm-tree-3.3.jar

commons-fileupload-1.3.jar

commons-io-2.0.1.jar

commons-lang3-3.1.jar

commons-logging-1.1.3.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar

log4j-1.2.17.jar

ognl-3.0.6.jar

struts2-core-2.3.15.jar

xwork-core-2.3.15.jar

没办法把包传上去,上网搜索一下。

在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>*.action</url-pattern>
           </filter-mapping>

在src下建立一个action,代码如下:

public class UserAction extends ActionSupport{
    public String execute(){
        HttpServletRequest request=ServletActionContext.getRequest();
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        request.setAttribute("username",username);
        request.setAttribute("password",password);
        return "success";
    }
}

需要继承ActionSupport。

在src下建立一个struts.xml的配置文件,配置代码如下

<?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>
   <package name="User" extends="struts-default" namespace="/User">
       <action name="UserAction" class="action.UserAction">
           <result name="success">/success.jsp</result>
       </action>
   </package>
</struts>

配置中package的name自定义,extends的内容是定死的,namespace也是自定义的。

action的name自定义的,class是类的位置,前面是包名点(.)类名。

result的name就是UserAction的return返回的内容,后面就是要跳转到的jsp,不要忘记前面加左斜杠。

在index.jsp中的代码如下:

<body>
    <form action="<%=path%>/User/UserAction.action" method="post">
       <table>
          <tr>
          <td>账号:</td><td><input type="text" name="username" />          </td>
          </tr>
          <tr>
          <td>密码:</td><td><input type="password" name="password" /></td>
          </tr>
          <tr>
          <td><input type="submit" value="登陆" /></td><td><input type="reset" value="重置" /></td>
          </tr>
       </table>
    </form>
  </body>

form中action中的User是配置中action的namespace中的内容,UserAction是配置中action中的name中的内容,后面是点(.)包名。

WebRoot下建立success.jsp名字跟struts.xml中result中的jsp名字要一致,代码如下:

<body>
      登陆成功
      <br/>
    <%
      String username=(String)request.getAttribute("username");
      String password=(String)request.getAttribute("password");
     %>
     账号:<%=username%>
     <br/>
     密码:<%=password%>
  </body>

用tomcat部署,运行就可以在网页上显示出你输入的账户名和密码。

地址栏输入的是:http://localhost:8080/工程名,然后回车。

struts2主要是为了简化servlet的代码。