发现这个界面所有的它的左侧和上侧都是一样的,基本上所有的其他jsp都是直接include标签引入头和尾部两部分呢,这好像是是一种很不错的设计界面的方式,可以学习一下。
下面我们继续做下一个功能,修改密码的功能
我们来到这个界面pwdmodify.jsp
看它的最后一行有一个什么:
<script type=“text/javascript” src="${pageContext.request.contextPath }/js/pwdmodify.js"></script>
再提醒一下,引入js必须是这样,不能使用自闭和标签
所以我们看到这个js界面去。
首先我们使用从底层向上层写,先写dao层修改密码的部分,然后service层,最后才是servlet。
由于验证原始密码使用到了ajax,所以先用ajax验证原始密码是否正确。这个异步请求的servlet中的方法不能只返回前端数据,后端也要保存.
我们的数据交换使用json,使用阿里的Fastjson转换工具
网址:https://mvnrepository.com/artifact/com.alibaba/fastjson/1.2.79
;
这个地方一个问题耽误了很久,就是一个Ajax的问题,一开始自己返回的时候这样写:
writer.write("{'result':'true'}");
然后Ajax请求一直失败,没办法使用了Fastjson工具类,发现它的字符串是这样的:
{"result":"true"},然后改了代码:
writer.write("{\"result\":\"error\"}");就可以了,也可直接使用工具类进行转换
Ajax请求会不会走过滤器?
会的。
下面做用户管理的页面,又有一个问题耽误了很久
request.getRequestDispatcher("/jsp/userlist.jsp").forward(request,response);
response.sendRedirect(path+"/jsp/userlist.jsp");
这个路径我上面加上去path就会出错,应该是请求转发就会带上项目名了吧。重定向不会。
查询用户,同时进条件查询,发现前端还有年龄,写了一个由出生日期计算年龄的工具类
同时因为条件查询,要注意sql语句的编写。
package com.dongmu.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class GetAge {
public static int getAge(String birthday){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int age = 0;
Calendar birth = Calendar.getInstance();
Calendar now = Calendar.getInstance();
now.setTime(new Date());
try {
birth.setTime(sdf.parse(birthday));
if (birth.after(now)) {
return 0;
}else {
age = now.get(Calendar.YEAR)-birth.get(Calendar.YEAR);
if (now.get(Calendar.MONTH)<birth.get(Calendar.MONTH)){
age--;
}else if (now.get(Calendar.MONTH)==birth.get(Calendar.MONTH)){
if (now.get(Calendar.DAY_OF_MONTH)<birth.get(Calendar.DAY_OF_MONTH)){
age--;
}
}
}
return age;
} catch (ParseException e) {
e.printStackTrace();
}
// calendar.
return 0;
}
}
下面继续做ajax响应下一页等功能,这个要考虑在每种情况下的下一页,不能因为按下一页导致全部查询。只有这里有点麻烦。
后面就是基本相同的内容。理解三层架构即可。