最近开始学习Struts,怕看过的东西忘记了,小小总结一下,方便自己,也方便javaeye的同行们在忘记某些东西的时候可以查找看看。里面很多内容都引用了郭克华老师的代码。
好了,废话少说
1.配置文件
web.xml
struts-config.xml
二、要实现的类
Action
ActionForm (只要和jsp里面的form的属性一对一对应好就可以了)
三、Jsp的内容,注意query.do
四、小结
感觉上, 刚刚接触Struts,也不难,关键是要记好它的配置文件是怎样关联的。它的好处是可以把代码的耦合性减低,jsp_request, actionForm, action, jsp_forward几个都可以互不认识,只需要在struts-config.xml里面配置。代码维护起来比较方便。但还有一个问题,就是request里面的attribut的name还是存在某种程度的重合,如果可以在同一位置配置就更好了,不过这个不是Struts的问题,jsp开始就一直存在了,可能已经有解决方法,可能我还没有发现,哈。
好了,废话少说
1.配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<!-- 在此声明actionServlet-->
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<!-- 初始化的时候,要读取的struts config文件路径-->
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<!-- 声明jsp表单提交时候,凡以*.do为action内容的,都被actionServlet截获处理-->
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<!-- 在此注册ActionForm -->
<form-beans>
<!-- name:名称 type:类路径 -->
<form-bean name="queryForm" type="prj2_1.QueryForm"></form-bean>
</form-beans>
<global-exceptions />
<!-- 设置URL逻辑名称(全局,任意的Action都可以识别到)-->
<global-forwards>
<forward name="RESULT" path="/queryResult.jsp"></forward>
</global-forwards>
<!-- 注册Action -->
<action-mappings>
<!-- type:类路径; name:相应的ActionForm的名称; path:客户端提交到服务器端时指定的路径 -->
<action name="queryForm" path="/query" type="prj2_1.QueryAction">
<!-- 设置URL逻辑名称(局部,只有这个Action可以识别到)-->
<forward name="RESULT" path="/queryResult.jsp"></forward>
</action>
</action-mappings>
<message-resources parameter="prj2_1.ApplicationResources" />
</struts-config>
二、要实现的类
Action
package prj2_1;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import dao.StudentDao;
//Action:负责接受ActionForm的数据,处理
//1:必须继承org.apache.struts.action.Action
//2:重写execute方法来处理业务逻辑
//3:将这个类在配置文件中注册
public class QueryAction extends Action{
public QueryAction(){
System.out.println("QueryAction构造函数");
}
//ActionForward:封装了跳转目标的路径
//mapping:访问配置文件
//form:传过来的ActionForm对象
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
QueryForm queryForm = (QueryForm)form;
String sname = queryForm.getSname();
//String sname = request.getParameter("sname");
sname = new String(sname.getBytes("ISO-8859-1"));
StudentDao studentDao = new StudentDao();
ArrayList stus = studentDao.queryStuByName(sname);
request.setAttribute("stus", stus);
//跳转
//ActionForward af = new ActionForward("/queryResult.jsp");
ActionForward af = mapping.findForward("RESULT");
return af;
}
ActionForm (只要和jsp里面的form的属性一对一对应好就可以了)
package prj2_1;
import org.apache.struts.action.ActionForm;
//ActionForm:容纳表单提交的值
//1:必须继承 org.apache.struts.action.ActionForm
//2:必须编写和表单元素同名的属性
//3:必须在Struts配置文件中进行注册
public class QueryForm extends ActionForm{
public QueryForm(){
System.out.println("QueryForm构造函数");
}
private String sname;
public String getSname() {
return sname;
}
public void setSname(String sname) {
System.out.println("QueryForm setSname");
this.sname = sname;
}
}
三、Jsp的内容,注意query.do
<form action="/Prj2_1/query.do" method="post">
请您输入学生姓名:<input name="sname">
<input type="submit" value="模糊查询">
</form>
四、小结
感觉上, 刚刚接触Struts,也不难,关键是要记好它的配置文件是怎样关联的。它的好处是可以把代码的耦合性减低,jsp_request, actionForm, action, jsp_forward几个都可以互不认识,只需要在struts-config.xml里面配置。代码维护起来比较方便。但还有一个问题,就是request里面的attribut的name还是存在某种程度的重合,如果可以在同一位置配置就更好了,不过这个不是Struts的问题,jsp开始就一直存在了,可能已经有解决方法,可能我还没有发现,哈。