文章说明
本篇文章介绍如何使用Struts1进行增删改查,仅是对自己学习的记录,并没有深入分析每个模块(不重复造轮子O(∩_∩)O~)。
Tomcat
开源的Web应用服务器,apache-tomcat-8.0.35-windows-x64.zip仅有10.3M。启动服务:bin-startup.bat。
1.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.1kB
数据库管理工具-Navicat
3.png-37.5kB
JDBC
1.png-28.5kB
Struts 1
采用Java Servlet/JSP,实现了基于Java Web应用的MVC框架,是MVC的经典产品。
MVC
5.png-24.9kB
模型(Model):DB
视图(View):JSP
控制器(Controller):ActionServlet
Struts框架
7.png-25.9kB
struts-config.xml:声明和映射Struts组件。
安装 Struts 1
将lib目录下,所有的jar包复制到工程目录WEB-INF的lib目录中。
4.png-76.9kB
配置 Struts 1
在web.xml DD配置文件中,加入
action
org.apache.struts.action.ActionServlet
action
*.do
增
add.jsp
pageEncoding="UTF-8"%>
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;
}
增加用户界面name: | |
sex: | 男 女 |
phone: | |
address: | |
οnclick="validate(this.form);"> |
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 {
// 数据库增加操作
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。
查
show.jsp
DBHelperL db = new DBHelperL();
List> lists = db.queryAll();
db.close();
request.setAttribute("lists", lists);
%>
count | id | name | sex | phone | address | delete | update |
---|---|---|---|---|---|---|---|
${status.count} | ${list.get(0)} | ${list.get(1)} | ${list.get(2)} | ${list.get(3)} | ${list.get(4)} | 删除 | 修改 |
9.png-4.3kB
DB queryByID
public List queryByID(String ID) throws SQLException {
List 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配置
forward="/pages/show.jsp">
删
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
action="update.do?action=submit&updateID="
method="post">
name: | value= readonly="readonly"> |
sex: | value= readonly="readonly"> |
phone: | value=> |
address: | value=> |
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 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
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中配置
Set Character Encoding
filters.SetCharacterEncodingFilter
encoding
UTF-8
Set Character Encoding
/*
其它问题
防止刷新-重复提交表单
response.sendRedirect("show.do");
表单验证-JavaScript
用button替代submit,在JavaScript中满足条件时,调用form.submit()。
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;
}
首页跳转到.do
在默认的jsp文件中,转发到指定的URL。
DEMO 下载链接