具体的报错如下:
严重: Servlet.service() for servlet [default] in context with path [/mobile_scm] threw exception
java.nio.file.InvalidPathException: Illegal char <:> at index 3: jar:file:\E:\Users\Administrator\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\mobile_scm\WEB-INF\lib\struts2-core-2.3.24.jar
相信大家在学习struts2时很多人碰到了这样的问题,我在本博客论坛上没有找到一个能解决我的问题的方案,大多数都是在打着标题划水,说什么核心jar包必须放在lib中来,然而是个初学者就知道按照教程来做放在lib中,对此无力吐槽,在此我特别强调一下我的问题,这是一个版本问题,重要的事情说三遍,版本问题,版本问题,版本问题。我之前用的是jdk10 ,tomcat8.5,然后struts2是2.3.24,这样的版本是不能够成功加载struts2的,当然我的struts2配置是没有问题的。
解决方案如下:
在struts2的官网中下在2.5.18版本的struts包,就能和以上所提及的工具版本适应。
我的建议是自己学习的话,jdk假如你用了老版本的问题话,你就用tomcat和struts2的老版本,再要么就都用最新版本的,避免出现这些浪费时间的问题。
在这里我来总结一下struts2的配置方法。
struts2是基于filter的,所以需要在web.xml中将struts2加载起来,这一步是核心,少了这个strut2是不可能成功被加载的。
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
向我这样配置就没有问题了。
然后是加载自己所需配置的struts.xml文件
<constant name="struts.devMode" value="true" />
<package name="str" extends="struts-default">
<action name="login" class = "mobile_scm.Login" method="execute">
<result name = "toOKJSP">/ok.jsp</result>
<result name = "toNOJSP">/no.jsp</result>
</action>
</package>
action类
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() {
System.out.println("你好");
UserInfoService usRef = new UserInfoService();
if(usRef.login(username,password)) {
return "toOKJSP";
}
else {
return "toNOJSP";
}
}
第二类
public class UserInfoService {
public boolean login(String username, String password) {
if(username.equals("a") && password.equals("aa")) {
return true;
}else {
return false;
}
}
}
jsp界面
<form action="login.action">
username:<input type = "text" name = "username"><br>
password:<input type = "password" name = "password"><br>
<input type = "submit" value = "login">
</form>
然受就是no.jsp和ok.jsp很简单的两个界面。
这就是一个比较简单的struts2的示例。