刚启动idea 就报出错误
[2019-04-14 03:08:22,780] Artifact 05-sturts2:war exploded: Error during artifact deployment. See server log for details.
解决办法:
file-project structure -probleam 里面有一个fix
第二个错误:
就是需要的jar包没有加全
这几个是创建idea 时自带的jar包,我使用的jar包是5版本的
commons-fileupload.jar commons-io.jar commons-lang.jar freemarker.jar log4j.jar ognl.jar struts2-core.jar
这个时候运行报错
需要再添加上几个jar包
asm-5.2.jar asm-commons-5.2.jar asm-tree-5.2.jar commons-lang3-3.8.1.jar javassist-3.20.0-GA.jar
这个时候idea 自动生生的sturts.xml文件是标错的
idea的配置文件扫描的类是
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
但是新的jar包中去掉了ng这个包,所以只需要改成下面的就可以了。学完springmvc后再看sturts2 真是挺简单的。
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
下面对jar包进行一下分析
asm-5.2.jar asm-commons-5.2.jar asm-tree-5.2.jar 红色的是用于实现代理的主要jar包
javassist-3.20.0-GA.jar
commons-lang3-3.8.1.jar javassist-3.20.0-GA.jar
commons-fileupload.jar
commons-io.jar 文件上传
commons-lang.jar 这个是定义的基本数据类型以及对它的扩展
freemarker.jar stutrs2 的ui
log4j.jar 日志
ognl.jar 对象图导航语言,是一种表达式是一个独立的项目是被sturts2引进来的
struts2-core.jar 核心jar包
X先放上一个简单的例子
jsp
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2019/4/14 Time: 15:04 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form name="f1" action="loginaction/login.action" method="post"> 姓名: <input type="text" name="name"/> 年龄: <input type="password" name="password"/> <input type="submit" value="提交"/> </form> </body> </html>
sturts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <package name="loginaction" namespace="/loginaction" extends="struts-default"> <action name="login" class="com.sturts2.action.loginAction"> <result name="success">/welcome.jsp</result> </action> </package> </struts>
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2019/4/14 Time: 15:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> name =${name} password = ${password} </body> </html>
需要注意的地方就是你的表单的属性名 name 必须要和你的实体类中的名字相同
讲解一下配置文件的加载顺序
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> 表单中的action中的地址就是loginaction/login.action 也就是名称空间加上 标签<action>中的name 从而找到要加载的试题类loginAction ,实体类中的方法
必须要写成 public String execute(){ return "success"} 否则不会执行 正好对应标签中的 <result>标签中的success
<package name="loginaction" namespace="/loginaction" extends="struts-default"> <action name="login" class="com.sturts2.action.loginAction"> <result name="success">/welcome.jsp</result> </action> </package> </struts>
原文:https://www.cnblogs.com/zhulina-917/p/10705297.html