随笔-42  评论-578  文章-1  trackbacks-0
        前段时间,朋友做了一个“基于MVC的JSP+Servlet+JavaBean整合开发的例子”,有老师质疑它这个是不是真正的MVC标准?至于这个问题,我们在这里不讨论,本文目的是用Struts2.1.6来取代Servlet。经我这位朋友同意,我把他所做的那个“JSP+Servlet+JavaBean”的例子,发布给大家,大家可以跟着我的步骤,一步一步地,把这个Servlet的例子,改写成Struts2.1.6的例子。
        附件下载:/Files/rongxh7/MvcModel.rar
        这是我朋友的例子,大家先下载下来,导入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.jar
struts2-core-
2.1.6.jar
struts2-convention-plugin-
2.1.6.jar
ognl-
2.6.11.jar
freemarker-
2.3.13.jar
commons-loggin-
1.0.4.jar
commons-fileupload-
1.2.1.jar

        我还是在我朋友的项目基础上做吧,先把“MvcModel”(他的项目名)项目下的web.xml修改一下。你可以把他配置的所有Servlet给删除掉,然后,配置是Struts2的过滤器,代码如下:
    <filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
       这样,就简洁了许多,比配置N个Servlet简洁了。
       接着,在项目的Web-INF目录下,新建一个文件夹名为"content",这个目录名要是这个,如果要改成其它名的话,还得在相应的配置文件中配置,但初学的时候,就按它默认的吧。我们编写的JSP文件,就放在此目录下。这样做,目的之一为了提高安全性,因为在Web-INF下的所有文件,不能直接访问的。
       我们可以把我朋友的那个项目的主页index.jsp文件移到content目录下,或者,自己新建一个也可以。以下是index.jsp的代码,注意,这个是我朋友项目中的有所不同了,编码改成了UTF-8.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding
="UTF-8"
%>
<!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=ISO-8859-1">
<title>MVC MODEL</title>
</head>
<body>
<h1>MVC MODEL</h1>
<ul>
    
<li><href="people!input.action">添加人员</a></li>
    
<li><href="people.action">人员列表</a></li>
</ul>
</body>
</html>


        我们在浏览器中输入地址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<People> 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<People> getPeoples() {
        
return peoples;
    }

    
public void setPeoples(List<People> peoples) {
        
this.peoples = peoples;
    }


}
         注意,这个类的包名“cn.he.action”,要有名为“action”或者"struts",或者"web"等,相关的命名规范请参考  struts2采用convention-plugin实现零配置,Struts2.1.6默认会把这些包下或者这些包的子包下的类,纳入自己的管理范围之内。
 
       接着在content目录下,写两个JSP文件,一是查询列表的JSP页面:people.jsp,代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding
="utf-8"
%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>People列表页</title>
</head>
<body>
<table>
<tr>
    
<td>id</td>
    
<td>name</td>
    
<td>delete</td>
</tr>
<s:iterator value="peoples" var="peo">
<tr>
    
<td><s:property value="people.id"/> </td>
    
<td>${peo.name}</td>
    
<td><href="people!delete.action?id=${peo.id}">删除</a></td>
</tr>
</s:iterator>

</table>

</body>
</html>

       另一个添加人员的页面:people-input.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>People添加页</title>
</head>
<body>
<form action="people!save.action" method="post">
名字:
<input type="text" name="people.name"/> <br/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
 
      运行一下看看效果吧!



本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
    

posted on 2009-06-10 02:37 心梦帆影 阅读(2872) 评论(4)  编辑  收藏 所属分类: Struts2.x

评论:
# re: 从Servlet到Struts 2.1.6 2009-06-10 09:03 | HiMagic!
servlet不是指xml中的那些定义,2.1.6的实现是为site弄了一个同一个的gate,相当于一个general controller。尽管JSP的本质就是servlet,似乎可以不再写单独的servlet类,但在具体业务上,其还是有存在的必要性的。  回复  更多评论
  
# re: 从Servlet到Struts 2.1.6 2009-06-10 21:03 | 小人物
学习了!受益匪浅!  回复  更多评论
  
# re: 从Servlet到Struts 2.1.6[未登录] 2009-06-12 15:26 | 逍遥
Struts.xml 你没有配置?
好像freemarker不用加载吧  回复  更多评论
  
# re: 从Servlet到Struts 2.1.6 2009-07-03 00:04 | 心梦帆影
freemarker用于加载Struts2内部的配置文件struts-defualt.xml,如果没有的话,就会抛异常.Struts2应用无法启动.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: