码迷,mamicode.com
首页 > 其他好文 > 详细

struts的增删改查

时间:2019-07-30 01:05:59      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:ping   Servle   stat   support   name   rest   rect   完成   img   

1、导入相关的pom依赖(struts、自定义标签库的依赖)

<!-- 5.3、jstl、standard -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>

<!-- 5.4、tomcat-jsp-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>8.0.47</version>
</dependency>


2、分页的tag类导入、z.tld、完成web.xml的配置

pageTag.java

package com.huang.crud.tag;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.huang.crud.util.PageBean;



public class PageTag extends BodyTagSupport {
    
    private static final long serialVersionUID = -8476740758233598045L;
    private PageBean pageBean;
    
    @Override
    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.write(toHTML());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return super.doStartTag();
    }

    public String toHTML() {
//    pageBean=new PageBean();
    StringBuffer sb=new StringBuffer();
    //下一次请求提交到后台的表单html代码拼接
    sb.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/bootstrap.min.css\"/>");
    sb.append("<script type=\"text/javascript\" src=\"js/jquery-3.3.1.js\"></script>");
    sb.append("<script type=\"text/javascript\" src=\"js/bootstrap.min.js\"></script>");
    sb.append("<form id=‘pageBeanForm‘ action=‘"+pageBean.getUrl()+"‘ method=‘post‘>");
    Map<String, String[]> paramMap = pageBean.getParameterMap();
    if(paramMap!=null&&paramMap.size()>0) {
        for(Entry<String, String[]> entry:paramMap.entrySet()) {
            if(!"page".equals(entry.getKey())) {
                for(String val:entry.getValue()) {
                    sb.append("<input type=‘hidden‘ name=‘"+entry.getKey()+"‘> value=‘"+val+"‘");
                }
            }
        }
    }
    sb.append("<input type=‘hidden‘ name=‘page‘>");
    sb.append("</form>");
    
    
    //分页条html代码拼接
    sb.append("<div style=‘text-align: right; font-size: 12px;‘>");
    sb.append(" 每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页&nbsp;&nbsp;");
    sb.append(" <a href=‘javascript:gotoPage(1)‘ class=‘btn btn-default‘>首页</a>&nbsp;&nbsp;<a");
    sb.append(" href=‘javascript:gotoPage("+pageBean.getPreviousPage()+")‘ class=‘btn btn-default‘>上一页</a>&nbsp;&nbsp;<a");
    sb.append(" href=‘javascript:gotoPage("+pageBean.getNextPage()+")‘ class=‘btn btn-default‘>下一页</a>&nbsp;&nbsp;<a");
    sb.append(" href=‘javascript:gotoPage("+pageBean.getMaxPage()+")‘ class=‘btn btn-default‘>尾页</a>&nbsp;&nbsp;<input type=‘text‘");
    sb.append(" id=‘skipPage‘");
    sb.append(" style=‘text-align: center; font-size: 12px; width: 50px;‘>&nbsp;&nbsp;<a");
    sb.append(" href=‘javascript:skipPage()‘ class=‘btn btn-default‘>Go</a>");
    sb.append(" </div>");
    
    
    //分页所需要调用的js代码
    sb.append("<script type=‘text/javascript‘>");
    sb.append("        function gotoPage(page) {");
    sb.append("          document.getElementById(‘pageBeanForm‘).page.value = page;");
    sb.append("          document.getElementById(‘pageBeanForm‘).submit();");
    sb.append("        }");
    sb.append("        function skipPage() {");
    sb.append("          var page = document.getElementById(‘skipPage‘).value;");
    sb.append("          if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");
    sb.append("          alert(‘请输入1~N的数字‘);");
    sb.append("          return;");
    sb.append("        }");
    sb.append("        gotoPage(page);");
    sb.append("    }");
    sb.append("</script>");
    
        return sb.toString();
    }

    public PageBean getPageBean() {
        return pageBean;
    }

    public void setPageBean(PageBean pageBean) {
        this.pageBean = pageBean;
    }
}

z.tid

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
  <description>dj 1.1 core library</description>
  <display-name>dj core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>d</short-name>
  <uri>/huang</uri>

 <tag>
    <name>page</name>
    <tag-class>com.huang.crud.tag.PageTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>pageBean</name>
        <required>true</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  
</taglib>

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  
   <filter>
      <filter-name>encodingFiter</filter-name>
      <filter-class>com.huang.crud.util.EncodingFiter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>encodingFiter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <filter>
  <filter-name>struts2</filter-name>
  
  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  
  </filter>
  <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
  </filter-mapping>
</web-app>

 

3、dao层去访问数据

ClazzDao.java

package com.huang.crud.dao;

import java.sql.SQLException;
import java.util.List;

import com.huang.crud.entity.Clazz;
import com.huang.crud.util.BaseDao;
import com.huang.crud.util.PageBean;
import com.huang.crud.util.StringUtils;

public class ClazzDao extends BaseDao<Clazz> {

    public List<Clazz> list(Clazz clazz,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
        String sql= "select * from t_struts_class where true ";
        String cname= clazz.getCname();
        int cid=clazz.getCid();
         if(cid!=0) {
             sql +=" and cid ="+cid; 
         }
        
        if(StringUtils.isNotBlank(cname)) {
            sql +=" and cname like ‘%"+cname+"%‘";
        }
        
        return super.executeQuery(sql,Clazz.class , pageBean);
        
    }
    
    public int add(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException, InstantiationException {
        String sql= "insert into t_struts_class values(?,?,?,?)";
        return super.executeUpdate(sql,new String[] {"cid","cname","cteacher","pic"}, clazz);
    }
    
    
    public int del(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException, InstantiationException {
        String sql= "delete from t_struts_class where cid=?";
        return super.executeUpdate(sql,new String[] {"cid"}, clazz);
    }
    
    public int edit(Clazz clazz) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException, InstantiationException {
        String sql= "update  t_struts_class set cname=?,cteacher=?,pic=? where cid=?";
        return super.executeUpdate(sql,new String[] {"cname","cteacher","pic","cid"}, clazz);
    }
}
    
    

BaseDao.java

package com.huang.crud.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.huang.crud.entity.Clazz;


public class BaseDao<T> {
    
    
    /**
     * T=Student.class
     * 
     * @param sql     决定查询哪张表的数据
     * @param clz    查询出来的数据封装到哪个实体类中
     * @param pageBean    决定是否分页
     * @return
     * @throws 
     * @throws InstantiationException 
     * @throws SQLException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     * @throws InstantiationException 
     */
    public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws SQLException, IllegalArgumentException, IllegalAccessException, InstantiationException {
        List<T> ls=new ArrayList<>();
        Connection con=DBAccess.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        
        if(pageBean!=null && pageBean.isPagination()) {
            //该分页了
            String countSql=getCountSql(sql);//获取符合记录的行数的Sql语句
            try {
                ps=con.prepareStatement(countSql);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                rs=ps.executeQuery();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if(rs.next()) {
                pageBean.setTotal(rs.getLong(1)+"");//给pageBean的总页数赋值
            }
            
            String pageSql=getPageSql(sql,pageBean);//拼接上符合条件的分页查询sql语句
            ps=con.prepareStatement(pageSql);
            rs=ps.executeQuery();
        }
        else {
             ps = con.prepareStatement(sql);
             rs = ps.executeQuery();
        }
        
        try {
            while (rs.next()) {
                //            ls.add(new Book(rs.getInt("bid"),
                //                    rs.getString("bname"),
                //                    rs.getFloat("price")));
                /**
                 * 1、创建了一个book对象
                 * 2、从ResultSet结果集中获取值放入Book对象属性中
                 *         2.1获取到book的属性对象
                 *         2.2给属性对象赋值
                 * 3、将已经有值的Book对象放进list集合中
                 * 
                 */
                T t = (T) clz.newInstance();
                Field[] fields = clz.getDeclaredFields();
                for (Field field : fields) {
                    field.setAccessible(true);
                    field.set(t, rs.getObject(field.getName()));
                }
                ls.add(t);
            } 
        } finally {
            DBAccess.close(con,ps,rs);
        }
        return ls;
    }

    
    /**
     * 将原生sql拼接出符合条件的某一页的数据查询
     * @param sql
     * @return
     */
    private String getPageSql(String sql,PageBean pageBean) {
        return sql + " limit "+pageBean.getStartIndex()+","+pageBean.getRows();
    }

    /**
     * 用原生sql拼接出查询符合条件的记录数
     * @param sql
     * @return
     */
    private String getCountSql(String sql) {
        return "select count(1) from ("+sql+") t";
    }
    
    
    /**
     * 通用的增删改方法
     * @param sql    增删改的sql语句
     * @param attrs    ?所代表的实体类的属性
     * @param t        实体类的实例
     * @return
     * @throws SQLException
     * @throws NoSuchFieldException
     * @throws SecurityException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     * @throws InstantiationException 
     */
    public int executeUpdate(String sql, String[] attrs, T t) throws SQLException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InstantiationException {
        Connection con = DBAccess.getConnection();
        PreparedStatement pst = con.prepareStatement(sql);
        for (int i = 0; i < attrs.length; i++) {
            Field field = t.getClass().getDeclaredField(attrs[i]);
            field.setAccessible(true);
            pst.setObject(i+1, field.get(t));
        }
        return pst.executeUpdate();
    }
}

 

4、在struts_sy.xml进行配置

struts_sy.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="sy" extends="base" namespace="/sy">
      <action name="/clz_*" class="com.huang.crud.web.ClazzAction" method="{1}">
       <result name="list">/clzList.jsp</result>
       <result name="preSave">/clzEdit.jsp</result>
       <result name="toList" type="redirectAction">/clz_list</result>
      </action>
      
    </package>
</struts>

5、写jsp

clzList.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="/huang" prefix="d" %>
<!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>主界面</title>
</head>
<body>
<h2>小说目录</h2>
    <br>

    <form action="${pageContext.request.contextPath}/sy/clz_list.action"
        method="post">
        书名:<input type="text" name="bname"> <input type="submit"
            value="确定">
            <input type="hidden" name="rows" value="15">
    </form>
    <a href="${pageContext.request.contextPath}/sy/clz_preSave.action">增加</a>
    <table border="1" width="100%">
        <tr>
            <td>编号</td>
            <td>班级名称</td>
            <td>班级图片</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${clzList }" var="b">
            <tr>
                <td>${b.cid }</td>
                <td>${b.cname }</td>
                <td>${b.cteacher }</td>
                <td>${b.pic }</td>
                <td>
                    <a href="${pageContext.request.contextPath}/sy/clz_preSave.action?cid=${b.cid}">修改</a>&nbsp;
                    <a href="${pageContext.request.contextPath}/sy/clz_del.action?cid=${b.cid}">删除</a>
                    <a href="${pageContext.request.contextPath}/sy/clz_preUpload.action?cid=${b.cid}">文件上传</a>
                </td>
            </tr>
        </c:forEach>
    </table>
    
    <d:page pageBean="${pageBean }"></d:page>
</body>
</html>

 

 

 

clzEdit.jsp

 

<%@ 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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }${result.cname == null ? ‘/sy/clz_add.action‘ : ‘/sy/clz_edit.action‘}" method="post">
 cid:<input type="text" name="cid" value="${result.cid }"/>
 cname:<input type="text" name="cname" value="${result.cname }"/> 
 cteacher:<input type="text" name="cteacher" value="${result.cteacher }"/>
 
<input type="submit"/>
</form>
</body>
</html>

 

运行结果:

技术图片

 

struts的增删改查

标签:ping   Servle   stat   support   name   rest   rect   完成   img   

原文地址:https://www.cnblogs.com/bf6rc9qu/p/11267323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!