前段时间,朋友做了一个“基于MVC的JSP+Servlet+JavaBean整合开发的例子”,有老师质疑它这个是 不是真正的MVC标准?至于这个问题,我们在这里不讨论,本文目的是用Struts2.1.6来取代Servlet。经 我这位朋友同意,我把他所做的那个“JSP+Servlet+JavaBean”的例子,发布给大家,大家可以跟着我的 步骤,一步一步地,把这个Servlet的例子,改写成Struts2.1.6的例子。
这是我朋友的例子,大家先下载下来,导入Eclipse-jee,并把相应的数据库文件导入SQL Server 2000,运行一下他这个小项目。如果出现什么问题,可以到他的技术博客给他留言。 http://www.blogjava.net/gdhqs。
本文重点是如何把他这个Servlet的小项目改写成Struts2.1.6的项目。首先,下载Struts2.1.6的类库 ,http://struts.apache.org/2.1.6/index.html, 下载下来后是这个文件:struts-2.1.6-all.zip,解 压缩后,在lib目录下,找到以下必需的jar包,把它们添加到我们项目的lib目录下。这些jar有:
xwork-2.1.2.jarstruts2-core-2.1.6.jarstruts2-convention-plugin- 2.1.6.jarognl-2.6.11.jarfreemarker-2.3.13.jarcommons-loggin- 1.0.4.jarcommons-fileupload-1.2.1.jar
我还是在我朋友的项目基础上做吧,先把“MvcModel”(他的项目名)项目下的web.xml修改一下。你 可以把他配置的所有Servlet给删除掉,然后,配置是Struts2的过滤器,代码如下:
struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*
这样,就简洁了许多,比配置N个Servlet简洁了。
接着,在项目的Web-INF目录下,新建一个文件夹名为”content”,这个目录名要是这个,如果要改成 其它名的话,还得在相应的配置文件中配置,但初学的时候,就按它默认的吧。我们编写的JSP文件,就 放在此目录下。这样做,目的之一为了提高安全性,因为在Web-INF下的所有文件,不能直接访问的。
我们可以把我朋友的那个项目的主页index.jsp文件移到content目录下,或者,自己新建一个也可以 。以下是index.jsp的代码,注意,这个是我朋友项目中的有所不同了,编码改成了UTF-8.
我们在浏览器中输入地址http://localhost:8060/MvcModel/index, 注意,我的端口号与你的可能不 同,这个访问路径“index”不能带”.jsp”后缀,否则会报找不到action的错误。或者,你加个”.action” 的后缀也可以。Struts2.1.6与Struts2.0不同之处之一是,Struts2.1.6中的“xxx.action”可以没有 Action类与它对应,它如果找不到有相应的action类,它会去找xxx.jsp,xxx.htm等文件。
我们做到这一步,如果能够通过上面的路径预览index.jsp的话,就说明,Struts2.1.6配置正确了。 继续下面的步骤吧。
来写一个Struts的action类,命名为”PeopleAction”,代码如下:
package cn.he.action;import java.util.List;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import cn.he.manager.Manager;import cn.he.pojo.People;import com.opensymphony.xwork2.ActionSupport;@Results({ @Result(name = "reload", location = "people.action", type = "redirect")})public class PeopleAction extends ActionSupport { private static final long serialVersionUID = 1L; private Manager manager = new Manager(); private int id; private People people; private List peoples; //默认的操作 @Override public String execute() throws Exception { return list(); } //查询列表的操 作 public String list() throws Exception { System.out.println ("list"); peoples = manager.queryAllPeople(); System.out.println("name = " + peoples.size()); return SUCCESS; } //进入编辑页面前的操作 public String input() throws Exception { System.out.println("input"); return INPUT; } //保存操作 public String save() throws Exception { manager.addPeople(people); return "reload"; } //删除操作 public String delete() throws Exception { manager.delPeople(id); return "reload"; } //自动生 成相应的getter和setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public People getPeople() { return people; } public void setPeople(People people) { this.people = people; } public List getPeoples() { return peoples; } public void setPeoples(List peoples) { this.peoples = peoples; }}
注意,这个类的包名“cn.he.action”,要有名为“action”或者”struts”,或者”web”等,相关的命 名规范请参考 struts2采用convention-plugin实现零配置,Struts2.1.6默认会把这些包下或者这些包 的子包下的类,纳入自己的管理范围之内。
接着在content目录下,写两个JSP文件,一是查询列表的JSP页面:people.jsp,代码如下:
${peo.name} 删除
另一个添加人员的页面:people-input.jsp,代码如下:
运行一下看看效果吧!
随文源码:http://www.bianceng.net/java/201212/710.htm
离开你的那一天开始,左心房渐渐停止跳动…