Web项目【用户管理系统】完整版_web管理系统,2024年最新写给程序员的Flutter详细教程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

2.3:代码实现

/login/left.jsp


<table width="100%" border="0">
   <tr>
      <td>
         <a href="<%=request.getContextPath() %>/login/welcome.jsp" target="mainFrame">员工管理</a> <br/>
         <a href="<%=pageContext.getServletContext().getContextPath()%>/user?method=list"  target="mainFrame">用户管理</a>
      </td>
   </tr>
</table>

UserServlet

/**
 * 查询所有用户信息
 * @return
 */
public String list(){
    //1、调用service,查询用户列表
    List<User> ulist =  userService.list();
    System.out.println(ulist);
    //2、查询结果存入request作用域
    getRequest().setAttribute("ulist",ulist);
    //3、请求转发到/user/list.jsp
    return "forward:/user/list.jsp";
}

UserService

/**
 * 查询所有用户信息
 * @return
 */
public List<User> list() {
    return userDao.searchAll();
}

UserDao

/**
 * 读取xml中所有的用户信息
 * @return
 */
public List<User> searchAll() {
    return XmlUtils.readAll(PATH,User.class);
}

/user/list.jsp

<tr
   style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3">

   <td align="center" width="18%">
      登录名
   </td>
   <td align="center" width="17%">
      用户姓名
   </td>
   <td align="center" width="8%">
      性别
   </td>
   <td align="center" width="23%">
      联系电话
   </td>
   <td width="11%" align="center">
      学历
   </td>
   <td width="7%" align="center">
      编辑
   </td>
   <td width="7%" align="center">
      查看
   </td>
   <td width="7%" align="center">
      删除
   </td>
</tr>

<%
   //1、尝试从request作用域获取ulist集合数据
   List<User> ulist = (List<User>) request.getAttribute("ulist");
   //2、若ulist不为null,进行遍历展示
   if(ulist!=null){
      //3、进行遍历展示即可
      for (User user : ulist) {
         %>
         <tr onmouseover="this.style.backgroundColor = 'white'"
            onmouseout="this.style.backgroundColor = '#F5FAFE';">
            <td style="CURSOR: hand; HEIGHT: 22px" align="center"
               width="18%">
               <%=user.getLoginName()%>
            </td>
            <td style="CURSOR: hand; HEIGHT: 22px" align="center"
               width="17%">
               <%=user.getUserName()%>
            </td>
            <td style="CURSOR: hand; HEIGHT: 22px" align="center"
               width="8%">
               <%=user.getSex()%>
            </td>
            <td style="CURSOR: hand; HEIGHT: 22px" align="center"
               width="23%">
               <%=user.getTelephone()%>
            </td>
            <td style="CURSOR: hand; HEIGHT: 22px" align="center">
               <%=user.getEducation()%>
            </td>
            <td align="center" style="HEIGHT: 22px">
               <a href="<%=request.getContextPath() %>/">
                  <img src="<%=request.getContextPath() %>/images/i_edit.gif" border="0" style="CURSOR: hand">
               </a>
            </td>
            <td align="center" style="HEIGHT: 22px">
               <a href="<%=request.getContextPath() %>/">
                  <img src="<%=request.getContextPath() %>/images/button_view.gif" border="0" style="CURSOR: hand">
               </a>
            </td>
            <td align="center" style="HEIGHT: 22px">
               <a href="<%=request.getContextPath() %>/">
                  <img src="<%=request.getContextPath() %>/images/i_del.gif" width="16" height="16" border="0" style="CURSOR: hand">
               </a>
            </td>
         </tr>


         <%
      }
   }
%>

3,UMS-添加用户【阶段1】

3.1:需求说明

要求:跳转使用重定向。

3.2:需求分析

分析:

关键点:

1、JS事件  onclick

2、location.href

3、toBean()

4、生成随机ID。 UUID.randomUUID().toString().replaceAll(“-”,“”);

5、XmlUtils.write

6、重定向:return “redirect:/”;

流程图:

3.3:代码实现

/user/list.jsp

<td class="ta_01" align="right">
   <a class="button_add" style="padding: 2px 4px 2px 10px; border: 1px solid #8AA2CC;" href="<%=request.getContextPath() %>/user/add.jsp" id="add">添加</a>
</td>

/user/add.jsp

<form name="Form1" method="post"  action="<%=pageContext.getServletContext().getContextPath()%>/user" >
   <input type="hidden" name="method" value="addUser"/>

UserServlet

/**
 * 添加用户
 * @return
 */
public String addUser(){
    //1、接收表单数据
    User param = toBean(User.class);
    //2、调用service进行保存
    boolean result = userService.addUser(param);
    //3、根据service处理结果,做不同的跳转
    if(result){
        //添加成功
        return "redirect:/user?method=list";
    }else{
        //添加失败
        getRequest().setAttribute("errorMsg","添加失败");
        return "forward:/user/error.jsp";
    }
}

UserService

/**
 * 添加用户
 * @param param
 * @return
 */
public boolean addUser(User param) {
    //1、生成随机ID
    param.setId(UUID.randomUUID().toString().replaceAll("-",""));
    //2、调用Dao进行数据保存
    //3、try...catch对处理结果进行判断:没有出现异常,保存成功,否则保存失败
    try {
        userDao.addUser(param);
    } catch (Exception e) {
        //出现异常,添加失败
        return false;
    }
    //没有出现异常,添加成功
    return true;
}

UserDao

/**
 * 向xml中追加一个新用户
 * @param param
 */
public void addUser(User param) {
    XmlUtils.write(PATH,param);
}

/user/error.jsp

<tr>
   <td height="220" align="center" valign="middle"
      background="<%=request.getContextPath() %>/images/loginbg.gif">
      <p class="style1">
         <font color="red">${errorMsg}</font><br>
         <font color="red"></font>
      </p>
      <p>

      </p>
   </td>
</tr>

4,UMS-查询指定用户信息【进阶】

4.1:需求说明

4.2:需求分析

分析:

关键点:

1、查询条件获取,采取toBean,创建对应的JavaBean类

2、对集合进行条件筛选,进行集合转储/ 对集合进行条件筛选,对不满足集合要求的数据进行删除

内存占用高,效率高 内存占用低,效率低

3、查询条件要进行数据回显

查看域对象中是否存在该数据,若存在该数据,进行回显:

文本框:value

单选/复选框:checked=“checked”

选择框:selected=“selected”

文本域:内容体

流程:

4.3:代码实现

UserQueryParam:

public class UserQueryParam implements Serializable {
    private String userName;      //用户名(昵称)
    private String sex;             //性别
    private String education;     //学历

    @Override
    public String toString() {
        return "UserQueryParam{" +
                "userName='" + userName + '\'' +
                ", sex='" + sex + '\'' +
                ", education='" + education + '\'' +
                '}';
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEducation() {
        return education;
    }

    public void setEducation(String education) {
        this.education = education;
    }

    public UserQueryParam(String userName, String sex, String education) {
        this.userName = userName;
        this.sex = sex;
        this.education = education;
    }

    public UserQueryParam() {
    }
}

/user/list.jsp

<form name="Form1" method="post"  action="<%=pageContext.getServletContext().getContextPath()%>/user" id="Form1">
   <input type="hidden" name="method" value="findUsers"/>

UserServlet

/**
 * 条件查询
 * @return
 */
public String findUsers(){
    //1、接收查询条件
    UserQueryParam userQueryParam = toBean(UserQueryParam.class);
    //2、调用service,进行条件查询
    List<User> ulist = userService.findUsers(userQueryParam);
    //3、查询结果存入request作用域
    getRequest().setAttribute("ulist",ulist);
    //4、跳转页面
    return "forward:/user/list.jsp";
}

UserService

/**
 * 条件查询
 * @param userQueryParam
 * @return
 */
public List<User> findUsers(UserQueryParam userQueryParam) {
    //1、查询所有用户信息
    List<User> temp = userDao.searchAll();
    //2、遍历所有用户信息,将符合要求的用户信息进行转储
    //2.1、定义一个转储集合
    List<User> ulist = new ArrayList<>();
    //2.2、对temp进行非空判断,不为空就进行遍历
    if(temp!=null){
        for (User u : temp) {
            //2.3、每遍历一个用户,判断是否符合查询条件,不符合条件不保存,符合条件的转储到新集合
            //2.3.1、如果条件中,用户名不是null,用户名不是空字符串,判断当前用户是否不满足包含条件,不满足遍历下一个User
            String userName = userQueryParam.getUserName();
            if(userName!=null && !userName.equals("") && !u.getUserName().contains(userName)){
                continue;
            }
            //2.3.2、如果条件中,性别不是null,性别不是空字符串,判断当前用户性别是否不满足等于条件,不满足遍历下一个User
            String sex = userQueryParam.getSex();
            if(sex!=null && !sex.equals("") && !u.getSex().equals(sex)){
                continue;
            }
            //2.3.3、如果条件中,学历不是null,学历不是空字符串,判断当前用户学历是否不满足等于条件,不满足遍历下一个User
            String education = userQueryParam.getEducation();
            if(education!=null && !education.equals("") && !u.getEducation().equals(education)){
                continue;
            }
            //2.3.4、同时满足 用户名包含、性别等于、学历等于 条件
            ulist.add(u);
        }
    }
    //3、返回转储结果
    return ulist;
}

4.4:“并且 并且 ” 业务逻辑优化【重点】

满足逻辑:   符合A  并且符合B   并且符合C   就执行D

if(不符合A){

continue;

}

if(不符合B){

continue;

}

if(不符合C){

continue;

}

执行D

4.5:请求转发-JSP获参回显技巧【阶段重点】

/user/list.jsp

<%
   String sex = request.getParameter("sex");
   String education = request.getParameter("education");
%>
<table cellpadding="0" cellspacing="0" border="0" width="100%">
   <tr>
      <td height="22" align="center" bgColor="#f5fafe" class="ta_01">
         用户姓名
      </td>
      <td class="ta_01" bgColor="#ffffff">
         <input name="userName" class="bg" size="15" value="${param.userName}"/>
      </td>
      <td height="22" align="center" bgColor="#f5fafe" class="ta_01">
         性别:
      </td>
      <td class="ta_01" bgColor="#ffffff">
         <select name="sex" id="sex">
            <option value="">--选择性别--</option>
            <option value="男"
               <%
                  if(sex!=null && sex.equals("男")){
                     %>
                        selected="selected"
                     <%
                  }
               %>
            >男</option>
            <option value="女"
                  <%
                     if(sex!=null && sex.equals("女")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >女</option>
         </select>
      </td>
   </tr>
   <tr>
      <td height="22" align="center" bgColor="#f5fafe" class="ta_01">
         学历:
      </td>
      <td class="ta_01" bgColor="#ffffff">
         <select name="education" id="education" >
            <option value="">--选择学历--</option>
            <option value="博士"
                  <%
                     if(education!=null && education.equals("博士")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >博士</option>
            <option value="硕士"
                  <%
                     if(education!=null && education.equals("硕士")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >硕士</option>
            <option value="本科"
                  <%
                     if(education!=null && education.equals("本科")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >本科</option>
            <option value="专科"
                  <%
                     if(education!=null && education.equals("专科")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >专科</option>
            <option value="高中"
                  <%
                     if(education!=null && education.equals("高中")){
                        %>
                        selected="selected"
                        <%
                     }
                  %>
            >高中</option>
         </select>
      </td>

JSP:请求转发进行数据回显

若参数在请求体:

文本框:value=“${param.参数名}”

文本域:${param.参数名}

单选框/复选框:

<%String 变量名 = request.getParameter(“参数名”);%>

<input type=“radio/checkbox”

<%

if(变量名!=null && 变量名.equals(“值”)){

%>

checked=“checked”

<%

}

%>********>

选择框:

<%String 变量名 = request.getParameter(“参数名”);%>

<option

<%

if(变量名!=null && 变量名.equals(“值”)){

%>

selected=“selected”

<%

}

%>

>

若参数在域对象(request/session):

文本框:value=“${参数名}”

文本域:${参数名}

单选框/复选框:

<%String 变量名 = (String)request.getAttribute(“参数名”);%>

<input type=“radio/checkbox”

<%

if(变量名!=null && 变量名.equals(“值”)){

%>

checked=“checked”

<%

}

%>

>

选择框:

<%

String 变量名 = (String)request.getAttribute(“参数名”);

%>

<option

<%

if(变量名!=null && 变量名.equals(“值”)){

%>

selected=“selected”

<%

}

%>

>

5,UMS-删除指定用户信息

5.1:需求说明

点击删除,弹出对话框,点击确定,真正删除数据,删除完成,回到列表页面展示所有内容。

5.2:需求分析

分析:

关键点:

1、根据ID删除

2、点击事件,监听器代码

3、JS页面跳转:location.href=“”

4、request.getParameter()

5、删除逻辑:①查询所有用户信息 ②迭代删除 ③覆盖保存

流程:

5.3:代码实现

/user/list.jsp

<script>
   function delUserById(uid) {
      if(confirm("是否删除该数据?")){
         location.href="<%=pageContext.getServletContext().getContextPath()%>/user?method=delUserById&id="+uid;
      }
   }
</script>

<td align="center" style="HEIGHT: 22px">
   <a href="javascript:delUserById('<%=user.getId()%>')">
      <img src="<%=request.getContextPath() %>/images/i_del.gif" width="16" height="16" border="0" style="CURSOR: hand">
   </a>
</td>

UserServlet

/**
 * 根据ID删除用户信息
 * @return
 */
public String delUserById(){
    //1、接收参数
    String id = getRequest().getParameter("id");
    //2、调用service根据ID进行删除
    boolean result = userService.delUserById(id);
    //3、根据service处理结果,进行跳转
    if(result){
        //删除成功
        return "redirect:/user?method=list";
    }else{
        getRequest().setAttribute("errorMsg","删除失败");
        return "forward:/user/error.jsp";
    }
}

UserService

/**
 * 根据ID删除用户信息
 * @param id
 * @return
 */
public boolean delUserById(String id) {
    try {
        //1、查询所有用户信息
        List<User> ulist = userDao.searchAll();
        //2、进行迭代操作
        Iterator<User> it = ulist.iterator();
        while (it.hasNext()){
            User next = it.next();
            //3、迭代中,若当前迭代用户的id 等于 待删除用户的id, 删除当前用户
            if(next.getId().equals(id)){
                it.remove();
                break;
            }
        }
        //4、以覆盖方式写回
        userDao.saveUlist(ulist);
    } catch (Exception e) {
        return false;
    }
    //5、没有出异常,删除成功;出现异常,删除失败
    return true;
}

UserDao

/**
 * 以覆盖方式写出list集合
 * @param ulist
 */
public void saveUlist(List<User> ulist) {
    XmlUtils.write(PATH,ulist,false);
}

1,根据ID删除

2,点击时间,监听器代码

3,JS页面跳转:location.href=“”

4,request.getParameter()

5,删除逻辑:查询所有用户,迭代删除,覆盖保存

5.4:a标签href属性问题

<a href=“” οnclick=“”>

起冲突:

先执行onclick,再执行href.

若在onclick监听器中,编写location.href=""跳转A页面,

没有生效,执行的是a标签href属性的路径

解决方案1:(治标不治本)

删除href属性

解决方案2:【建议】

href属性执行javascript代码,让JavaScript具备控制权

6,UMS-查询详情

6.1:需求说明

6.2:需求分析

分析:

关键点:

1、向servlet传递id数据

2、根据id查询并返回指定User对象

3、对数据进行数据回显操作—JavaBean—EL

流程:

6.3:代码实现

/user/list.jsp

<td align**=“center”** style**=“HEIGHT: 22**px**”>    <a href**=“<%=pageContext.getServletContext().getContextPath()%>/user?method=view&id=<%=user.getId()%>>       <img src**=“<%=**request.getContextPath() **%>/images/button_view.gif”** border**=“0”** style**=“CURSOR: hand”**>    </a></td>

UserServlet

/*** 根据ID查看用户信息* @return**/public String view(){    HttpServletRequest request = getRequest();     //1、获取参数idString id = request.getParameter(“id”);     //2、调用service根据id查询用户信息User user = userService.searchUserById(id);     //3、存入request作用域request.setAttribute(“user”,user);     //4、请求转发return* “forward:/user/view.jsp”;}

UserService

/*** 根据ID查询用户信息* @param id*** @return**/public User searchUserById(String id) {     //1、获取所有的用户信息List ulist = userDao.searchAll();     if(ulist!=null){         for (User user : ulist) {             //2、遍历所有用户信息,根据ID查找用户,找到符合要求的用户,直接进行返回if*(user.getId().equals(id)){                 return user;            }        }    }     //3、若找不到,返回空user对象。不建议为null,因为null使用时会有空指针异常风险return new User();}

/user/view.jsp

<tr>    <td width**=“18%”** align**=“center”** bgColor**=“#f5fafe”** class**=“ta_01”>      登录名:    </td>    <td class**=“ta_01” bgColor**=“#ffffff”>       KaTeX parse error: Expected 'EOF', got '#' at position 82: …**bgColor****="#̲f5fafe"** **cla…{user.userName}</td></tr><tr>    <td align**=“center” bgColor**=“#f5fafe”** class**=“ta_01”>      性别:    </td>    <td class**=“ta_01” bgColor**=“#ffffff”>       KaTeX parse error: Expected 'EOF', got '#' at position 76: …**bgColor****="#̲f5fafe"** **cla…{user.education}</td></tr><tr>    <td align**=“center” bgColor**=“#f5fafe”** class**=“ta_01”>      出生日期:    </td>    <td class**=“ta_01” bgColor**=“#ffffff”>       KaTeX parse error: Expected 'EOF', got '#' at position 81: …**bgColor****="#̲f5fafe"** **cla…{user.telephone}</td></tr><tr>    <td align**=“center” bgColor**=“#f5fafe”** class**=“ta_01”>      兴趣爱好:    </td>    <td class**=“ta_01” bgColor**=“#ffffff”** colSpan**=“3”>       *<%–//解决方法1://1、获取request作用域user对象User user = (User) request.getAttribute(“user”);//2、判断:只要user不为空,并且 interest数组也不为空,对数组进行遍历if(user!=null && user.getInterest()!=null){//3、每遍历一个爱好,展示一个String[] interest = user.getInterest();for (int i = 0; i < interest.length; i++) {out.write(interest[i]);if(i!=interest.length-1)out.write(“,”);}}–%><%--   解决方法2      参数名 . 方法名 方法名应该忽略 g e t , 将 g e t 后的第一个字母进行小写 ∗ ∗ {参数名.方法名} 方法名应该忽略get,将get后的第一个字母进行小写** 参数名.方法名方法名应该忽略get,get后的第一个字母进行小写{user.interestString} 参数名 . 方法名 ( )   方法按原名进行 ∗ ∗ − − {参数名.方法名()}   方法按原名进行**--%>*** 参数名.方法名()  方法按原名进行{user.getInterestString()}</td></tr><TR>    <TD class**=“ta_01”** align**=“center”** bgColor**=“#f5fafe”>      备注:    </TD>    <TD class**=“ta_01” bgColor**=“#ffffff”** colSpan**=“3”**>       KaTeX parse error: Expected 'EOF', got '#' at position 119: …**bgColor****="#̲f5fafe"**>     …{user.utype}</TD></TR>

原因:

因为servlet默认是单例模式,request成员变量就只是能保存一个请求对象。

一个Servlet将来是要处理非常多的请求,一个请求就是一个request对象。

不可能用同一个request对象处理所有请求。

不建议抽取为request成员变量。

建议:每个方法执行时,现场获取

6.4:数组在JSP回显的技巧

解决方案1:(新手容易接受)

书写java脚本,通过java脚本进行数组遍历,代码实现

<tr>    <td align**=“center”** bgColor**=“#f5fafe”** class**=“ta_01”>      兴趣爱好:    </td>    <td class**=“ta_01” bgColor**=“#ffffff”** colSpan**=“3”>       <%//1、获取request作用域user对象*User user = (User) request.getAttribute(“user”);          //2、判断:只要user不为空,并且 interest数组也不为空,对数组进行遍历if*(user!=null && user.getInterest()!=null){             //3、每遍历一个爱好,展示一个String[] interest = user.getInterest();             for (int i = 0; i < interest.length; i++) {               out.write(interest[i]);                if(i!=interest.length-1)                  out.write(“,”);            }         }       %></td></tr>

解决方案2:【传统大型开发】

EL表达式,调用getXxx方法,进行操作。

在JavaBean类中,即User类中,添加一个方法:

getInterestString,方法内部对数组拼接字符串,将字符串进行返回。

EL表达式调用该方法,获取字符串,并展示在页面

itcast-tools 1.5.7

如何向xml填充数据的?

依靠的是getXxx方法。

getName()   getSex()

在向xml填充数据时,分别调用两个方法,形成 字段:name字段  sex字段

getInterestString()

向xml填充数据时,多个一个interestString字段,该方法的返回值即为字段值

xml在读取数据时:

发现有getInterestString(),没有setInterestString(),工具认为无法为interestString,会报java.lang.NoSuchFieldException: interestString

注意:方法起名时,如果不想在xml存在多余字段,尽可能避免get开头或者set开头方法

User类

public class User implements Serializable {/*** 专门用来在JSP进行EL表达式回显 数组* @return**/public String interestString(){        StringBuilder builder = new StringBuilder();         if(getInterest()!=null){             //3、每遍历一个爱好,展示一个String[] interest = getInterest();             for (int i = 0; i < interest.length; i++) {                builder.append(interest[i]);                 if(i!=interest.length-1)                    builder.append(“,”*);            }        }         return builder.toString();    } //其他内容暂时省略,不粘贴在笔记上

/user/view.jsp

<%--    解决方法2* 参数名 . 方法名 ( )   方法按原名进行 ∗ ∗ − − {参数名.方法名()}   方法按原名进行**--%>*** 参数名.方法名()  方法按原名进行{user.interestString()}**

7,UMS-编辑用户

7.1:需求说明

遇到这样的复杂需求,我们需要拆分成两步来做:

1、用户数据查询回显:跳转到编辑页面,在编辑页面回显该用户的数据

2、用户数据修改:编辑页面修改完毕后,点击“确定”,真正修改数据到xml中

7.2:用户数据查询回显

7.2.1:需求分析

分析:

关键点:

1、地址栏传递id

2、request作用域及请求转发

3、对User数据在JSP进行回显

如果数据在request作用域:

文本框:value=“${参数名.属性名}”

文本域:${参数名.属性名}

单选框/复选框:

JavaBean javaBean = (JavaBean)request.getAttribute(“参数名”);

if(javaBean!=null && javaBean.getXxx()!=null){

if(javaBean.getXxx().equals(“值”)){

out.write(“checked=‘checked’”);

}

}

选择框:

JavaBean javaBean = (JavaBean)request.getAttribute(“参数名”);

if(javaBean!=null && javaBean.getXxx()!=null){

if(javaBean.getXxx().equals(“值”)){

out.write(“selected=‘selected’”);

}

}

流程分析:

7.2.2:代码实现

/user/list.jsp

<td align**=“center”** style**=“HEIGHT: 22**px**”>    <a href**=“<%=pageContext.getServletContext().getContextPath()%>/user?method=editView&id=<%=user.getId()%>>       <img src**=“<%=**request.getContextPath() **%>/images/i_edit.gif”** border**=“0”** style**=“CURSOR: hand”**>    </a></td>

UserServlet

/*** 跳转到编辑页面* @return**/public String editView(){    HttpServletRequest request = getRequest();     //1、获取参数idString id = request.getParameter(“id”);     //2、调用service根据id查询用户信息User user = userService.searchUserById(id);     //3、存入request作用域request.setAttribute(“user”,user);     //4、请求转发return* “forward:/user/edit.jsp”;}

/user/edit.jsp

<%User u = (User) request.getAttribute(“user”);%><form method**=“post”** action**=“”>           <input type**=“hidden” name**=“id”** value**=“”** />       <table cellSpacing**=“1”** cellPadding**=“5”** width**=“100%”** align**=“center”** bgColor**=“#eeeeee”** style**=“border: 1px solid #8ba7e3”** border**=“0”>          <tr>             <td class**=“ta_01” align**=“center”** bgColor**=“#afd1f3”** colSpan**=“4"height=“26”>                <strong><STRONG>编辑用户</STRONG>                </strong>             </td>          </tr>                    <tr>             <td align**=“center” bgColor**=”#f5fafe"** class**=“ta_01”>                登录名:             </td>             <td class**=“ta_01” bgColor**=“#ffffff”>                <input type**=“text” name**=“loginName”** id**=“loginName”** class**=“bg”** value**=“KaTeX parse error: Expected 'EOF', got '#' at position 111: …**bgColor****="#̲f5fafe"** **cla…{user.loginPwd}/>             </td>             <td align**=“center” bgColor**=“#f5fafe”** class**=“ta_01”>               用户姓名:             </td>             <td class**=“ta_01” bgColor**=“#ffffff”>                <input type**=“text” name**=“userName”** class**=“bg”** value**=“KaTeX parse error: Expected 'EOF', got '#' at position 147: …**bgColor****="#̲f5fafe"** **cla…{user.birthday}onclick=“c.show(this)/>             </td>             <td align**=“center” bgColor**=”#f5fafe”** class**=“ta_01”>               电话:             </td>             <td class**=“ta_01” bgColor**=“#ffffff”>                <input type**=“text” name**=“telephone”** id**=“telephone"value=”****KaTeX parse error: Expected 'EOF', got '#' at position 148: …**bgColor****="#̲f5fafe"** **cla…{user.remark}**</textarea>             </TD>          </TR>

7.3:用户数据修改

7.3.1:需求分析

分析:

关键点:

1、ID不需要被修改,需要被从JSP传递给servlet,因为若未传递ID,ID为null

2、修改逻辑:

①查询所有信息

②迭代删除被修改的信息,添加新信息  (新集合)

③新集合以覆盖方式保存新信息

3、路径更改问题

添加、修改、删除

流程:

7.3.2:代码实现

/user/edit.jsp

<form method**=“post”** action**=“<%=pageContext.getServletContext().getContextPath()%>/user”><input type**=“hidden” name**=“method”** value**=“modifyUser”** />       <input type**=“hidden”** name**=“id”** value**=“${user.id}”** />

UserServlet

/*** 修改用户信息* @return**/public String modifyUser(){     //1、获取所有表单数据User param = toBean(User.class);     //2、调用service进行保存boolean* result = userService.modifyUser(param);     //3、根据service保存结果,进行展示if(result){         //修改成功return “redirect:/user?method=list”;    }else{         //修改失败getRequest().setAttribute(“errorMsg”,“修改失败”);         return “forward:/user/error.jsp”;    }}

UserService

/*** 修改用户信息* @param param*** @return**/public boolean modifyUser(User param) {     try {         //1、查询所有用户信息List ulist = userDao.searchAll();         //2、迭代删除被修改的用户if*(ulist!=null){             Iterator it = ulist.iterator();             while (it.hasNext()){                User next = it.next();                 if(next.getId().equals(param.getId())){                    it.remove();                     break;                }            }        }         //3、向集合追加被修改用户的新信息ulist.add(param);         //4、以覆盖方式写回xmluserDao.saveUlist(ulist);    } catch (Exception e) {         return false;    }     return true;}
7.4:令牌机制-数据更新操作中BUG说明及解决(

开发常见问题,

用来解决增删改中

重复刷新和恶意刷新操作

问题描述:反复刷新页面就会导致  添加功能被重复执行,添加重复数据

问题解决方案:

解决方案1:直接解决法(规避法)

/**
* 添加用户
* @return

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

uest().setAttribute(“errorMsg”,“修改失败”);         return “forward:/user/error.jsp”;    }} |

UserService

/*** 修改用户信息* @param param*** @return**/public boolean modifyUser(User param) {     try {         //1、查询所有用户信息List ulist = userDao.searchAll();         //2、迭代删除被修改的用户if*(ulist!=null){             Iterator it = ulist.iterator();             while (it.hasNext()){                User next = it.next();                 if(next.getId().equals(param.getId())){                    it.remove();                     break;                }            }        }         //3、向集合追加被修改用户的新信息ulist.add(param);         //4、以覆盖方式写回xmluserDao.saveUlist(ulist);    } catch (Exception e) {         return false;    }     return true;}
7.4:令牌机制-数据更新操作中BUG说明及解决(

开发常见问题,

用来解决增删改中

重复刷新和恶意刷新操作

问题描述:反复刷新页面就会导致  添加功能被重复执行,添加重复数据

问题解决方案:

解决方案1:直接解决法(规避法)

/**
* 添加用户
* @return

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-BHzoBUed-1713332339510)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值