1. CRUD是Create(创建)、Read(读取)、Update(更新)和Delete(删除)的缩写,一般应用有这四项也就足够了。 我们这里的例子是对联系人信息进行CRUD操作。
2. javabean是把一些操作集合在一起写成一个java类,想要进行什么操作直接调用这个类里的方法就行。
咱们这里使用javabean的地方有两处,一个是链接数据库并进行CRUD操作,另一个把每条数据都写 成一个类。
对于CRUD应用,有一些大家默认的命名来表示不同的操作。
1. list.jsp。读取所有信息并显示到页面上,这个是CRUD中Read(读取)。
2. create.jsp。进入添加联系信息的页面,等待用户输入信息。 save.jsp。接收用户提交的信息,添加到数据库中。 这两步对应CRUD中的Create(创建)。
3. edit.jsp。进入修改联系信息的页面,等待用户修改信息。 update.jsp。接收用户提交的信息,修改数据库中对应的信息。 这两步对应CRUD中的Update(更新)。
4. remove.jsp。删除用户选择的信息。这步对应CRUD中的Delete(删除)。
JSP页面跳转
<jsp:forward page="list.jsp"/>
初始化Bean对象
<jsp:useBean class="anni.ContactDao" id="contactDao" scope="application"/>
它会先去scope定义的作用域application中取得contactDao对应的对象,这个contactDao正是标签中定义的id,转换的对象类型则是标签中class属性的值。
我们每获得一条信息就把它放入pageContext中。之所以这样做,是为了在下面使用el表达式显示信息。
el表达式的一个特点就是必须放到作用域里才能调用,如果使用Contact contact = (Contact) list.get(i);而不放到pageContext中,后面的${contact.username}就无法找到contact了。
这里还要提及el表达式的进一步用法,${contact.username}实际上得到的是contact.getUsername()返回的结果。这里有一个默认的转换规则,假设有一个getUsername()方法,我们先要去掉开头的get,然后将get后的那个字母小写,得到的username就是与el表达式中对应的部分。
有趣的是${contact.username}仅仅与getUsername()方法对应,无论contact有没有String username这个变量。如果我们想使用${contact.nameAndSex},只要写一个public String getNameAndSex()方法返回我们想要的数据即可,不需要添加String nameAndSex;变量。
jsp:setProperty是新事物了,它的作用就是为某个javabean设置数据。
<jsp:setProperty name="contact" property="*"/>
之前我们已经使用jsp:useBean创建了一个contact实例,现在我们通过name="contact"设置这个实例的数据,property可以指定一个属性,比如property="username",这个jsp动作实际上与下面的代码等价
contact.setUsername(request.getParameter("username"));
contact.setSex(request.getParameter("sex"));
contact.setEmail(request.getParameter("email"));
contact.setQq(request.getParameter("qq"));
contact.setDescn(request.getParameter("descn"));
只要它们的名称与contact中的方法对应(这次是set开头的方法了),jsp:setProperty就可以自动为它们进行赋值,转换的规则与get的方法名是类似的
点击“修改”的时候,id便附加到url后了。
<a href="edit.jsp?id=${contact.id}">修改</a>
edit.jsp中获得id的值,根据id从contactDao获得对应的联系信息contact,再将contact放到pageContext供后面的el表达式使用。
<jsp:useBean class="anni.ContactDao" id="contactDao" scope="application"/>
<%
String id = request.getParameter("id");
Contact contact = contactDao.get(Long.parseLong(id));
pageContext.setAttribute("contact", contact);
%>