(一)商城项目 (表结构设计、servlet获取数据和重定向)

一,用户模块

1.用户表设计

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

2.创建数据库

CREATE TABLE lmonkey_use(
USER_ID VARCHAR(30) NOT NULL,
USER_NAME VARCHAR(20) NOT NULL,
USER_PASSWORD VARCHAR(20) NOT NULL,
USER_SEX VARCHAR(1) NOT NULL,
USER_BIRTHDARY DATETIME DEFAULT NULL,
USER_IDENITY_CODE VARCHAR(60) DEFAULT NULL,
USER_EMAIL VARCHAR(60) DEFAULT NULL,
USER_MODBILE VARCHAR(11) DEFAULT NULL,
USER_ADDRESS VARCHAR(200) NOT NULL,
USER_STATUS DECIMAL(6.0) NOT NULL,
PRIMARY KEY(USER_ID)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

3.设计用户实体

package com.lmonkey.entity;

public class LMONKEY_USER {
			private String USER_ID; 
			private String USER_NAME;
			private String USER_PASSWORD; 
			private String USER_SEX;
			private String USER_BIRTHDARY;
			private String USER_IDENITY_CODE; 
			private String USER_EMAIL;  
			private String USER_MODBILE;  
			private String USER_ADDRESS ;
			private String USER_STATUS ;

在这里插入图片描述

5.由于后台页面都有重复的菜单页面,为了能统一管理,在manage目录下建一个admin_menu.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 charset="UTF-8"/>
    <title>简单通用文章系统后台管理模板</title>
    <link rel="stylesheet" type="text/css" href="css/common.css"/>
    <link rel="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
<div class="topbar-wrap white">
    <div class="topbar-inner clearfix">
        <div class="topbar-logo-wrap clearfix">
            <h1 class="topbar-logo none"><a href="index.html" class="navbar-brand">后台管理</a></h1>
            <ul class="navbar-list clearfix">
                <li><a class="on" href="index.html">首页</a></li>
                <li><a href="#" target="_blank">网站首页</a></li>
            </ul>
        </div>
        <div class="top-info-wrap">
            <ul class="top-info-list clearfix">
                <li><a href="#">管理员</a></li>
                <li><a href="#">修改密码</a></li>
                <li><a href="#">退出</a></li>
            </ul>
        </div>
    </div>
</div>
<div class="container clearfix">
    <div class="sidebar-wrap">
        <div class="sidebar-title">
            <h1>菜单</h1>
        </div>
        <div class="sidebar-content">
            <ul class="sidebar-list">
                <li>
                    <a href="#"><i class="icon-font">&#xe003;</i>常用操作</a>
                    <ul class="sub-menu">
                        <li><a href="design.html"><i class="icon-font">&#xe008;</i>作品管理</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe005;</i>博文管理</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe006;</i>分类管理</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe004;</i>留言管理</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe012;</i>评论管理</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe052;</i>友情链接</a></li>
                        <li><a href="design.html"><i class="icon-font">&#xe033;</i>广告管理</a></li>
                    </ul>
                </li>
                <li>
                    <a href="#"><i class="icon-font">&#xe018;</i>系统管理</a>
                    <ul class="sub-menu">
                        <li><a href="system.html"><i class="icon-font">&#xe017;</i>系统设置</a></li>
                        <li><a href="system.html"><i class="icon-font">&#xe037;</i>清理缓存</a></li>
                        <li><a href="system.html"><i class="icon-font">&#xe046;</i>数据备份</a></li>
                        <li><a href="system.html"><i class="icon-font">&#xe045;</i>数据还原</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>

然后将各个页面的重复的部分删掉,通过<%@ include file="admin_menu.jsp" %>调用重复的菜单

示例图
在这里插入图片描述

然后将菜单部分改一下

 <li><a href="admin_user.jsp"><i class="icon-font">&#xe008;</i>用户管理</a></li>
                        <li><a href="admin_cate.jsp"><i class="icon-font">&#xe005;</i>分类管理</a></li>
                        <li><a href="admin_product.jsp"><i class="icon-font">&#xe006;</i>图书管理</a></li>
                        <li><a href="admin_order.jsp"><i class="icon-font">&#xe006;</i>订单管理</a></li>
                        <li><a href="admin_message.jsp"><i class="icon-font">&#xe004;</i>留言管理</a></li>
                        <li><a href="admin_news.jsp"><i class="icon-font">&#xe012;</i>新闻管理</a></li>

将用户管理页面中的“新增作品”改为“新增用户”,同时链接地址不要忘记了、

 <a href="admin_useradd.jsp"><i class="icon-font"></i>新增用户</a>

然后将表单内的内容改为“数据库设计的字段”

 <tbody><tr>
                            <tr>
                                <th><i class="require-red">*</i>用户名:</th>
                                <td>
                                    <input class="common-text required" id="title" name="username" size="50" value="" type="text">
                                </td>
                            </tr>
                            <tr>
                                <th><i class="require-red">*</i>用户姓名:</th>
                                <td>
                                    <input class="common-text required" id="title" name="name" size="50" value="" type="text">
                                </td>
                            </tr>
                            <tr>
                                <th><i class="require-red">*</i>密码:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="passWord" size="50" value="" type="text">
                                </td>
                            </tr>
                            <tr>
                                <th><i class="require-red">*</i>确认密码:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="repassWord" size="50" value="" type="text">
                                </td>
                            </tr>
                            <tr>
                                <th>性别:</th>
                                <td>
                                   <input type="radio" name="sex" checked="checked"><input type="radio" name="sex" ></td>
                            </tr>
                            
                             <tr>
                                <th><i class="require-red">*</i>出生日期:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="birthday" size="50" value="" type="text">
                                </td>
                            </tr>
                             <tr>
                                <th><i class="require-red">*</i>邮箱:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="email" size="50" value="" type="text">
                                </td>
                            </tr>
                            
                             <tr>
                                <th><i class="require-red">*</i>手机号:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="mobile" size="50" value="" type="text">
                                </td>
                            </tr>
                             <tr>
                                <th><i class="require-red">*</i>地址:</th>
                                <td>
                                    <input type="password" class="common-text required" id="title" name="address" size="50" value="" type="text">
                                </td>
                            </tr>
                                <th></th>
                                <td>
                                    <input class="btn btn-primary btn6 mr10" value="提交" type="submit">
                                    <input class="btn btn6" onClick="history.go(-1)" value="返回" type="button">
                                </td>
                            </tr>
                        </tbody></table>

然后在src中建立一个存放处理user的servlet程序包com.lmonkey.servlet.user

简述一下用户从前台页面输入数据存放到数据库中的过程

1.用户将信息输入提交表单
2.通过表单将数据传递到后台的servlet
3.后台通过servlet获取到表单提交的信息
4.通过实例化实体类对象,就可以将从servlet获取到的信息赋值给实体类
5.实体类同jdbc传入到数据库中,就完成了数据的存储

需要注意的地方
1.使用此注解@WebServlet("/admin_useadd")可以不用在取配置web.xml文件
2.设置请求字符集的类型
3.设置响应类型
4.通过servlet获取表单数据
5.通过用户实体的构造方法将前端传过来的表单数据存复制给用户实体

//使用此注解@WebServlet("/admin_douseadd")可以不用在取配置web.xml文件
@WebServlet("/manage/admin_douseradd")
public class DoUserAdd extends HttpServlet {

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		设置请求字符集的类型
		request.setCharacterEncoding("UTF-8");
//		设置响应类型
		response.setContentType("text/html;charset=UTF-8");
//		通过servlet获取表单数据
		String username = request.getParameter("username");
		String name = request.getParameter("name");
		String pwd = request.getParameter("passwrod");
		String sex = request.getParameter("sex");
		String year = request.getParameter("birthday");
		String email = request.getParameter("email");
		String mobile = request.getParameter("mobile");
		String address = request.getParameter("address");
		
//		通过用户实体的构造方法将前端传过来的表单数据存复制给用户实体
//		“1”表示普通用户
		LMONKEY_USER u = new LMONKEY_USER(username,name,pwd,sex,year,null,email,mobile,address,1);
		
//		添加到数据库
		System.out.println(u);
		
//		是否添加成功
		if(true){
//			如果添加成功,重定向到用户添加页面
			response.sendRedirect("admin_user.jsp");
		}else{
//			如果失败,通过打印流的方式输出,通过JavaScript语句提示同时重定向到用户添加页面
			PrintWriter out = response.getWriter();
			out.write("<srcipt>");
			out.write("alert('添加失败')");
			out.write("location.href='manage/admin_useradd.jsp'");
			out.write("</srcipt>");
			
		}
	}
}

表单提交的路径

           <!--  1.enctype="multipart/form-data"不能使用 此段代码,否则后台接收不到参数,如果是文件上传形式的话就是用此代码--> 
            <!--  2.servlet提交地址设置为 admin_douseradd-->
                <form action="/MonkeyShop/manage/admin_douseradd" method="post" id="myform" name="myform" >
         
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的Servlet程序,用于实现数据、添加和编辑功能: ```java import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tableName = request.getParameter("tableName"); if (tableName == null || tableName.isEmpty()) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing table name parameter."); return; } try { // Connect to the database Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password"); // Get the metadata for the table DatabaseMetaData metadata = conn.getMetaData(); ResultSet rs = metadata.getColumns(null, null, tableName, null); // Output the HTML form response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>" + tableName + "</title></head><body>"); // Output the data table out.println("<h1>" + tableName + "</h1>"); out.println("<table><tr>"); while (rs.next()) { out.println("<th>" + rs.getString("COLUMN_NAME") + "</th>"); } out.println("<th>Edit</th></tr>"); rs = conn.createStatement().executeQuery("SELECT * FROM " + tableName); while (rs.next()) { out.println("<tr>"); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { out.println("<td>" + rs.getString(i) + "</td>"); } out.println("<td><a href=\"edit?tableName=" + tableName + "&id=" + rs.getInt(1) + "\">Edit</a></td>"); out.println("</tr>"); } out.println("</table>"); // Output the add form out.println("<h2>Add " + tableName + "</h2>"); out.println("<form action=\"add\" method=\"POST\">"); rs = metadata.getColumns(null, null, tableName, null); while (rs.next()) { out.println(rs.getString("COLUMN_NAME") + ": <input type=\"text\" name=\"" + rs.getString("COLUMN_NAME") + "\"><br>"); } out.println("<input type=\"hidden\" name=\"tableName\" value=\"" + tableName + "\">"); out.println("<input type=\"submit\" value=\"Add\">"); out.println("</form>"); conn.close(); } catch (Exception e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error: " + e.getMessage()); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String tableName = request.getParameter("tableName"); if (tableName == null || tableName.isEmpty()) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing table name parameter."); return; } try { // Connect to the database Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "username", "password"); // Insert the new record String sql = "INSERT INTO " + tableName + " ("; String values = " VALUES ("; ResultSet rs = conn.getMetaData().getColumns(null, null, tableName, null); while (rs.next()) { String columnName = rs.getString("COLUMN_NAME"); String value = request.getParameter(columnName); sql += columnName + ","; values += "'" + value + "',"; } sql = sql.substring(0, sql.length() - 1) + ")"; values = values.substring(0, values.length() - 1) + ")"; conn.createStatement().executeUpdate(sql + values); conn.close(); response.sendRedirect(request.getContextPath() + "/myServlet?tableName=" + tableName); } catch (Exception e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error: " + e.getMessage()); } } } ``` 该程序会根据 `tableName` 参数获取数据的元数据字段结构,并且输出一个网页单来实现数据、添加和编辑功能。其中,`doGet` 方法用于处理 HTTP GET 请求,`doPost` 方法用于处理 HTTP POST 请求。在 `doGet` 方法中,我们首先根据 `tableName` 参数获取数据的元数据字段结构,然后输出一个 HTML 格来展示数据,并且输出一个 HTML 单来实现添加功能。在 `doPost` 方法中,我们首先根据 `tableName` 参数获取数据的元数据字段结构,然后根据用户提交的数据插入一个新记录,并且定向到数据页面。 注意,上述代码中的数据库连接 URL、用户名和密码需要根据实际情况进行修改。同时,该程序仅作为一个示例,实际使用中需要进行更多的安全性和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值