ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
记录一下配置struts的基本步骤,大神请绕道。 ## 第一步:导入jar包 首先到[struts](https://struts.apache.org/)官网下载jar包,下载后解压缩。  ![](https://box.kancloud.cn/2016-02-26_56cfbddbc2476.jpg)  选择struts-2.3.24.1-all.zip,下载全部文件。 在struts-2.3.24-all/struts-2.3.24/app目录下找到struts2-blank.rar,解压缩。在eclipse中新建dynamic web project,拷贝struts2-blank/WEB-INF/lib目录下的所有jar包到项目的WEB-INF/lib下。 ## 第二步:加入struts.xml 拷贝/Volumes/My struts-2.3.24/apps/struts2-blank/WEB-INF/src/java/struts.xml到工程的src目录下。  如果在struts.xml中不能自动提示或者在断网状态下也能自动提示,需要手动导入dtd文件。  ![](https://box.kancloud.cn/2016-02-26_56cfbddc007e4.jpg) ## 第三步:在web.xml中加入过滤器代码 在web.xml增filter配置,filter-name可以自定义,比如struts2,filter-class在struts2-core-2.3.24.jar/org.apache.struts2.dispatcher.ng.filter/StrutsPrepareAndExecuteFilter.class,复制名称即可。  ![](https://box.kancloud.cn/2016-02-26_56cfbddc2f093.jpg) ~~~ <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> ~~~ ## 四、配置文件详解 在struts.xml中,主要有四种标签 1. **bean标签**  bean标签用于创建一个javabean 2. **package标签**  用来管理不同的请求,比如前台请求和后台请求,分别放到不同的package里面。 | property | value | function | | --- | --- | --- | | name | 自定义包名,如test | 用户被别的包调用后继承 | | extends | 包名,默认为strut-default | 继承别的包 | | namespace | 自定义,如/new | action访问路径 | 3. **constant标签**  struts默认行为标签,[官网文档](https://struts.apache.org/docs/strutsproperties.html) | property | value | function | | --- | --- | --- | | struts.i18n.encoding | UTF-8 | 配置web默认编码集 | | struts.action.extension | 默认action,可选do或者其他 | struts默认请求为.action,配置后do和action都可 | | truts.enable.DynamicMethodInvocation | true或false | 开启后支持动态方法 | | struts.configuration.xml.reload | true或false | 开启后struts.xml修改后可以自动重新加载 | | struts.serve.static.browserCache | true或false | 开启后浏览器自动缓存静态内容,开发阶段可以关闭便于测试 | | struts.ui.theme | xhtml、simple、css_xhtml | 视图主题 | 4. **include标签**  引入其它的web.xml,便于管理和维护. ## 五、登录实例 工程目录:  ![](https://box.kancloud.cn/2016-02-26_56cfbddc48e73.jpg)  在src目录下新建包cn.ac.ucas.action,添加UserAction.java,新增username、password属性和响应的set和get方法、execute方法。execute方法中验证用户名和密码,如果正确返回success、错误返回fail。 ~~~ package cn.ac.ucas.action; public class UserAction { 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; } public String execute() { if (username.equals("admin") && password.equals("123456")) { return "success"; }else{ return "fail"; } } } ~~~ 在struts.xml中配置action: ~~~ <constant name="struts.action.extension" value="action,do"></constant> <constant name="devModel" value="true"></constant> <package name="test" namespace="/user" extends="struts-default"> <action name="login" class="cn.ac.ucas.action.UserAction"> <result name="success">/success.jsp</result> <result name="fail">/fail.jsp</result> </action> </package> ~~~ execute方法返回success则跳转至success.jsp,返回fail则跳转至fail.jsp页面.struts.action.extension属性是的action后缀为.action和.do均可。  在webcontent目录下新增index.jsp、success.jsp、fail.jsp。  index.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path=request.getContextPath(); %> <!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=UTF-8"> <title>Insert title here</title> </head> <body> <form action="user/login.action"> 用户名:<input type="text" name="username"> 密码:<input type="text" name="password"> <input type="submit" value="提交"> </form> </body> </html> ~~~ success.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>success</title> </head> <body> <h1>登录成功!</h1> </body> </html> ~~~ fail.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>fail</title> </head> <body> <h1>登录失败!</h1> </body> </html> ~~~ 测试:  用户名和密码与action里设置的一样时登录成功,不一样时登录失败:  登录页:  ![](https://box.kancloud.cn/2016-02-26_56cfbddc62f24.jpg)  结果页:  ![](https://box.kancloud.cn/2016-02-26_56cfbddc86053.jpg) ## **ps** 如果把struts.action.extension的值自定义,会有很好玩的事情:  比如: ~~~ <constant name="struts.action.extension" value="action,do,html"></constant> ~~~ 这样我们可以访问一.html为后缀的action.  ![](https://box.kancloud.cn/2016-02-26_56cfbddca62c0.jpg) 总结:  1.按照步骤一步一步来,知其然也知其所以然。  2.配置namespace的时候前端访问action 时候注意路径.  错误的写法: ~~~ <form action="/user/login.html" method="post"> ~~~ 正确的写法: ~~~ <form action="user/login.html" method="post"> ~~~