后台添加图书
后台要添加图书的时候,应该说明图书的类型是什么。
要想在显示添加图书的页面上知道全部类型的id,就要经过Servlet把类型的集合传送过去
绑定链接
<ahref="${pageContext.request.contextPath}/BookServlet?method=addUI"target="body">添加图书</a><br>
传送类型集合的Servlet
Stringmethod=request.getParameter("method");
BussinessServiceImplservice=newBussinessServiceImpl();
if(method.equals("addUI")){
List<Category>list=service.getAllCategory();
request.setAttribute("list",list);
request.getRequestDispatcher("/background/addBook.jsp").forward(request,response);
}
显示JSP页面
<formaction="${pageContext.request.contextPath}/BookServlet?method=add"method="post"enctype="multipart/form-data">
<tableborder="1px"width="30%">
<tr>
<td> 图书名称:</td>
<td><inputtype="text"name="name"></td>
</tr>
<tr>
<td> 作者:</td>
<td><inputtype="text"name="author"></td>
</tr>
<tr>
<td> 图书价钱:</td>
<td><inputtype="text"name="price"></td>
</tr>
<tr>
<td>类型:</td>
<td>
<selectname="category_id">
<c:forEachitems="${list}"var="category">
<optionvalue="${category.id}">${category.name}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td> 上传图片</td>
<td><inputtype="file"name="image"></td>
</tr>
<tr>
<td>详细描述</td>
<td><textareaname="description"></textarea></td>
</tr>
<tr>
<td>
<inputtype="submit"value="提交">
<inputtype="reset"value="重置">
</td>
</tr>
</table>
</form>
处理表单数据Servlet
elseif(method.equals("add")){
//上传文件和普通数据分割开,封装到Book对象上
Bookbook=uploadData(request);
book.setId(WebUtils.makeId());
service.addBook(book);
request.setAttribute("message","添加图书成功");
request.getRequestDispatcher("/message.jsp").forward(request,response);
}
- uploadData()方法代码
privateBookuploadData(HttpServletRequestrequest){
Bookbook=newBook();
try{
//1.得到解析器工厂
DiskFileItemFactoryfactory=newDiskFileItemFactory();
//2.得到解析器
ServletFileUploadupload=newServletFileUpload(factory);
//设置编码
upload.setHeaderEncoding("UTF-8");
//为上传表单,则调用解析器解析上传数据
List<FileItem>list=upload.parseRequest(request); //FileItem
//遍历list,得到用于封装第一个上传输入项数据fileItem对象
for(FileItemitem:list){
if(item.isFormField()){
//得到的是普通输入项
Stringname=item.getFieldName(); //得到输入项的名称
Stringvalue=item.getString("UTF-8");
//使用BeanUtils封装数据
BeanUtils.setProperty(book,name,value);
}else{
//得到上传输入项
//得到上传文件名全路径
Stringfilename=item.getName();
//截取文件名
filename=filename.substring(filename.lastIndexOf("\\")+1);
InputStreamin=item.getInputStream(); //得到上传数据
intlen=0;
bytebuffer[]=newbyte[1024];
//如果没有这个目录,就创建它
Stringsavepath=this.getServletContext().getRealPath("/image");
Filefile=newFile(savepath);
if(!file.exists()){
file.mkdir();
}
FileOutputStreamout=newFileOutputStream(savepath+"\\"+filename);
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
//设置图片的名字
book.setImage(filename);
in.close();
out.close();
//关闭临时文件
item.delete();
}
}
}catch(Exceptione){
e.printStackTrace();
}
returnbook;
}
- 效果:
后台显示图书模块
由于我们用的是分页技术,所以我们导入之前写过的Page类和jsp吧.....这些代码可以在我分类的代码库中找到
绑定超链接
<ahref="${pageContext.request.contextPath}/BookServlet?method=look"target="body">查看图书</a>
Servlet处理请求
elseif(method.equals("look")){
StringcurrentPageCount=request.getParameter("currentPageCount");
Pagepage=service.getPageData(currentPageCount);
request.setAttribute("page",page);
request.getRequestDispatcher("/background/listBook.jsp").forward(request,response);
}
显示图书JSP页面
Servlet端传过来的是Page对象,而不是list集合
可以根据记载在Book对象的图片名称,弄一个超链接,超链接指向服务端的图片,这样就可以查看图片了!
<c:iftest="${empty(page.list)}">
暂时还没有任何图书哦
</c:if>
<c:iftest="${!empty(page.list)}">
<tableborder="1px">
<tr>
<td>书名</td>
<td>作者</td>
<td>价钱</td>
<td>描述</td>
<td>图片</td>
<td>操作</td>
</tr>
<c:forEachvar="book"items="${page.list}">
<tr>
<td>${book.name}</td>
<td>${book.author}</td>
<td>${book.price}</td>
<td>${book.description}</td>
<td><ahref="${pageContext.request.contextPath}/image/${book.image}">查看图片</a></td>
<td>
<ahref="#">删除</a>
<ahref="#">修改</a>
</td>
</tr>
</c:forEach>
</table>
<br>
<jsp:include page="page.jsp"/>
</c:if>
效果: