前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts1 增删改查

Struts1 增删改查

作者头像
Yano_nankai
发布2018-10-08 10:52:45
9570
发布2018-10-08 10:52:45
举报
文章被收录于专栏:二进制文集

文章说明

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

Tomcat

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

1.png-28.7kB
1.png-28.7kB

1.png-28.7kB

数据库

MySQL

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

代码语言:javascript
复制
CREATE DATABASE test
USE test
代码语言:javascript
复制
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

代码语言:javascript
复制
DESC users
2.png-17.1kB
2.png-17.1kB

2.png-17.1kB

数据库管理工具-Navicat

3.png-37.5kB
3.png-37.5kB

3.png-37.5kB

JDBC

1.png-28.5kB
1.png-28.5kB

1.png-28.5kB

Struts 1

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

MVC

5.png-24.9kB
5.png-24.9kB

5.png-24.9kB

  1. 模型(Model):DB
  2. 视图(View):JSP
  3. 控制器(Controller):ActionServlet

Struts框架

7.png-25.9kB
7.png-25.9kB

7.png-25.9kB

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

安装 Struts 1

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

4.png-76.9kB
4.png-76.9kB

4.png-76.9kB

配置 Struts 1

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

代码语言:javascript
复制
    <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

代码语言:javascript
复制
<%@ 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-2kB
8.png-2kB

8.png-2kB

AddAction.java

代码语言:javascript
复制
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

代码语言:javascript
复制
    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。

代码语言:javascript
复制
    <action path="/add" type="action.AddAction" input="/pages/add.jsp">
        <forward name="success" path="/show.do"></forward>
    </action>

show.jsp

代码语言:javascript
复制
<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.3kB
9.png-4.3kB

9.png-4.3kB

DB queryByID

代码语言:javascript
复制
    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配置

代码语言:javascript
复制
    <action path="/show" type="action.DeleteAction" input="/pages/show.jsp"
        forward="/pages/show.jsp"></action>

DeleteAction.java

代码语言:javascript
复制
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

代码语言:javascript
复制
    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

代码语言:javascript
复制
    <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

代码语言:javascript
复制
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

代码语言:javascript
复制
    <action path="/update" type="action.UpdateAction" input="/pages/update.jsp">
        <forward name="success" path="/show.do"></forward>
    </action>
10.png-2.8kB
10.png-2.8kB

10.png-2.8kB

中文乱码

Filter

代码语言:javascript
复制
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中配置

代码语言:javascript
复制
    <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>

其它问题

防止刷新-重复提交表单

代码语言:javascript
复制
response.sendRedirect("show.do");

表单验证-JavaScript

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

代码语言:javascript
复制
<input type="button" value="add" onclick="validate(this.form);">

JavaScript代码:

代码语言: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。

代码语言:javascript
复制
<jsp:forward page="show.do"></jsp:forward>

DEMO 下载链接

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.06.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章说明
  • Tomcat
  • 数据库
    • MySQL
      • JDBC
      • Struts 1
        • MVC
          • Struts框架
            • 安装 Struts 1
              • 配置 Struts 1
                • add.jsp
                  • AddAction.java
                    • DB add
                      • struts-config.xml DD配置
                        • show.jsp
                          • DB queryByID
                            • struts-config.xml DD配置
                              • DeleteAction.java
                                • DB deleteByID
                                  • update.jsp
                                    • UpdateAction.java
                                      • struts-config.xml
                                      • 中文乱码
                                        • Filter
                                          • web.xml DD中配置
                                          • 其它问题
                                            • 防止刷新-重复提交表单
                                              • 表单验证-JavaScript
                                                • 首页跳转到.do
                                                • DEMO 下载链接
                                                相关产品与服务
                                                云数据库 MySQL
                                                腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档