上传图片后,图片的查找路径
E:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web42\upload
一、文件上传
需要用到的文件:
1、addNewsDetail
这里,method必须是post;还必须要加上enctype=”multipart/form-data”;
2、addNewsDetailSubmit
3、newsDetailList
要写绝对路径<%=request.getContextPath()%>
其次有三处需要修改
①。function的url地址加/web42/
②。添加
③、<%=nd.getTitle() %>
4、查看newsDetailView
5.newsDetailList
1、addNewsDetail
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="addNewsDetailSubmit.jsp" method="post" enctype="multipart/form-data">新闻类别:<select name="categoryId"><option value="1">国内</option><option value="2">国际</option><option value="3">娱乐</option><option value="4">军事</option><option value="5">财经</option><option value="6">天气</option></select><br/>新闻标题:<input type="text" name="title"><br/>新闻摘要:<input type="text" name="summary"><br/>新闻内容:<textarea rows="20" cols="40" name="content"></textarea><br/>新闻图片:<input type="file" name="picPath"><br/><input type="submit" value="提交"></form></body></html>
2、addNewsDetailSubmit
<%@page import="java.io.File"%><%@page import="java.util.Iterator"%><%@page import="org.apache.commons.fileupload.FileItem"%><%@page import="java.util.List"%><%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%><%@page import="org.apache.commons.fileupload.FileItemFactory"%><%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%><%@page import="java.util.Date"%><%@page import="cn.bdqn.services.impl.NewsServicesImpl"%><%@page import="cn.bdqn.pojo.NewsDetail"%><%@page import="cn.bdqn.services.NewsServices"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");NewsDetail nd=new NewsDetail();//文件上传的写法 进行判断是否是文件上传的表单提交方式boolean isMultipart=ServletFileUpload.isMultipartContent(request);if(isMultipart){//创建的硬盘文件工厂FileItemFactory factory=new DiskFileItemFactory();//Servle文件上传对象ServletFileUpload upload = new ServletFileUpload(factory);//解析request对象,返回list集合List<FileItem> items = upload.parseRequest(request);Iterator<FileItem> it = items.iterator();//遍历list 获得表单中的没一个提交元素while(it.hasNext()){FileItem item=it.next();//如果item.isFormField() true,是普通表单对象;false是文件上传表单对象if(item.isFormField()){//表单元素名称String filedName=item.getFieldName();if(filedName.equals("categoryId")){nd.setCategoryId(Integer.parseInt(item.getString()));}else if(filedName.equals("title")){nd.setTitle(item.getString("UTF-8"));}else if(filedName.equals("summary")){nd.setSummary(item.getString("UTF-8"));}else if(filedName.equals("content")){nd.setContent(item.getString("UTF-8"));}}else{//获得文件名String fileName=item.getName();if(fileName!=null && !fileName.equals("")){//创建文件对象File fullFile =new File(fileName);//上传路径在哪String uploadFilePath=request.getSession().getServletContext().getRealPath("upload/");//如果文件夹不存在;自动创建文件夹File saveDir= new File(uploadFilePath);if(!saveDir.exists()){saveDir.mkdir();}//创建一个最终上传的文件对象,上传路径和文件名File saveFile = new File(uploadFilePath,fullFile.getName());//item往savaFile里写item.write(saveFile);//传入全路径或者文件名nd.setPicPath(fullFile.getName());}}}}String categoryId=request.getParameter("categoryId");String title=request.getParameter("title");String summary=request.getParameter("summary");String content=request.getParameter("content");NewsServices ns=new NewsServicesImpl();// NewsDetail nd=new NewsDetail();// nd.setCategoryId(Integer.parseInt(categoryId));// nd.setTitle(title);// nd.setSummary(summary);// nd.setContent(content);nd.setAuthor("admin");nd.setCreateDate(new Date());nd.setModifyDate(new Date());int i=ns.insert(nd);if(i>0){//成功跳转到列表页response.sendRedirect(request.getContextPath()+"/news/newsDetailList.jsp");}else{//失败跳转到error页response.sendRedirect(request.getContextPath()+"/web42/news/error.jsp");}%></body></html>
3、newsDetailList
<%@page import="cn.bdqn.pojo.NewsDetail"%><%@page import="java.util.List"%><%@page import="cn.bdqn.services.impl.NewsServicesImpl"%><%@page import="cn.bdqn.services.NewsServices"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><style>td{border:black solid 1px}</style><script type="text/javascript">function deleteNews(id){var url="/web42/news/deleteNewsDetail.jsp?id="+id;var f=confirm("是否确认删除");if(f){location.href=url;}}</script><jsp:useBean id="ns" class="cn.bdqn.services.impl.NewsServicesImpl"></jsp:useBean><body><a href="<%=request.getContextPath()%>/news/addNewsDetail.jsp">添加</a><table style="border:black solid 1px;border-collapse: collapse;"><tr><td>id</td><td>标题</td><td colspan="2">操作</td></tr><%//NewsServices ns=new NewsServicesImpl();List<NewsDetail> list=ns.getNewsDetailList();for(int i=0;i<list.size();i++){NewsDetail nd=list.get(i);%><tr><td><%=nd.getId() %></td><td><a href="<%=request.getContextPath() %>/news/newsDetailView.jsp?id=<%=nd.getId() %>"><%=nd.getTitle() %></a></td><td><a href="<%=request.getContextPath() %>/news/upDateNewsDetail.jsp?id=<%=nd.getId() %>">修改</a></td><td><a href="javascript:deleteNews(<%=nd.getId() %>)">删除</a></td></tr><%}%></table></body></html>
4、查看newsDetailView
<%@page import="cn.bdqn.pojo.NewsDetail"%><%@page import="cn.bdqn.services.NewsServices"%><%@page import="cn.bdqn.services.impl.NewsServicesImpl"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%String id=request.getParameter("id");NewsServices ns=new NewsServicesImpl();//获得新闻对象NewsDetail nd=ns.getNewsDetailById(Integer.parseInt(id));//展示%><table><tr><td>新闻标题</td><td><%=nd.getTitle() %></td></tr><tr><td>新闻摘要</td><td><%=nd.getSummary()%></td></tr><tr><td>新闻内容</td><td><%=nd.getContent()%></td></tr><tr><td>新闻作者</td><td><%=nd.getAuthor()%></td></tr><tr><td>新闻图片</td><td><img src="<%=request.getContextPath()%>/upload/<%=nd.getPicPath() %>" style="width: 300px ;height:400px"></td></tr></table></body></html>
二、分页查询
需要用到的包和类
首先,在src—->util—->建立pageSupport公共类,分页支持的工具类
里面放四个变量,//当前页是多少
private int currentPageNo;
//每页显示多少条数据
private int pageSize;
//总条数
private int totalPageCount;
//一共可分的页数 private int totalPageNo;
在这里面,一共可分的页数要在get方法内计算出来。用总条数模显示多少,看是否有余数,有余数就+1
接下来,在src—-》dao—->下面的NewsDetailDaoImpl内写入两个方法
一个是:查询新闻总条数的方法
一个是:分页查询的方法
抽接口
再次,将两个方法,写入到NewsServicesImpl中
再次抽接口
最后在NewsDetailList中操作
实现换页
1、新闻类分页查询
pageSupport:
package cn.bdqn.util;//分页支持工具类public class PageSupport {//当前页是多少private int currentPageNo;//每页显示多少条数据private int pageSize;//总条数private int totalPageCount;//一共可分的页数private int totalPageNo;public int getCurrentPageNo() {return currentPageNo;}public void setCurrentPageNo(int currentPageNo) {this.currentPageNo = currentPageNo;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getTotalPageCount() {return totalPageCount;}public void setTotalPageCount(int totalPageCount) {this.totalPageCount = totalPageCount;}public int getTotalPageNo() {//需要进行计算,一共分几页//100条数据,每页显示10条,一共可分10页//101条数据,每页显示10条,一共可分11页if(totalPageCount%pageSize==0){totalPageNo=totalPageCount/pageSize;}else{totalPageNo=(totalPageCount/pageSize)+1;}return totalPageNo;}//不需要设置值,所以可以去掉set方法// public void setTotalPageNo(int totalPageNo) {// this.totalPageNo = totalPageNo;// }//}
NewsDetailDaoImpl:
//查询新闻的总条数public int getNewsDetailCount(){int result = 0;connection=getConnection();String sql="select count(1) as count from news_detail";try {pstat=connection.prepareStatement(sql);rs=pstat.executeQuery();while(rs.next()){result=rs.getInt("count");}} catch (SQLException e) {e.printStackTrace();}finally{close();}return result;}//分页查询的方法public List<NewsDetail> getNewsDetailListByPage(int currentPageNo,int pageSize){List<NewsDetail> list=new ArrayList<NewsDetail>();connection=getConnection();String sql="select * from news_detail order by createDate desc limit ?,?";try {pstat=connection.prepareStatement(sql);//currentPageNo=1,pageSize=5;x=0,y=5//currentPageNo=2,pageSize=5;x=5,y=5//currentPageNo=3,pageSize=5;x=10,y=5pstat.setInt(1,(currentPageNo-1)*pageSize);pstat.setInt(2, pageSize);rs=pstat.executeQuery();while(rs.next()){NewsDetail nd=new NewsDetail();nd.setId(rs.getInt("id"));nd.setCategoryId(rs.getInt("categoryId"));nd.setTitle(rs.getString("title"));nd.setSummary(rs.getString("summary"));nd.setContent(rs.getString("content"));nd.setPicPath(rs.getString("picPath"));nd.setAuthor(rs.getString("author"));nd.setCreateDate(new Date(rs.getTimestamp("createDate").getTime()));nd.setModifyDate(new Date(rs.getTimestamp("modifyDate").getTime()));list.add(nd);}} catch (SQLException e) {e.printStackTrace();}finally{close();}return list;}
NewsDetailDao:
抽上两个方法的接口
NewsServicesImpl:
//查询新闻的总条数public int getNewsDetailCount(){return ndd.getNewsDetailCount();}//分页查询的方法public List<NewsDetail> getNewsDetailListByPage(int currentPageNo,int pageSize){return ndd.getNewsDetailListByPage(currentPageNo, pageSize);}
NewsService:
抽以上两个方法的接口
NewsDetailList:
<%@page import="cn.bdqn.util.PageSupport"%><%@page import="cn.bdqn.pojo.NewsDetail"%><%@page import="java.util.List"%><%@page import="cn.bdqn.services.impl.NewsServicesImpl"%><%@page import="cn.bdqn.services.NewsServices"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><style>td{border:black solid 1px}#ip1{width:30px;}</style><script type="text/javascript">function deleteNews(id){var url="/web42/news/deleteNewsDetail.jsp?id="+id;var f=confirm("是否确认删除");if(f){location.href=url;}}function toJump(){var p =document.getElementById("pageJump").value;if(p==null||p==""){alert=("请输入正确页码");}else{if(isNaN(p)){alert("请输入数字");}else{var url="/web42/news/newsDetailList.jsp?pageNo="+p;location.href=url;}}}</script><jsp:useBean id="ns" class="cn.bdqn.services.impl.NewsServicesImpl"></jsp:useBean><body><a href="<%=request.getContextPath()%>/news/addNewsDetail.jsp">添加</a><table style="border:black solid 1px;border-collapse: collapse;"><tr><td>id</td><td>标题</td><td colspan="2">操作</td></tr><%//NewsServices ns=new NewsServicesImpl();//List<NewsDetail> list=ns.getNewsDetailList();String pageNo=request.getParameter("pageNo");int pageNoIndex=0;if(pageNo==null){//当前页码数pageNoIndex=1;}else{pageNoIndex=Integer.parseInt(pageNo);}//拿出工具类int pageSize=5;PageSupport ps=new PageSupport();ps.setCurrentPageNo(pageNoIndex);ps.setPageSize(pageSize);ps.setTotalPageCount(ns.getNewsDetailCount());List<NewsDetail> list=ns.getNewsDetailListByPage(pageNoIndex, pageSize);for(int i=0;i<list.size();i++){NewsDetail nd=list.get(i);%><tr><td><%=nd.getId() %></td><td><a href="<%=request.getContextPath() %>/news/newsDetailView.jsp?id=<%=nd.getId() %>"><%=nd.getTitle() %></a></td><td><a href="<%=request.getContextPath() %>/news/upDateNewsDetail.jsp?id=<%=nd.getId() %>">修改</a></td><td><a href="javascript:deleteNews(<%=nd.getId() %>)">删除</a></td></tr><%}%></table><a href="<%=request.getContextPath()%>/news/newsDetailList.jsp">首页</a> <%if(pageNoIndex!=1){ %><a href="<%=request.getContextPath()%>/news/newsDetailList.jsp?pageNo=<%=pageNoIndex-1%>">上一页</a> <%} %><%if(pageNoIndex!=ps.getTotalPageNo()){ %><a href="<%=request.getContextPath()%>/news/newsDetailList.jsp?pageNo=<%=pageNoIndex+1%>">下一页</a> <%} %><a href="<%=request.getContextPath()%>/news/newsDetailList.jsp?pageNo=<%=ps.getTotalPageNo()%>">末页</a> 第<%=pageNoIndex %>页/共<%=ps.getTotalPageNo() %>页<!--<form action="<%=request.getContextPath()%>/news/newsDetailList.jsp">跳转至:<input type="text" name="pageNo" id="ip1"><input type="submit" value="go"></form>--><input type="text" id="pageJump" size="1"><input type="button" value="GO" onclick="toJump()"></body></html>
2、用户表分页查询
newsUserList:
企业部分同上,改个名字即可
<%@page import="cn.bdqn.util.PageSupport"%><%@page import="cn.bdqn.pojo.NewsUser"%><%@page import="java.util.List"%><%@page import="cn.bdqn.services.impl.userServicesImpl"%><%@page import="cn.bdqn.services.userServices"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><style>td{border:black solid 1px}</style><script type="text/javascript">function deleteUser(id){var url="deleteNewsUser.jsp?id="+id;var f=confirm("是否确认删除");if(f){location.href=url;}}function toJump(){var p =document.getElementById("pageJump").value;if(p==null||p==""){alter("请输入正确页码");}else{if(isNaN(p)){alter("请输入数字");}else{var url="/web42/newsuser/newsUserList.jsp?pageNo="+p;location.href=url;}}}</script><body><a href="addNewsUser.jsp">添加</a><table style="border:black solid 1px;border-collapse: collapse;"><tr><td>id</td><td>姓名</td><td>邮箱</td><td>用户类型</td><td colspan="2">操作</td></tr><%userServices ns=new userServicesImpl();//List<NewsUser> list=ns.getNewsUserList();//设置当前页String pageNo=request.getParameter("pageNo");int pageNoIndex=0;if(pageNo==null){pageNoIndex=1;}else{pageNoIndex=Integer.parseInt(pageNo);}//设置显示每页多少条int pageSize=5;PageSupport ps=new PageSupport();ps.setCurrentPageNo(pageNoIndex);ps.setPageSize(pageSize);ps.setTotalPageCount(ns.getNewsUserCount());List<NewsUser> list=ns.getNewsUserListByPage(pageNoIndex, pageSize);for(int i=0;i<list.size();i++){NewsUser nu=list.get(i);%><tr><td><%=nu.getId() %></td><td><%=nu.getUserName() %></td><td><%=nu.getEmail() %></td><td><%=nu.getUserType() %></td><td><a href="upDateUser.jsp?id=<%=nu.getId() %>">修改</a></td><td><a href="javascript:deleteUser(<%=nu.getId() %>)">删除</a></td></tr><%}%></table><a href="<%=request.getContextPath()%>/newsuser/newsUserList.jsp">首页</a> <%if(pageNoIndex!=1){ %><a href="<%=request.getContextPath()%>/newsuser/newsUserList.jsp?pageNo=<%=pageNoIndex-1%>">上一页</a> <%} %><%if(pageNoIndex!=ps.getTotalPageNo()){ %><a href="<%=request.getContextPath()%>/newsuser/newsUserList.jsp?pageNo=<%=pageNoIndex+1%>">下一页</a> <%} %><a href="<%=request.getContextPath()%>/newsuser/newsUserList.jsp">末页</a> 第<%=pageNoIndex %>页/共<%=ps.getTotalPageNo() %>页<!-- 实现输入数字,直接跳转到多少页 --><!-- 第一种<form action="<%=request.getContextPath()%>/newsuser/newsUserList.jsp"><input type="text" name="pageNo" size="2"><input type="submit" value="Go"></form>--><!-- 第二种 --><input type="text" id="pageJump" size="1"><input type="button" value="Go" onclick="toJump()"></body></html>
三、富文本编辑
首先要引入富文本编辑器,再放置在有需要的位置
<!-- 引入富文本编辑器 -->><script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.12.4.min.js"></script><script type="text/javascript" src="<%=request.getContextPath() %>/js/ckeditor/ckeditor.js"></script>
新闻内容:<!-- 富文本编辑器 --><textarea rows="20" cols="40" name="content" class="ckeditor"></textarea><br/>
具体代码:例如在新闻列表添加这里
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><!-- 引入富文本编辑器 -->><script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery-1.12.4.min.js"></script><script type="text/javascript" src="<%=request.getContextPath() %>/js/ckeditor/ckeditor.js"></script><body><form action="addNewsDetailSubmit.jsp" method="post" enctype="multipart/form-data">新闻类别:<select name="categoryId"><option value="1">国内</option><option value="2">国际</option><option value="3">娱乐</option><option value="4">军事</option><option value="5">财经</option><option value="6">天气</option></select><br/>新闻标题:<input type="text" name="title"><br/>新闻摘要:<input type="text" name="summary"><br/>新闻内容:<!-- 富文本编辑器 --><textarea rows="20" cols="40" name="content" class="ckeditor"></textarea><br/>新闻图片:<input type="file" name="picPath"><br/><input type="submit" value="提交"></form></body></html>
