既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
1.2:整体需求
1)查询所有【阶段1】
2)添加【阶段1】
3)删除【阶段1】
4)查询详情【阶段1】
5)条件查询【阶段1】
6)修改【阶段2】
1.3:搭建环境
- 步骤1:创建web项目
- 步骤2:导入jar包,导入原型
把xml放置在了d:根目录(本次人员管理系统没有涉及数据库),数据存放xml文件中
3.步骤3:创建package包及JavaBean
public class User {
private String id; //唯一标识
private String loginName; //登录名
private String loginPwd; //登录密码
private String userName; //用户名(昵称)
private String sex; //性别
private String education; //学历
private String birthday; //生日
private String telephone; //电话
private String[] interest; //兴趣爱好
private String remark; //备注
private String utype; //权限: 管理员/普通用户
4.步骤4:创建Dao,service,servlet
public class UserDao {
//成员位置 指定xml路径
public static final String PATH="D:/javaweb1_ums.xml";
}
public class UserService {
//成员位置,初始化一个UserDao,防止每个方法都创建一次的麻烦
//将来UserService进行创建,对应一个UserDao,而不是多个Service对应一个Dao。不加static
private UserDao userDao = new UserDao();
}
@WebServlet({"/user"})
public class UserServlet extends BaseServlet {
private UserService userService = new UserService();
}
5,步骤5:配置并启动tomcat
2,UMS-查询所有【阶段1】
2.1:需求说明
2.2:需求分析
分析:
关键点:
1、XmlUtils.readAll
2、request域对象进行数据保存
3、请求转发
4、java脚本 <% %>
流程图:
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
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
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
[外链图片转存中…(img-YZlDLs3X-1715231511335)]
[外链图片转存中…(img-GrrMHiPy-1715231511336)]
[外链图片转存中…(img-m7kSdFry-1715231511336)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新