说明
最近SSH框架学的好像还不错,后面如果学的好,就要做一个综合项目了。不过我的英语还是一直没有学习,我觉得我就是做任何事情都会把英语排到最后,其他事情再难也想先做其他事情,这样当然不行了,我决定把中午的时间给英语。
好了,废话不多说了。
现在只是一个最简单Struts2框架的小例子
环境
jdk1.7
eclipse mars4.5.2
tomcat8
jar包
我这里用到的是Struts2.3.37
可以到这里下载https://struts.apache.org/download.cgi#struts2520
我这里下载的是full distribution,即完整版。我不敢下载太新的,怕出错。
步骤
先新建一个Java web项目
刚建完的项目中什么都没有,首先导包,把下载好的Struts包解压,将lib里面的这些包复制到WEB-INF下面的lib文件夹中
在WEB-INF下新建一个xml文件名为web.xml,作用是拦截客户端请求,并将请求转发给相应的Action类处理,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 拦截所有的请求,并将请求转到Struts2处理, -->
<web-app>
<!-- 配置struts2框架的核心Filter -->
<filter>
<!-- 配置Struts2核心Filter的名字 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter的实现类 -->
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<!-- 配置Filter拦截的URL -->
<filter-mapping>
<!-- 过滤器拦截名称 -->
<filter-name>struts2</filter-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<url-pattern>/*</url-pattern>
<!-- 拦截的是所有请求,Struts2会将/后面部分决定调用哪个业务逻辑组件(Action) -->
</filter-mapping>
</web-app>
在Java Resources的src包下新建一个包,我叫做com.shanmu.action,在下面建一个类LoginAction.java,这是一个业务逻辑控制器,代码如下:
package com.shanmu.action;
public class LoginAction {
private String username;
private String password;
public String login(){
if(username.equals("shanmu")&&password.equals("123")){
return "success";
}else{
return "input";
}
}
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;
}
}
其中login这个方法返回值是String类型的,后面会根据返回的字符串判断执行哪一个页面,下面来写一个struts.xml文件,在src目录下的,负责配置业务逻辑控制器Action
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 指定字符编码集 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 配置包 -->
<package name="default" extends="struts-default">
<!-- 配置名称为login的Action类 -->
<action name="login" class="com.shanmu.action.LoginAction" method="login">
<result name="success">success.jsp</result>
<result name="input">login.jsp</result>
</action>
</package>
</struts>
其中最重要的是action标签,如果返回结果是success,就跳到success.jsp页面,如果返回结果是input,就跳到login.jsp页面。所以我们需要有两个页面,分别是login.jsp以及success.jsp,页面是在WebContent下面的
首先是login.jsp,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>
<s:form action="login" method="post" namespace="/">
<s:textfield name="username" label="用户名" />
<s:password name="password" label="密码"/>
<s:submit value="登录"/>
</s:form>
</body>
</html>
这里采用的是Struts2的标签库,也可以使用一般的HTML标签,例如:
<form action="login" method="post">
用户名:<input type="text" name="username">
密码: <input type="password" name="password">
<input type="submit" value="登录">
</form>
接下来是success.jsp,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>
用户名:<s:property value="username"/>
密码:<s:property value="password"/>
</body>
</html>
运行结果
在浏览器打开http://localhost:8080/MyStruts/login.jsp,很不幸
运行之后报404错误,查一下console
提示没有找到commons/lang3
看一下lib下导入的jar包,只有一个commons-lang2.4,所以去下载的Struts包下找到commons-lang3的包,复制到lib目录下
再次运行,在浏览器打开http://localhost:8080/MyStruts/login.jsp
成功
账户密码正确后,进入下面的页面
不正确的话返回登录页面
最后
出错不要害怕,要查看错误信息,然后想想解决方法,或者上网查,相信我们遇到的错误肯定有其他人遇到过,再不行就去请教其他人,有时候别人一眼就能看到你没发现的错误。