Java项目:UMS 用户管理系统(二)

简介: Java项目:UMS 用户管理系统(二)

3、UMS-查询指定用户信息【进阶】【重点】


3.1、需求说明


3.2、需求分析


分析:


关键点:


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


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


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


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


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


文本框:value


单选/复选框:checked="checked"


选择框:selected="selected"


文本域:内容体


流程:


3.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;
}

3.4并且 并且业务逻辑优化【重点】


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

if(不符合A){
continue;
}
if(不符合B){
continue;
}
if(不符合C){
continue;
}
执行D

3.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:请求转发进行数据回显

  1. 若参数在请求体:

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

文本域:<textarea>${param.参数名}</textarea>

单选框/复选框:

<%
String 变量名 = request.getParameter("参数名");
%>
<input type="radio/checkbox"
<%
if(变量名!=null && 变量名.equals("值")){
%>
checked="checked"
<%
}
%>
>
选择框:
<%
String 变量名 = request.getParameter("参数名");
%>
<option
<%
if(变量名!=null && 变量名.equals("值")){
%>
selected="selected"
<%
}
%>
>
  1. 若参数在域对象(request/session):

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

文本域:<textarea>${参数名}</textarea>

单选框/复选框:

<%
String 变量名 = (String)request.getAttribute("参数名");
%>
<input type="radio/checkbox"
<%
if(变量名!=null && 变量名.equals("值")){
%>
checked="checked"
<%
}
%>
>
选择框:
<%
String 变量名 = (String)request.getAttribute("参数名");
%>
<option
<%
if(变量名!=null && 变量名.equals("值")){
%>
selected="selected"
<%
}
%>
>

4、UMS-删除指定用户信息


4.1、需求说明


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


4.2、需求分析


分析:


关键点:


1、根据ID删除


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


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


4、request.getParameter()


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


流程:


4.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);
}

4.4、a标签href属性问题【重点】


<a href="" οnclick="">


起冲突:


先执行onclick,再执行href.


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


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


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


删除href属性


解决方案2:【建议】


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


<a href="javascript:方法名()">


5、UMS-查询详情


5.1、需求说明


5.2、需求分析


分析:


关键点:


1、向servlet传递id数据


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


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


流程:


5.3、代码实现

/user/list.jsp

<td align="center" style="HEIGHT: 22px">
   <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、获取参数id
    String 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<User> 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">
      ${user.loginName}
   </td>
   <td align="center" bgColor="#f5fafe" class="ta_01">
      用户姓名:
   </td>
   <td class="ta_01" bgColor="#ffffff">
      ${user.userName}
   </td>
</tr>
<tr>
   <td align="center" bgColor="#f5fafe" class="ta_01">
      性别:
   </td>
   <td class="ta_01" bgColor="#ffffff">
      ${user.sex}
   </td>
   <td align="center" bgColor="#f5fafe" class="ta_01">
      学历:
   </td>
   <td class="ta_01" bgColor="#ffffff">
      ${user.education}
   </td>
</tr>
<tr>
   <td align="center" bgColor="#f5fafe" class="ta_01">
      出生日期:
   </td>
   <td class="ta_01" bgColor="#ffffff">
      ${user.birthday}
   </td>
   <td align="center" bgColor="#f5fafe" class="ta_01">
      电话:
   </td>
   <td class="ta_01" bgColor="#ffffff">
      ${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     ${参数名.方法名} 方法名应该忽略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">
      ${user.remark}
   </TD>
</TR>
<TR>
   <TD class="ta_01" align="center" bgColor="#f5fafe">
      用户权限:
   </TD>
   <TD class="ta_01" bgColor="#ffffff" colSpan="3">
      ${user.utype}
   </TD>
</TR>

原因:


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


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


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


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


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


5.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()}
相关文章
|
3天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
20 3
|
2天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
10 1
|
7天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
11 1
|
9天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
12天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
14天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
38 1
|
18天前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
java中获取当前系统日期
java中获取当前系统日期
JAVA 获取系统日期时间
JAVA 获取系统日期时间
295 0
|
Java 应用服务中间件
JAVA 取系统当前日期 少8个小时
        Date now = new Date();          DateFormat data = newjava.text.
823 0