Fork me on GitHub

javaweb_forDelete

继续javaweb_forQuery的内容,本文讲解删除操作

对列表中对象进行删除操作

增加删除的超链

指向地址admin_category_delete,并传递该对象的id过去

1
2
3
4
5
6
7
8
/*在listCategory.jsp文件中 */
<td>
<a deleteLink="true"
href="admin_category_delete?id=${c.id}">
<span class=" glyphicon glyphicon-trash">
</span>
</a>
</td>

用于删除前的确认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*在adminHeader.jsp文件中 */
/*对所有的删除链接进行监听 */
$(function(){
$("a").click(function(){
var deleteLink = $(this).attr("deleteLink");
console.log(deleteLink);
if("true"==deleteLink){
var confirmDelete = confirm("确认要删除");
if(confirmDelete)
return true;
return false;

}
});
})

[延伸阅读]有关jsp的知识可以参考JSP简介|菜鸟教程,简要 :

  • 使用jsp将java代码嵌入html网页中。
  • 网络服务器需要一个 JSP 引擎,也就是一个容器来处理 JSP 页面。容器负责截获对 JSP 页面的请求。

JSP 容器和 JSP 文件

  • Web服务器使用JSP来创建网页的过程

    • 就像其他普通的网页一样,浏览器发送一个 HTTP 请求给服务器
    • Web 服务器识别出这是一个对 JSP 网页的请求,并且将该请求传递给 JSP 引擎。通过使用 URL或者 .jsp 文件来完成
    • JSP 引擎从磁盘中载入 JSP 文件,然后将它们转化为 Servlet。这种转化只是简单地将所有模板文本改用 println() 语句,并且将所有的 JSP 元素转化成 Java 代码
    • JSP 引擎将 Servlet 编译成可执行类,并且将原始请求传递给 Servlet 引擎
    • Web 服务器的某组件将会调用 Servlet 引擎,然后载入并执行 Servlet 类。在执行过程中,Servlet 产生 HTML 格式的输出并将其内嵌于 HTTP response 中上交给 Web 服务器
    • Web 服务器以静态 HTML 网页的形式将 HTTP response 返回到您的浏览器中
    • 最终,Web 浏览器处理 HTTP response 中动态产生的HTML网页,就好像在处理静态网页一样

      webServer2jsp

CategoryController中增加delete方法

1
2
3
4
5
6
7
8
@RequestMapping("admin_category_delete")
public String delete(int id,HttpSession session) throws IOException{
categoryService.delete(id);
File imageFolder=new File(session.getServletContext().getRealPath("img/category"));
File file = new File(imageFolder,id+".jpg");
file.delete();
return "redirect:/admin_category_list";
}
  • 接受id注入 ,categoryService删除数据
  • 根据 session定位到图片的位置(注:当前图片存入
    /../eclipse_projects/.metadata/.plugins/org.eclipse.wst.server.core/
    tmp0/wtpwebapps/tmall_ssm/img/category/),删除图片
  • 客户端重定向跳转到admin_category_list页面

[扩展阅读]Forward与Redirect的区别,简要理解 :

  • forward是服务器直接访问URL,在浏览器不知情时接收内容,浏览器地址栏 仍然是原来的地址 ,效率高 ,并可共享request里的数据
  • redirect是服务器发送302状态码,告诉浏览器重新请求那个地址,所以地址栏显示新的URL,效率低,并不存在 request传递概念
  • 两者的内部机制有很大的区别:
    1. 请求转发只能将请求转发给同一个WEB应用中的组件
      重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL
    2. 重定向可以看见目标页面的URL
      转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的
    3. 请求响应调用者和被调用者之间共享相同的request对象和response对象
      重定向调用者和被调用者属于两个独立访问请求和响应过程。
    4. 重定向跳转后必须加上return,要不然页面虽然跳转了, 但是还会执行跳转后面的语句
      转发是执行了跳转页面,下面的代码就不会在执行了
    5. 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
    6. 转发调用的是HttpServletRequest对象中的方法,重定向调用的是HttpServletResponse对象中的方法
1
2
3
4
5
6
7
8
9
10
11
12
//在doGet()方法中if-else判断 ,true则转发,false则重定向

if("admin".equals(username) && "123".equals(password))
//转发
request.getRequestDispatcher("/success.jsp").forward(request,,response);
else
//重定向
response.sendRedirect("imooc_test/fail.jsp");

```

[注]转发时可以使用request.setAttribute("username","Harry");将数据传递给转发目的页面,为什么能传递参考以上步骤3。重定向时只能用Session或者Application带数据。

//Application方式:
//转发前的servlet
ServletContext sc = request.getServletContext();
sc.setAttribute(“goods”,”娃娃”);
//Todo:转发代码

//转发后的servlet
String goods = (String)application.getAttribute(“goods”);
`

-------------The End-------------