Struts1 增刪改查

文章說明

本篇文章介紹如何使用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

數(shù)據(jù)庫

MySQL

建立數(shù)據(jù)庫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.1kB
2.png-17.1kB

數(shù)據(jù)庫管理工具-Navicat

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

JDBC

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

Struts 1

采用Java Servlet/JSP瓜喇,實現(xiàn)了基于Java Web應用的MVC框架,是MVC的經(jīng)典產(chǎn)品歉糜。

MVC

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

struts-config.xml:聲明和映射Struts組件乘寒。

安裝 Struts 1

將lib目錄下,所有的jar包復制到工程目錄WEB-INF的lib目錄中匪补。

4.png-76.9kB
4.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-2kB
8.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 {
                // 數(shù)據(jù)庫增加操作
                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表的所有數(shù)據(jù)</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

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()) {
            // 將結(jié)果順序存放到一個list中竿滨,作為結(jié)果返回
            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不能修改,根據(jù)ID更新數(shù)據(jù)。

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.8kB
10.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中滿足條件時毁葱,調(diào)用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>

首頁跳轉(zhuǎn)到.do

在默認的jsp文件中倾剿,轉(zhuǎn)發(fā)到指定的URL。

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

DEMO 下載鏈接

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚌成,一起剝皮案震驚了整個濱河市前痘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担忧,老刑警劉巖芹缔,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓶盛,居然都是意外死亡最欠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門蓬网,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹉勒,你說我怎么就攤上這事帆锋。” “怎么了禽额?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵锯厢,是天一觀的道長。 經(jīng)常有香客問我脯倒,道長实辑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任藻丢,我火速辦了婚禮剪撬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悠反。我一直安慰自己残黑,他們只是感情好,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布斋否。 她就那樣靜靜地躺著梨水,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茵臭。 梳的紋絲不亂的頭發(fā)上疫诽,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機與錄音,去河邊找鬼奇徒。 笑死雏亚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逼龟。 我是一名探鬼主播评凝,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腺律!你這毒婦竟也來了奕短?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤匀钧,失蹤者是張志新(化名)和其女友劉穎翎碑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體之斯,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡日杈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了佑刷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莉擒。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘫絮,靈堂內(nèi)的尸體忽然破棺而出涨冀,到底是詐尸還是另有隱情,我是刑警寧澤麦萤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布鹿鳖,位于F島的核電站,受9級特大地震影響壮莹,放射性物質(zhì)發(fā)生泄漏翅帜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一命满、第九天 我趴在偏房一處隱蔽的房頂上張望涝滴。 院中可真熱鬧,春花似錦胶台、人聲如沸狭莱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腋妙。三九已至,卻和暖如春讯榕,著一層夾襖步出監(jiān)牢的瞬間骤素,已是汗流浹背匙睹。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留济竹,地道東北人痕檬。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像送浊,于是被迫代替她去往敵國和親梦谜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理袭景,服務發(fā)現(xiàn)唁桩,斷路器,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法耸棒,類相關(guān)的語法荒澡,內(nèi)部類的語法,繼承相關(guān)的語法与殃,異常的語法单山,線程的語...
    子非魚_t_閱讀 31,669評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,815評論 0 11
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,871評論 6 342
  • 無競爭,不商業(yè)幅疼。 一個成熟的市場應該是百家爭鳴米奸,而不是一枝獨秀。一支獨放不是春,百花齊放春滿園。 16年讀商學院骄蝇,...
    妮子的世界閱讀 120評論 1 1