struts1开发学习笔记
使用一个简单的例子记录struts1开发过程。
1、 描述
主要功能描述:
index界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。
newProduct.jsp是录入的界面,searchProduct.jsp是查询列表的界面。
ProductAction.java是处理逻辑的action
简单描述流程图:
2、 构建环境
在Myeclipse中,新建一个工程StrutsTest,选择该工程,右键Myeclipse->add sruts capapibality,弹出界面,选择struts1.2支持。如下图所示:
添加完struts支持后,lib目录下会增添struts的jar包、增添struts的配置文件:/l、同时在l中增添了struts的配置。
3、 代码编写
1) 创建表结构,只有三个字段
create table t_product
(
  product_id varchar2(4) primary key,
  product_name  varchar2(50) not null,
  price float
);
2) 创建工具类Util.java,从数据库连接池中获得连接。需要两个步骤
第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源,l文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
      auth="Container"
      name="jdbc/StrutsTestPool"
      type="javax.sql.DataSource"     
      driverClassName="oracle.jdbc.driver.OracleDriver"
      url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
      username="apps"
      password="apps"     
      maxActive="20"/>
</Context>
第二步:在util类中读取配置获得连接,util.java如下:
package company.struts.util;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class Util {
    /**
    * 通过连接池得到连接
    * @return
    * @throws Exception
    */
    public static Connection getPoolConnection() throws Exception{
        Context ctx = new InitialContext();
        DataSource ds = (DataSource)ctx.lookup("java:/comp/env/jdbc/StrutsTestPool");
        Connection conn = ds.getConnection();
        return conn;
    }
}
3) 创建工具类EncodingFilter.java,自定义过滤器,并在l中配置,参考l配置中内容。EncodingFilter.java的内容如下:
package company.struts.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
    public void destroy() {
        // TODO Auto-generated method stub
    }
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }
}

4) 修改l,指定首页为index.jsp。文件内容如下:最后定义了一个fileld的过滤器,是用来过滤字符编码的,后面会提到。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="java.sun/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" version="2.5" xsi:schemaLocati
on="java.sun/xml/ns/javaee  java.sun/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/l</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-namejava笔记总结>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 自定义的fileld 用来过滤字符编码 -->
  <filter>
      <filter-name>EncodingFilter</filter-name>
      <filter-class>company.struts.util.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>EncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
5) 在WebRoot下打开index.jsp,去掉无用信息,写代码如下:
<%@ page language="java"  pageEncoding="UTF-8"%>
<html>
  <head>
    <title></title>
  </head>
 
  <body>
  <br>
  <br>
  <br>
      <table width = "500px" align = "center" height = "200px">
          <tr><td>
          <a href = "productAction.action?method=viewAddForm" target="black">input</a> <br /><br />
          <a href = "productAction.action?method=query" target="black">search</a>
          </td></tr>
    </table>     
  </body>
</html>
6) index.jsp中提到productAction.action?method=viewAddForm,需要在struts的配置文件l中配置实现的action,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "/dtds/struts-config_1_2.dtd">
<struts-config>
  <data-sources />
  <form-beans>
      <form-bean name="productForm" type="company.struts.vo.ProductVo" />
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings>
      <action path="/productAction" type="company.struts.action.ProductAction" parameter = "method" scope="request" name="productForm">
          <forward name="viewNewProduct" path="/newProduct.jsp"></forward>
          <forward name="viewSearchProduct" path="/searchProduct.jsp"></forward>
      </action>
  </action-mappings>
  <message-resources parameter="company.struts.ApplicationResources" />
</struts-config>
在配置文件中配置了action的实现类,以及作为上传数据时用来保存数据的form: productForm
7) Action处理类ProductAction.java如下:
package company.struts.action;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import company.struts.util.Util;
import company.struts.vo.ProductVo;
public class ProductAction extends DispatchAction {
    /**
    * 转到新增界面
    */
    public ActionForward viewAddForm(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       
        return mapping.findForward("viewNewProduct");
    }
    /**
    * 转到查询界面
    */
    public ActionForward viewSearchForm(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       
        return mapping.findForward("viewSearchProduct");
    }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。