Struts1 增删改查

作者: 被称为L的男人 | 来源:发表于2016-06-18 10:58 被阅读468次

    文章说明

    本篇文章介绍如何使用Struts1进行增删改查,仅是对自己学习的记录,并没有深入分析每个模块(不重复造轮子O(∩_∩)O~)。

    Tomcat

    开源的Web应用服务器,apache-tomcat-8.0.35-windows-x64.zip仅有10.3M。启动服务:bin-startup.bat。

    1.png-28.7kB1.png-28.7kB

    数据库

    MySQL

    建立数据库test,并在其中建立表users

    CREATE DATABASE test
    USE test
    
    CREATE TABLE users (
      id int(10) NOT NULL AUTO_INCREMENT,
      name varchar(10) NOT NULL,
      sex varchar(2) NOT NULL,
      phone varchar(11) DEFAULT NULL,
      address varchar(50) DEFAULT NULL,
      PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
    

    查看表users

    DESC users
    
    2.png-17.1kB2.png-17.1kB

    数据库管理工具-Navicat

    3.png-37.5kB3.png-37.5kB

    JDBC

    1.png-28.5kB1.png-28.5kB

    Struts 1

    采用Java Servlet/JSP,实现了基于Java Web应用的MVC框架,是MVC的经典产品。

    MVC

    5.png-24.9kB5.png-24.9kB
    1. 模型(Model):DB
    2. 视图(View):JSP
    3. 控制器(Controller):ActionServlet

    Struts框架

    7.png-25.9kB7.png-25.9kB

    struts-config.xml:声明和映射Struts组件。

    安装 Struts 1

    将lib目录下,所有的jar包复制到工程目录WEB-INF的lib目录中。

    4.png-76.9kB4.png-76.9kB

    配置 Struts 1

    在web.xml DD配置文件中,加入

        <servlet>
            <servlet-name>action</servlet-name>
            <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>action</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    

    add.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">
    
    <script type="text/javascript">
        function validate(form) {
    
            if (validatePhone(form)) {
                form.submit();
            }
        }
    
        function validatePhone(form) {
    
            var regex = /^\d{7,11}$/;
    
            if (!regex.test(form["phone"].value)) {
                alert("输入的phone非法!");
                return false;
            }
    
            return true;
        }
    </script>
    
    <title>增加用户界面</title>
    </head>
    
    <body>
        <form action="add.do?action=submit" method="post">
            <table>
                <tr>
                    <td>name:</td>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <td>sex:</td>
                    <td><select name="sex">
                            <option value="1">男</option>
                            <option value="2">女</option>
                    </select></td>
                </tr>
                <tr>
                    <td>phone:</td>
                    <td><input type="text" name="phone"></td>
                </tr>
                <tr>
                    <td>address:</td>
                    <td><input type="text" name="address"></td>
                </tr>
                <tr>
                    <td><input type="button" value="add"
                        onclick="validate(this.form);"></td>
                </tr>
            </table>
        </form>
    
    </body>
    </html>
    
    8.png-2kB8.png-2kB

    AddAction.java

    package action;
    
    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 model.DBHelperL;
    
    public class AddAction extends Action {
    
        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                HttpServletResponse response) throws Exception {
    
            String name = request.getParameter("name");
            String sex = request.getParameter("sex");
            String phone = request.getParameter("phone");
            String address = request.getParameter("address");
            String action = request.getParameter("action");
    
            if ("submit".equals(action)) {
                if (name == null || name.length() <= 0) {
    
                } else {
                    // 数据库增加操作
                    DBHelperL db = new DBHelperL();
                    db.add(name, sex, phone, address);
                    db.close();
                    // 重定向,防止刷新时重复提交表单!
                    response.sendRedirect("show.do");
                }
            }
    
            return mapping.getInputForward();
        }
    }
    

    DB add

        public void add(String name, String sex, String phone, String address) throws SQLException {
    
            String sql = "INSERT INTO users (name, sex, phone, address) VALUES(?,?,?,?)";
    
            if (pstm == null) {
                pstm = conn.prepareStatement(sql);
            }
    
            pstm.setString(1, name);
            pstm.setString(2, sex);
            pstm.setString(3, phone);
            pstm.setString(4, address);
    
            pstm.execute();
        }
    

    struts-config.xml DD配置

    <action-mappings>中,添加action。

        <action path="/add" type="action.AddAction" input="/pages/add.jsp">
            <forward name="success" path="/show.do"></forward>
        </action>
    

    show.jsp

    <body>
        <%
            DBHelperL db = new DBHelperL();
            List<List<String>> lists = db.queryAll();
            db.close();
    
            request.setAttribute("lists", lists);
        %>
    
        <form action="show.do" method="post">
            <table align="center">
                <caption>users表的所有数据</caption>
                <tr>
                    <th>count</th>
                    <th>id</th>
                    <th>name</th>
                    <th>sex</th>
                    <th>phone</th>
                    <th>address</th>
                    <th>delete</th>
                    <th>update</th>
                </tr>
                <c:forEach var="list" items="${lists}" varStatus="status">
                    <tr>
                        <td>${status.count}</td>
                        <td>${list.get(0)}</td>
                        <td>${list.get(1)}</td>
                        <td>${list.get(2)}</td>
                        <td>${list.get(3)}</td>
                        <td>${list.get(4)}</td>
                        <td><a href="show.do?deleteID=${list.get(0)}">删除</a></td>
                        <td><a href="update.do?updateID=${list.get(0)}">修改</a></td>
                    </tr>
                </c:forEach>
            </table>
        </form>
    
        <br>
        <a href="add.do">增加用户</a>
    
    </body>
    
    9.png-4.3kB9.png-4.3kB

    DB queryByID

        public List<String> queryByID(String ID) throws SQLException {
    
            List<String> list = new ArrayList<>();
    
            String sql = "SELECT * FROM users WHERE id = ?";
    
            pstm = conn.prepareStatement(sql);
            pstm.setString(1, ID);
            ResultSet rs = pstm.executeQuery();
    
            while (rs.next()) {
                // 将结果顺序存放到一个list中,作为结果返回
                list.add(rs.getString(2));
                list.add(rs.getString(3));
                list.add(rs.getString(4));
                list.add(rs.getString(5));
            }
            return list;
        }
    

    struts-config.xml DD配置

        <action path="/show" type="action.DeleteAction" input="/pages/show.jsp"
            forward="/pages/show.jsp"></action>
    

    DeleteAction.java

    package action;
    
    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 model.DBHelperL;
    
    public class DeleteAction extends Action {
        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            
            String ID = request.getParameter("deleteID");
            
            DBHelperL db = new DBHelperL();
            db.deleteByID(ID);
            db.close();
            
            return mapping.getInputForward();
        }
    }
    

    DB deleteByID

        public boolean deleteByID(String ID) throws SQLException {
    
            String sql = "DELETE FROM users WHERE id = ?";
    
            pstm = conn.prepareStatement(sql);
    
            pstm.setString(1, ID);
    
            return pstm.execute();
        }
    

    name和sex不能修改,根据ID更新数据。

    update.jsp

        <form
            action="update.do?action=submit&updateID=<%=request.getAttribute("updateID")%>"
            method="post">
            <table>
                <tr>
                    <td>name:</td>
                    <td><input type="text" name="name"
                        value=<%=request.getAttribute("name")%> readonly="readonly"></td>
                </tr>
                <tr>
                    <td>sex:</td>
                    <td><input type="text" name="sex"
                        value=<%=request.getAttribute("sex")%> readonly="readonly"></td>
                </tr>
                <tr>
                    <td>phone:</td>
                    <td><input type="text" name="phone_new"
                        value=<%=request.getAttribute("phone_old")%>></td>
                </tr>
                <tr>
                    <td>address:</td>
                    <td><input type="text" name="address_new"
                        value=<%=request.getAttribute("address_old")%>></td>
                </tr>
                <tr>
                    <td><input type="submit" value="update"></td>
                </tr>
            </table>
        </form>
    

    UpdateAction.java

    package action;
    
    import java.util.List;
    
    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 model.DBHelperL;
    
    public class UpdateAction extends Action {
        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                HttpServletResponse response) throws Exception {
    
            String ID = request.getParameter("updateID");
            String action = request.getParameter("action");
    
            DBHelperL db = new DBHelperL();
    
            List<String> list = db.queryByID(ID);
            if (!list.isEmpty()) {
                request.setAttribute("updateID", ID);
                request.setAttribute("name", list.get(0));
                request.setAttribute("sex", list.get(1));
                request.setAttribute("phone_old", list.get(2));
                request.setAttribute("address_old", list.get(3));
            }
    
            if ("submit".equals(action)) {
                if (ID != null && ID.length() > 0) {
                    String phone_new = request.getParameter("phone_new");
                    String address_new = request.getParameter("address_new");
                    db.updateByID(ID, phone_new, address_new);
                    db.close();
                    response.sendRedirect("show.do");
                }
            }
    
            db.close();
    
            return mapping.getInputForward();
        }
    }
    

    struts-config.xml

        <action path="/update" type="action.UpdateAction" input="/pages/update.jsp">
            <forward name="success" path="/show.do"></forward>
        </action>
    
    10.png-2.8kB10.png-2.8kB

    中文乱码

    Filter

    package filters;
    
    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 SetCharacterEncodingFilter implements Filter {
    
        String encoding = null;
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
            encoding = filterConfig.getInitParameter("encoding");
    
            if (encoding == null || encoding.length() <= 0) {
                encoding = "UTF-8";
            }
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
    
            request.setCharacterEncoding(encoding);
            chain.doFilter(request, response);
        }
    
        @Override
        public void destroy() {
    
        }
    
    }
    

    web.xml DD中配置

        <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>filters.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
    
        <filter-mapping>
            <filter-name>Set Character Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    其它问题

    防止刷新-重复提交表单

    response.sendRedirect("show.do");
    

    表单验证-JavaScript

    button替代submit,在JavaScript中满足条件时,调用form.submit()

    <input type="button" value="add" onclick="validate(this.form);">
    

    JavaScript代码:

    <script type="text/javascript">
        function validate(form) {
    
            if (validatePhone(form)) {
                form.submit();
            }
        }
    
        function validatePhone(form) {
    
            var regex = /^\d{7,11}$/;
    
            if (!regex.test(form["phone"].value)) {
                alert("输入的phone非法!");
                return false;
            }
    
            return true;
        }
    </script>
    

    首页跳转到.do

    在默认的jsp文件中,转发到指定的URL。

    <jsp:forward page="show.do"></jsp:forward>
    

    DEMO 下载链接

    http://pan.baidu.com/s/1i5rX6fz

    相关文章

      网友评论

        本文标题:Struts1 增删改查

        本文链接:https://www.haomeiwen.com/subject/goovdttx.html