通过GET方式访问Action获取记录表单然后调用JSP页面来显示,整个流程是怎样的?要用到ActionForm吗?谢谢!!

时间:2021-06-17 17:09:28
看了不少例子,发现Action总是被POST方式来访问,然后ActionForm才可以获取提交上来的值.
很多显示数据的操作仅仅是通过GET方式来访问,这时整个流程是怎样的呢?需要一个对应的ActionForm来存放数据吗?
我目前还没用Struts,一直都是做个对应数据表的类来存放数据,然后装进ArrayList并发送到前台显示,在Sturts里也是用ActionFrom来存放每条记录,然后再装进ArrayList里并发送到前台显示吗?

9 个解决方案

#1


其实在大部分的servlet中,GET和POST方法都是同样处理的。 所以你用何种方式来访问action,区别不大。

流程都是客户端向服务器发送request,然后转交给action去处理,最后再response到客户端。

如果你已经有对应的FormBean,那么用一个对应的ActionForm来存放数据会比较方便。当然,这也不是非做不可的。你可以存放到request或者session里面。这个就看你系统需要了。

在Struts里面,一般都是把纪录装进ArrayList,然后再把ArrayList存入ActionForm。最后由JSP把ArrayList取出遍历,最后显示到页面上。

当你得系统变得越来越大的时候,你会发现用struts这种MVC模型会比较方便,容易维护。从技术上来说,没有什么特别新的。只是一些servlet和标签的运用。

#2


在Struts里面,一般都是把纪录装进ArrayList,然后再把ArrayList存入ActionForm。最后由JSP把ArrayList取出遍历,最后显示到页面上。
=================================================
谢谢!!!不是把每条记录存放在ActionForm里,然后再依次装入ArrayList的吗?我一直都是这么做,有不妥之处吗?

#3


你这样做也是可以的。不过我们设计ActionForm的目的就是封装数据,把所有逻辑上属于同一个部分的数据封装在一个formBean中,你这样做似乎和设计的最初目的相违背。

顺便问一句,你把每条记录存放在ActionForm里,然后再依次装入ArrayList,那么你在jsp中是怎么取得呢?  是不是把ArrayList放在request的Attribute里面?

#4


谢谢yegaofei(踏雪而歌),非常感谢!
是呀.我不明白你说的方法如何实现.formBean一般只存放简单的数据类型的数据,听说不提倡存放复杂类型的数据,根据formBean的getter和setter方法,怎么可能像你说的那样呢?
打个比方吧-->
1.表
name   sex
------------
张三   男
李四   男
==================
2.formBean
public class Person {
   private string name = "";
   private String sex = "";
   public String getName() {
      return this.name;
   }
   public String getSex() {
      return this.sex;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void setSex(String sex) {
      this.sex = sex;
   }
}
3.在servlet里存放数据
Person person = null;
java.util.ArrayList pList = new java.util.ArrayList();
while(rs.next()) {
   person = new Person();
   person.setName(rs.getString(1));
   person.setSex(rs.getString(2));
   pList.add(person);
}
request.setAttribute("pList", pList);
//跳转到jsp页面
4.在JSP页面里用JSTL显示
<c:set var="pList" value="${requestScope.pList}" />
<c:forEach items="${pList}" var="p">
  <c:out value=${p.name} />  --  <c:out value=${p.sex} /><br>
<c:forEach>
=============================================
你应该明白我的意思了,难道我真的一直都在走错路?虽然分不多,但恳请能指点迷津,谢谢!!

#5


formeBean不一定只存放简单数据。具体怎么设计,要看你的系统需求,没有固定的格式。

就你举的这个例子,我觉得可以把Person单独作一个Bean,而在formBean里面存放person 的arrayList。

public class Person {
   private string name = "";
   private String sex = "";
   public String getName() {
      return this.name;
   }
   public String getSex() {
      return this.sex;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void setSex(String sex) {
      this.sex = sex;
   }
}

public MyFormBean extends ActionForm{
   private ArrayList persons;
   public void setPersons(ArrayList persons){
      this.persons = persons;
   }
   public ArrayList getPersons(){
      return this.persons;
   }
}

#6


在servlet里存放数据
Person person = null;
java.util.ArrayList pList = new java.util.ArrayList();
while(rs.next()) {
   person = new Person();
   person.setName(rs.getString(1));
   person.setSex(rs.getString(2));
   pList.add(person);
}
form.setPersons(pList); //这个form是struts action 中execute方法的参数,经过类型转换                     //后可以调用setPersons方法

//跳转到jsp页面
4.在JSP页面里用JSTL显示
<c:forEach items="${myFormBean.persons}" var="p">
  <c:out value=${p.name} />  --  <c:out value=${p.sex} /><br>
<c:forEach>
======================================================
看起来我们两个的代码几乎没有什么区别,我的还多了一个类。但是这个例子仅仅是个简单的情形。

很多时候我们的页面内容会比较多。比如说需要这样一个页面,上半部分显示一个学生的基本信息,姓名,性别,年龄,学号,年级,系别等等。 然后页面下半部分显示他的各科考试成绩。这个时候我的formBean里面就包含了这页面的各项属性,其中成绩单是一个list。这样封装formBean和页面中的内容对应比较一致。

你可以再考虑一下。

#7


get跟post都是一种请求方式,它们的区别在于
get方式传递的参数都在链接上,而post实用form来提交的
所以get方式如果传递的参数过多的话会有链接长度限制的问题,比如说及其复杂的搜索
而post基本上不受参数多少限制
但是get方式的连接由于参数都在连接上,所以支持回退和搜索引擎的收录
而post方式的链接则不会被搜索引擎收录,所以一般门户网站都会尽量把请求作成get方式

#8


singleship(),不好意思,我进入给分的页面时还没有你的回复:)

#9


up

#1


其实在大部分的servlet中,GET和POST方法都是同样处理的。 所以你用何种方式来访问action,区别不大。

流程都是客户端向服务器发送request,然后转交给action去处理,最后再response到客户端。

如果你已经有对应的FormBean,那么用一个对应的ActionForm来存放数据会比较方便。当然,这也不是非做不可的。你可以存放到request或者session里面。这个就看你系统需要了。

在Struts里面,一般都是把纪录装进ArrayList,然后再把ArrayList存入ActionForm。最后由JSP把ArrayList取出遍历,最后显示到页面上。

当你得系统变得越来越大的时候,你会发现用struts这种MVC模型会比较方便,容易维护。从技术上来说,没有什么特别新的。只是一些servlet和标签的运用。

#2


在Struts里面,一般都是把纪录装进ArrayList,然后再把ArrayList存入ActionForm。最后由JSP把ArrayList取出遍历,最后显示到页面上。
=================================================
谢谢!!!不是把每条记录存放在ActionForm里,然后再依次装入ArrayList的吗?我一直都是这么做,有不妥之处吗?

#3


你这样做也是可以的。不过我们设计ActionForm的目的就是封装数据,把所有逻辑上属于同一个部分的数据封装在一个formBean中,你这样做似乎和设计的最初目的相违背。

顺便问一句,你把每条记录存放在ActionForm里,然后再依次装入ArrayList,那么你在jsp中是怎么取得呢?  是不是把ArrayList放在request的Attribute里面?

#4


谢谢yegaofei(踏雪而歌),非常感谢!
是呀.我不明白你说的方法如何实现.formBean一般只存放简单的数据类型的数据,听说不提倡存放复杂类型的数据,根据formBean的getter和setter方法,怎么可能像你说的那样呢?
打个比方吧-->
1.表
name   sex
------------
张三   男
李四   男
==================
2.formBean
public class Person {
   private string name = "";
   private String sex = "";
   public String getName() {
      return this.name;
   }
   public String getSex() {
      return this.sex;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void setSex(String sex) {
      this.sex = sex;
   }
}
3.在servlet里存放数据
Person person = null;
java.util.ArrayList pList = new java.util.ArrayList();
while(rs.next()) {
   person = new Person();
   person.setName(rs.getString(1));
   person.setSex(rs.getString(2));
   pList.add(person);
}
request.setAttribute("pList", pList);
//跳转到jsp页面
4.在JSP页面里用JSTL显示
<c:set var="pList" value="${requestScope.pList}" />
<c:forEach items="${pList}" var="p">
  <c:out value=${p.name} />  --  <c:out value=${p.sex} /><br>
<c:forEach>
=============================================
你应该明白我的意思了,难道我真的一直都在走错路?虽然分不多,但恳请能指点迷津,谢谢!!

#5


formeBean不一定只存放简单数据。具体怎么设计,要看你的系统需求,没有固定的格式。

就你举的这个例子,我觉得可以把Person单独作一个Bean,而在formBean里面存放person 的arrayList。

public class Person {
   private string name = "";
   private String sex = "";
   public String getName() {
      return this.name;
   }
   public String getSex() {
      return this.sex;
   }
   public void setName(String name) {
      this.name = name;
   }
   public void setSex(String sex) {
      this.sex = sex;
   }
}

public MyFormBean extends ActionForm{
   private ArrayList persons;
   public void setPersons(ArrayList persons){
      this.persons = persons;
   }
   public ArrayList getPersons(){
      return this.persons;
   }
}

#6


在servlet里存放数据
Person person = null;
java.util.ArrayList pList = new java.util.ArrayList();
while(rs.next()) {
   person = new Person();
   person.setName(rs.getString(1));
   person.setSex(rs.getString(2));
   pList.add(person);
}
form.setPersons(pList); //这个form是struts action 中execute方法的参数,经过类型转换                     //后可以调用setPersons方法

//跳转到jsp页面
4.在JSP页面里用JSTL显示
<c:forEach items="${myFormBean.persons}" var="p">
  <c:out value=${p.name} />  --  <c:out value=${p.sex} /><br>
<c:forEach>
======================================================
看起来我们两个的代码几乎没有什么区别,我的还多了一个类。但是这个例子仅仅是个简单的情形。

很多时候我们的页面内容会比较多。比如说需要这样一个页面,上半部分显示一个学生的基本信息,姓名,性别,年龄,学号,年级,系别等等。 然后页面下半部分显示他的各科考试成绩。这个时候我的formBean里面就包含了这页面的各项属性,其中成绩单是一个list。这样封装formBean和页面中的内容对应比较一致。

你可以再考虑一下。

#7


get跟post都是一种请求方式,它们的区别在于
get方式传递的参数都在链接上,而post实用form来提交的
所以get方式如果传递的参数过多的话会有链接长度限制的问题,比如说及其复杂的搜索
而post基本上不受参数多少限制
但是get方式的连接由于参数都在连接上,所以支持回退和搜索引擎的收录
而post方式的链接则不会被搜索引擎收录,所以一般门户网站都会尽量把请求作成get方式

#8


singleship(),不好意思,我进入给分的页面时还没有你的回复:)

#9


up