1.<jsp:forward page="list.jsp"/>
相当于
- <%
- request.getRequestDispatcher("list.jsp").forward(request, response);
- %>
2、<jsp:useBean class="anni.ContactDao" id="contactDao" scope="application"/>
anni.ContactDao是一个封装了数据库操作的bean
相当于
- <%
- anni.ContactDao contactDao = (anni.ContactDao) application.getAttribute("contactDao");
- if (contactDao == null) {
- contactDao = new anni.ContactDao();
- application.setAttribute("contactDao", contactDao);
- }
- %>
在上面的代码中只是为了创建一个对象的实例,为什么不用new呢,那要比这样写的代码少许多,也更容易理解,为什么我们还要执意使用jsp:useBean?
注意一下标签中的scope="application",application正是我们介绍过的四个作用域之一
我们先从application中获得contactDao对应的对象,然后判断得到的是否为null,如果为null说明此变量还没有初始化,这时就要使用new创建一个对象实例并放入application中。最后我们得到的就是这个contactDao实例。
3、create.jsp包含表单提交的信息
save.jsp表单提交信息处理
Contact是对应的实体bean名称里面装有对应属性的get,set方法
- <jsp:useBean class="anni.ContactDao" id="contactDao" scope="application"/>
- <jsp:useBean class="anni.Contact" id="contact"/>
- <jsp:setProperty name="contact" property="*"/>
- <%
- contactDao.save(contact);
- response.sendRedirect("list.jsp");
- %>
相当于
先从application中取出contactDao,再创建一个contact。在创建contact的时候没有指定scope,默认情况下只会使用new创建这个局部变量,不会对任何作用域产生影响。jsp:setProperty是新事物了,它的作用就是为某个javabean设置数据。之前我们已经使用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")); contactDao.save(contact);response.sendRedirect("list.jsp");