一、Java Web 开发流程
二、MVC的概念
。MVC是Model-View-Controller的简称,即模型-视图-控制器。
。MVC是一种设计模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。
1、模型(Model)
模型是应用程序的主体部分,模型表示业务数据和业务逻辑
。
一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以提高了代码的可重用性。
2、视图(View)
视图是用户看到并与之交互的界面
,作用如下:
——视图向用户显示相关的数据。
——接受用户的输入。
——不进行任何实际的业务处理。
3、控制器(Controller)
控制器接受用户的输入并调用模型和视图去完成用户的需求
。
控制器接收请求并决定调用哪个模型组件去处理请求,然后决定调用哪个视图来显示模型处理返回的数据。
三、MVC模式的实现例子
项目结构
使用的数据库表
c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config name="com.dgut.javaweb">
<!-- 配置数据库连接 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?serverTimezone=Hongkong</property>
<property name="user">root</property>
<property name="password">75688</property>
<!-- 数据库连接池的其他配置 -->
<property name="acquireIncrement">2</property><!-- 连接数不够时,每次新增2个 -->
<property name="initialPoolSize">2</property><!-- initial Pool Size -->
<property name="minPoolSize">2</property><!-- min connection count -->
<property name="maxPoolSize">10</property><!-- max connection count -->
</named-config>
</c3p0-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>javawebMVC</display-name>
<!-- =注册initServlet,目的是加快响应数据库连接池= -->
<servlet>
<servlet-name>initServlet</servlet-name><!-- 给指定的servlet取名 -->
<servlet-class>com.dgut.mvc.controller.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- =====使用filter过滤器解决中文问题====== -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.dgut.mvc.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<!-- 配置拦截request,forward请求方式 -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
</web-app>
JdbcTools
JdbcTools.java
package com.dgut.mvc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcTools {
private static ComboPooledDataSource cpds = null;
public static Connection getConnectionFromPool() throws Exception {
if (cpds == null)
cpds = new ComboPooledDataSource("com.dgut.javaweb");
return cpds.getConnection();
}
public static Connection getConnection() throws Exception {
// String driverClass = "com.mysql.cj.jdbc.Driver";
// String jdcbUrl = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=Hongkong";
// String user = "root";
// String password = "75688";
// Class.forName(driverClass);
//
// Connection connection = DriverManager.getConnection(jdcbUrl, user, password);
return getConnectionFromPool();
}
public static void releaseResource(Statement statement, Connection connection) {
try {
if (statement != null)
statement.close();
} catch (Exception e1) {
e1.printStackTrace();
}
try {
if (connection != null)
connection.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
public static void releaseResource(ResultSet rs, Statement statement, Connection connection) {
try {
if (rs != null)
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (statement != null)
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Bean
Member.java
MemberSearchCondition.java
Dao
DAO.java
package com.dgut.mvc.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public interface DAO<T> {
// 查询一个
public T fetch(Connection connection, String sql, Object... objects) throws SQLException;
// 查询一组
public List<T> fetchList(Connection connection, String sql, Object... objects) throws SQLException;
// 增删改
public void update(Connection connection, String sql, Object... objects) throws SQLException;
// 查询一个分量
public <E> E fetchScaler(Connection connection, String sql, Object... objects) throws SQLException;
}
MemberDao.java
package com.dgut.mvc.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import com.dgut.mvc.bean.Member;
import com.dgut.mvc.bean.MemberSearchCondition;
public interface MemberDao {
public void addMember(Connection connection, Member member) throws SQLException;
public void deleteMember(Connection connection, int id) throws SQLException;
public void updateMember(Connection connection, Member member) throws SQLException;
public Member searchMemberById(Connection connection, int id) throws SQLException;
public List<Member> fetchAllMembers(Connection connection) throws SQLException;
public List<Member> searchMemberByCondition(Connection connection, MemberSearchCondition conditions)
throws SQLException;
}
DAOImpl
DAOJdbcImpl.java
package com.dgut.mvc.daoImpl;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.dgut.mvc.dao.DAO;
public class DAOJdbcImpl<T> implements DAO<T> {
private QueryRunner queryRunner;
private Class<T> type;
@SuppressWarnings("unchecked")
public DAOJdbcImpl() {
queryRunner = new QueryRunner();
type = getSuperClassGenricType(getClass(), 0);
}
@SuppressWarnings("rawtypes")
private Class getSuperClassGenricType(Class clazz, int index) {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
return Object.class;
}
if (!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
public T fetch(Connection connection, String sql, Object... objects) throws SQLException {
BeanHandler<T> rsh = new BeanHandler<T>(type);
return queryRunner.query(connection, sql, rsh, objects);
}
public List<T> fetchList(Connection connection, String sql, Object... objects) throws SQLException {
BeanListHandler<T> rsh = new BeanListHandler<T>(type);
return queryRunner.query(connection, sql, rsh, objects);
}
public void update(Connection connection, String sql, Object... objects) throws SQLException {
queryRunner.update(connection, sql, objects);
}
public <E> E fetchScaler(Connection connection, String sql, Object... objects) throws SQLException {
ScalarHandler<E> rsh = new ScalarHandler<E>();
return (E) queryRunner.query(connection, sql, rsh, objects);
}
}
MemberDaoJdbcImpl.java
package com.dgut.mvc.daoImpl;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import com.dgut.mvc.bean.Member;
import com.dgut.mvc.bean.MemberSearchCondition;
import com.dgut.mvc.dao.MemberDao;
public class MemberDaoJdbcImpl extends DAOJdbcImpl<Member> implements MemberDao {
public void addMember(Connection connection, Member member) throws SQLException {
String sql = "INSERT INTO member (name,Idcard, phone, credits) VALUES (?, ?, ?, ?)";
Object[] objs = { member.getName(), member.getIdCard(), member.getPhone(), member.getCredits() };
update(connection, sql, objs);
}
public void deleteMember(Connection connection, int id) throws SQLException {
String sql = "DELETE FROM member WHERE memberId=?";
update(connection, sql, id);
}
public void updateMember(Connection connection, Member member) throws SQLException {
String sql = "UPDATE member set name=?, idCard=?, phone=?, credits=? WHERE memberId=?";
Object[] objs = { member.getName(), member.getIdCard(), member.getPhone(), member.getCredits(),
member.getId() };
update(connection, sql, objs);
}
public Member searchMemberById(Connection connection, int id) throws SQLException {
String sql = "SELECT memberId id,name,idCard,phone,credits FROM member WHERE memberId=?";
return fetch(connection, sql, id);
}
public List<Member> fetchAllMembers(Connection connection) throws SQLException {
String sql = "SELECT memberId id,name,idCard,phone,credits FROM member";
return fetchList(connection, sql);
}
@Override
public List<Member> searchMemberByCondition(Connection connection, MemberSearchCondition conditions)
throws SQLException {
String sql = "SELECT memberId id,name,idCard,phone,credits FROM member "
+ "WHERE name like ? AND idCard like ? AND phone like ? ";
Object[] objs = { conditions.getName(), conditions.getIdCard(), conditions.getPhone() };
return fetchList(connection, sql, objs);
}
}
TestDao
TestMemberDao.java
package com.dgut.mvc.test;
import java.sql.Connection;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.dgut.mvc.bean.Member;
import com.dgut.mvc.dao.MemberDao;
import com.dgut.mvc.daoImpl.MemberDaoJdbcImpl;
import com.dgut.mvc.utils.JdbcTools;
class TestMemberDao {
@Test
public void testGetAll() {
MemberDao dao = new MemberDaoJdbcImpl();
Connection connection = null;
try {
connection = JdbcTools.getConnection();
List<Member> members = dao.fetchAllMembers(connection);
System.out.println(members);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
@Test
public void testGetById() {
int id = 10;
MemberDao dao = new MemberDaoJdbcImpl();
Connection connection = null;
try {
connection = JdbcTools.getConnection();
Member member = dao.searchMemberById(connection, id);
System.out.println(member);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
@Test
public void testUpdateMember() {
Member member = new Member(7, "heihei", "20201001", "13920201001", 200);
MemberDao dao = new MemberDaoJdbcImpl();
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.updateMember(connection, member);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
@Test
public void testDeleteMember() {
int id = 13;
MemberDao dao = new MemberDaoJdbcImpl();
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.deleteMember(connection, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
@Test
public void testAddMember() {
Member member = new Member(null, "CCC", "2020002", "1392020002", 100);
MemberDao dao = new MemberDaoJdbcImpl();
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.addMember(connection, member);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
}
Servlet
InitServlet.java
package com.dgut.mvc.controller;
import java.io.IOException;
import java.sql.Connection;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.dgut.mvc.utils.JdbcTools;
public class InitServlet implements Servlet {
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
Connection connection = null;
try {
connection = JdbcTools.getConnection();
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
}
}
MemberServlet.java
package com.dgut.mvc.controller;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dgut.mvc.bean.Member;
import com.dgut.mvc.bean.MemberSearchCondition;
import com.dgut.mvc.service.MemberService;
@WebServlet("*.do") // 响应所有以.do结尾的请求
public class MemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private MemberService memberService;
public MemberServlet() {
super();
this.memberService = new MemberService();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String servletpath = request.getServletPath();// 获取请求路径
String methodName = servletpath.substring(1, servletpath.length() - 3);// 提取路径中“.do”前的名字
System.out.println("servletpath==" + servletpath);
System.out.println("methodName==" + methodName);
// 使用反射机制,即通过上面取得的方法名,自动去调用下面具体的方法,
// 例如请求为listMember.do的路径,将调用listMember()方法
try {
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
HttpServletResponse.class);
method.invoke(this, request, response);// 调用Method类代表的方法。可以实现动态调用,例如可以动态的传人参数,可以把方法参数化。
} catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
}
}
// 查询所有
public void listMember(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Member> members = memberService.getAllMembers();
request.setAttribute("members", members);
request.getRequestDispatcher("/WEB-INF/views/memberList.jsp").forward(request, response);
}
// 删除
public void deleteMember(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
memberService.deleteMembers(id);
// 回到listMember页面,显示所有信息
listMember(request, response);
}
// 转到添加页面
public void toInputMember(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/views/inputMember.jsp").forward(request, response);
}
// 添加
public void inputMember(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String idCard = request.getParameter("idCard");
String phone = request.getParameter("phone");
int credits = Integer.parseInt(request.getParameter("credits"));
Member member = new Member(null, name, idCard, phone, credits);
boolean res = memberService.inputMembers(member);
if (res) {
request.setAttribute("SucceedMessage", "添加成功");
request.getRequestDispatcher("/WEB-INF/views/succeed.jsp").forward(request, response);
} else {
request.setAttribute("ErrorMessage", "添加失败,IdCard已存在");
request.getRequestDispatcher("/WEB-INF/views/inputMember.jsp").forward(request, response);
}
}
// 转到编辑页面
public void editMember(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
Member member = memberService.getMembers(id);
request.setAttribute("member", member);
request.getRequestDispatcher("/WEB-INF/views/updateMember.jsp").forward(request, response);
}
// 编辑
public void updateMember(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String idCard = request.getParameter("idCard");
String phone = request.getParameter("phone");
int credits = Integer.parseInt(request.getParameter("credits"));
Member member = new Member(id, name, idCard, phone, credits);
memberService.updateMember(member);
request.setAttribute("SucceedMessage", "编辑成功");
request.getRequestDispatcher("/WEB-INF/views/succeed.jsp").forward(request, response);
}
// 模糊查询
public void searchMember(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
String name = request.getParameter("name");
String idCard = request.getParameter("idCard");
String phone = request.getParameter("phone");
MemberSearchCondition sc = new MemberSearchCondition(name, idCard, phone);
List<Member> members = memberService.searchMemberByCondition(sc);
request.setAttribute("members", members);
request.getRequestDispatcher("/WEB-INF/views/memberList.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Service
MemberService.java
package com.dgut.mvc.service;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import com.dgut.mvc.bean.Member;
import com.dgut.mvc.bean.MemberSearchCondition;
import com.dgut.mvc.dao.MemberDao;
import com.dgut.mvc.daoImpl.MemberDaoJdbcImpl;
import com.dgut.mvc.utils.JdbcTools;
public class MemberService {
private MemberDao dao;
public MemberService() {
this.dao = new MemberDaoJdbcImpl();
}
// 获取所有
public List<Member> getAllMembers() {
Connection connection = null;
List<Member> memberms = new ArrayList<Member>();
try {
connection = JdbcTools.getConnection();
memberms = dao.fetchAllMembers(connection);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
return memberms;
}
// 删除
public void deleteMembers(int id) {
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.deleteMember(connection, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
// 添加
public boolean inputMembers(Member member) {
boolean result = false;
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.addMember(connection, member);
result = true;// 添加成功,则为true
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
return result;
}
// 查找
public Member getMembers(int id) {
Connection connection = null;
Member member = new Member();
try {
connection = JdbcTools.getConnection();
member = dao.searchMemberById(connection, id);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
return member;
}
// 编辑
public void updateMember(Member member) {
Connection connection = null;
try {
connection = JdbcTools.getConnection();
dao.updateMember(connection, member);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
}
// 模糊查询
public List<Member> searchMemberByCondition(MemberSearchCondition conditions) {
Connection connection = null;
List<Member> memberms = new ArrayList<Member>();
try {
connection = JdbcTools.getConnection();
memberms = dao.searchMemberByCondition(connection, conditions);
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcTools.releaseResource(null, connection);
}
return memberms;
}
}
EncodingFilter.java
package com.dgut.mvc.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
}
view
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/listMember.do">Member Manager</a>
</body>
</html>
memberList.jsp
<%@page import="com.dgut.mvc.bean.Member"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="java.util.List,java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>显示所有界面</h3>
<hr>
<form action="${pageContext.request.contextPath }/searchMember.do" method="post">
Name:<input type="text" name="name" value="${param.name }"><br>
IdCard:<input type="text" name="idCard" value="${param.idCard }"><br>
Phone:<input type="text" name="phone" value="${param.phone }"><br>
<input type="submit" value="模糊查询">
</form>
<hr>
<%
List<Member> members = (List<Member>) request.getAttribute("members");
%>
<a href="${pageContext.request.contextPath }/toInputMember.do">Add Member</a>
<table border="1" cellspacing="0" cellpadding="5">
<tr>
<th>Name</th>
<th>IdCard</th>
<th>Phone</th>
<th>Credits</th>
<th>update</th>
<th>delete</th>
</tr>
<%
if(members!=null){
for(Member member:members){
%>
<tr>
<td><%=member.getName() %></td>
<td><%=member.getIdCard() %></td>
<td><%=member.getPhone() %></td>
<td><%=member.getCredits() %></td>
<td><a href="${pageContext.request.contextPath }/editMember.do?id=<%=member.getId() %>">Update</a></td>
<td><a href="${pageContext.request.contextPath }/deleteMember.do?id=<%=member.getId() %>">Delete</a></td>
</tr>
<%
}
}
%>
</table>
<h1>use jstl</h1>
<table border="1" cellspacing="0" cellpadding="5">
<tr>
<th>Name</th>
<th>IdCard</th>
<th>Phone</th>
<th>Credits</th>
<th>update</th>
<th>delete</th>
</tr>
<c:if test="${!empty requestScope.members}">
<c:forEach items="${requestScope.members}" var="member">
<tr>
<td>${member.name}</td>
<td>${member.idCard}</td>
<td>${member.phone}</td>
<td>${member.credits}</td>
<td><a href="${pageContext.request.contextPath }/editMember.do?id=${member.id }">Update</a></td>
<td><a href="${pageContext.request.contextPath }/deleteMember.do?id=${member.id}">Delete</a></td>
</tr>
</c:forEach>
</c:if>
</table>
</body>
</html>
succeed.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>${requestScope.SucceedMessage }</h4>
<a href="${pageContext.request.contextPath }/listMember.do">Member Manager</a>
</body>
</html>
inputMember.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>添加界面</h3>
<h4>${requestScope.ErrorMessage }</h4>
<!-- 以post方式提交到inputMember的servlet -->
<!-- value="${param.name}"消息回显 -->
<form action="${pageContext.request.contextPath }/inputMember.do" method="post">
Name:<input type="text" name="name" value="${param.name}"><br>
IdCard:<input type="text" name="idCard" value="${param.idCard}"><br>
Phone:<input type="text" name="phone" value="${param.phone}"><br>
Credits:<input type="text" name="credits" value="${param.credits}"><br>
<input type="submit" value="添加">
<a href="${pageContext.request.contextPath }/listMember.do">Member Manager</a>
</form>
</body>
</html>
updateMember.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>编辑界面</h3>
<h4>${requestScope.ErrorMessage }</h4>
<!-- 以post方式提交到inputMember的servlet -->
<!-- value="${requestScope.member.name}"消息回显 -->
<form action="${pageContext.request.contextPath }/updateMember.do" method="post">
<input type="hidden" name="idCard" value="${requestScope.member.idCard}"><br>
<input type="hidden" name="id" value="${requestScope.member.id}"><br>
Name:<input type="text" name="name" value="${requestScope.member.name}"><br>
IdCard:<input type="text" disabled="disabled" name="idCard" value="${requestScope.member.idCard}"><br>
Phone:<input type="text" name="phone" value="${requestScope.member.phone}"><br>
Credits:<input type="text" name="credits" value="${requestScope.member.credits}"><br>
<input type="submit" value="确定编辑">
<a href="${pageContext.request.contextPath }/listMember.do">Member Manager</a>
</form>
</body>
</html>