目的:创造一个相当简单的login.jsp判断用户名与密码是否都是a,是则显示welcome,不是则显示error
基本算法思想:
login.jsp得到参数之后,扔到Loginaction.java文件进行检验,Loginaction.java处理之后,扔出返回值给struts.xml,之后struts.xml根据返回值确定要返回到error.jsp还是welcome.jsp。
而用户看起来就是login.jsp到error.jsp或者welcome.jsp。
一、准备工作
首先,在Eclipse创造一个新的Web工程
然后直接使用已经配置已配置好Struts2.2.1GA的WEB-INF替换掉原工程的WEB-INF文件夹,
已配置好Struts2.2.1GA的WEB-INF下载地址的http://download.csdn.net/detail/yongh701/7937631
毕竟自己去编辑web.xml文件,然后复制相应的包进入工程十分麻烦。
今天我个人就弄了很久,从排查Struts2的lib版本开始,试过2.0.11也试过2.3等等的版本都不行,再从网上查资料发现不同版本的Struts2的web.xml编写方式是不同的。于是对web.xml进行了多次的改写,然而在Tomcat7.0也好Tomcat6.0的服务器环境报错依旧。后来拿走别人已经弄好的Struts2工程下的WEB-INF替换掉自己工程下的WEB-INF,立竿见影,药到病除。
既然每次新建Struts工程都要重复配置一番,可不直接复制替换,一是省时间,二是省得不同的Struts2包、Tomcat、web.xml版本之间冲突。
二、在WebRoot或者WebContent编写login.jsp、error.jsp、welcome.jsp
error.jsp、welcome.jsp很简单,就是在BODY中放入”错误“与”欢迎“二字。
而login.jsp与普通的jsp没什么特别,就是一个普通的表单,只是跳转的部分写成login.action,其他的名称也没问题,只是一定要.action结尾,代码如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<html>
<head>
<title>登陆页面</title>
</head>
<body>
<h3>
用户登录
</h3>
<!--关键是在这里,跳转给到一个名为login的action处理 -->
<form action="login.action" method="post">
<table>
<tr align="center">
<td>
用户名:
<input type="text" name="username" />
</td>
</tr>
<tr align="center">
<td>
密码:
<input type="password" name="password" />
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="提交" />
<input type="reset" value="重置" />
</td>
</tr>
</table>
</form>
</body>
</html>
三、编写处理action的Java文件
右击src选择New->Package。之后把包的名称命名为com.ascent.struts2.action,其他名称也没问题的。
再右击这个包,创造一个Java文件,也就是新建一个Class
代码如下:
package com.ascent.struts2.action;
public class LoginAction {
private String username;
private String password;
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() {
if ((getUsername().equals("a")) && (getPassword().equals("a"))) {
return "success";
}
return "error";
}
}
其中,在没有编写任何代码之前,程序头的包名已经存在。这段代码真正有用的是exexute()方法,判断输入的用户名与密码是否分别都为A,如果都是A,则打回一个success给struts.xml,否则打回一个error。
至于前面冗长的私有变量的声明与完整的构造函数,暂时以我的水平看起来是必不可少的。因为我观察其余的Struts工程的java处理文件,都是这样编写的。
四、编写整个工程的核心文件:struts.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- 所谓的“指定Struts 2配置文件的根元素”,这段东西不一定要理解,但必须有,不然过不了tomcat的编译 -->
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.ascent.struts2.action.LoginAction">
<!-- 声明叫login的那个action的处理文件是com.ascent.struts2.action.LoginAction -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
代码上的注释已经很明了了,如果struts.xml得到了返回值result name是error就跳转到根目录下的error.jsp页面,反之就是welcome.jsp页面
至此,一个小小的Struts2工程开发完毕。
要想深入了解相关的利用,请参考各种教科书在编程示例之前的冗长理论。