新增图书页封页显示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 初始化监听器 package com.zhou.web.listener; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import com.zhou.web.domain.Books; import com.zhou.web.domain.Category; import com.zhou.web.domain.User; /** * InitServletContextListener 启动程序时,初始化数据 * @author 25677 * */ // 使用注解的方式对监听器进行配置 @WebListener public class InitServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } @Override public void contextInitialized(ServletContextEvent event) { //1 .初始化账户列表参数 // 创建一个list集合用来保存用户 List<User> userList = new ArrayList<User>(); /* * 假设管理员账号比较隐私 不允许别人创建等操作 我们现在web.xml中配置好管理员账号 * 然后再程序初始化的时候获取到保存到list集合中,根据用户登录时输入的数据进行比较 */ String account = event.getServletContext().getInitParameter( "account" ); String password = event.getServletContext().getInitParameter( "password" ); // 创建User对象 并将获得的管理员输入填入其中 User user = new User(account,password); // 将user对象填入userlist中 userList.add(user); // 将userList存入ServletContext全局对象中 event.getServletContext().setAttribute( "userList" , userList); //2 .初始化图书分类列表参数 // 创建默认分类数据 Category category = new Category( "ca0001" , "计算机类" ); // 创建集合 List<Category> categoryList = new ArrayList<Category>(); // 往集合中添加数据分类 categoryList.add(category); // 将集合对象categoryList存入ServletContext全局对象中 event.getServletContext().setAttribute( "categoryList" , categoryList); //3 .初始化图书列表 Books books = new Books( "book0001" , "Java基础" , "计算机类" ,29D, "img/g1.jpg" , "第一本" ); // 创建集合 List<Books> booksList= new ArrayList<Books>(); // 往集合中添加数据分类 booksList.add(books); // 将集合对象booksList存入ServletContext全局对象中 event.getServletContext().setAttribute( "booksList" , booksList); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.zhou.web.service; import java.util.List; import com.zhou.web.domain.Books; import com.zhou.web.domain.Category; import com.zhou.web.domain.User; /** * UserService 处理业务逻辑的接口类 * @author 25677 * */ public interface UserService { // 处理登录的业务逻辑接口 public User login(List<User> listUser, User user); // 处理添加分类逻辑的业务接口 public boolean JudgeCategory(List<Category> categoryList, Category category); // 处理删除分类逻辑的业务接口 public void DeleteCategory(List<Category> categoryList, String categoryId); // 处理添加图书逻辑的业务接口 public Boolean JudgeBooks(List<Books> booksList, Books books); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.zhou.web.service.impl; import java.util.Iterator; import java.util.List; import com.zhou.web.domain.Books; import com.zhou.web.domain.Category; import com.zhou.web.domain.User; import com.zhou.web.service.UserService; /** * UserServiceImpl 处理业务逻辑接口的实现类 * @author 25677 * */ public class UserServiceImpl implements UserService { /** * 登入业务逻辑 */ @Override public User login(List<User> listUser, User user) { for (User users: listUser) { if (users.getUser().equals(user.getUser()) && users.getPassword().equals(user.getPassword())) { return users; } } return null; } /** * 处理添加分类的业务逻辑 * true 表示添加成功 */ @Override public boolean JudgeCategory(List<Category> categoryList, Category category) { //如果分类名或者分类id存在一样相同我们都认为添加失败 for (Category c: categoryList) { if (c.getId().equals(category.getId()) || c.getCategoryName().equals(category.getCategoryName())) { return false ; } } //不存在相同的 则将新的分类添加到集合 categoryList.add(category); return true ; } /** * 处理删除图书分类的业务逻辑 */ @Override public void DeleteCategory(List<Category> categoryList, String categoryId) { /* * for(Category category: categoryList) { * if(category.getId().equals(categoryId)) { categoryList.remove(category); } } */ Iterator<Category> iterator = categoryList.iterator(); while (iterator.hasNext()) { Category c = iterator.next(); if (c.getId().equals(categoryId)) { iterator. remove (); return ; } } } /** * 处理添加图书的业务逻辑 * Boolean ture 添加成功 false 添加失败 */ @Override public Boolean JudgeBooks(List<Books> booksList, Books books) { for (Books book : booksList) { //存在相同id的图书 if (book.getBookId().equals(books.getBookId())) { return false ; } } //不存在相同的图书 则添加 booksList.add(books); return true ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package com.zhou.web.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zhou.web.domain.Books; import com.zhou.web.service.UserService; import com.zhou.web.service.impl.UserServiceImpl; import com.zhou.web.util.UploadBookImgUtil; /** * AddBooksServlet 添加图书的控制器 */ @WebServlet( "/AddBooksServlet" ) public class AddBooksServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收数据 String bookId = request.getParameter( "bookId" ); // 图书编号 String bookName = request.getParameter( "bookName" ); // 图书名 String categoryId = request.getParameter( "categoryId" ); // 图书分类 //Double bookPrice = Double.valueOf(request.getParameter( "bookPrice" )); // 图书价格 Double bookPrice = Double.parseDouble(request.getParameter( "bookPrice" )); // 图书价格 //String bookPic = request.getParameter( "bookPic" ); // 图书封面路径 String remarks = request.getParameter( "remarks" ); // 图书备注 System.out.println( "bookID" + bookId + " bookNmae:" + bookName + " categoryID:" + categoryId + " bookPrice: " + bookPrice + " remarks:" + remarks); // 将图书封面存入到服务其中 并获取到服务器中的地址 String url = UploadBookImgUtil.uploadImg(request,response); System.out.println(url); // 封装数据 Books books = new Books(bookId,bookName,categoryId,bookPrice,url,remarks); // 处理数据 UserService userService = new UserServiceImpl(); // 获取在初始化时存入在servletContext全局上下文中存在booksList集合 List<Books> booksList = (List<Books>) request.getServletContext().getAttribute( "booksList" ); // 调用方法判断新添加的图书是否已经在图书集合中存在: 判断条件为图书编号不同即可 Boolean addFlag = userService.JudgeBooks(booksList,books); // 显示数据 if (addFlag) { // 添加成功 重定向到图书信息管理页 response.sendRedirect(request.getContextPath() + "/page/bookList.jsp" ); } else { // 添加失败 // 请求转发到增加图书addBook.jsp 并设置flag 提示失败 request.getRequestDispatcher( "page/addBook.jsp?flag=0" ).forward(request,response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package com.zhou.web.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zhou.web.domain.Category; import com.zhou.web.service.UserService; import com.zhou.web.service.impl.UserServiceImpl; /** * AddCategoryServlet 添加分类的控制器 */ @WebServlet( "/AddCategoryServlet" ) public class AddCategoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收数据 String categoryId = request.getParameter( "categoryId" ); // 图书分类ID String categoryName = request.getParameter( "categoryName" ); // 分类名称 // 封装数据 Category category = new Category(categoryId,categoryName); // 处理结果 UserService userService = new UserServiceImpl(); // 获取当前图书分类集合categoryList List<Category> categoryList =(List<Category>) request.getServletContext().getAttribute( "categoryList" ); // 调用方法判断是否已经有相同的分类或者分类名称 boolean flagAdd = userService.JudgeCategory(categoryList,category); // 显示数据 if (flagAdd) { // 添加成功 重定向到图书分类管理页面 response.sendRedirect(request.getContextPath() + "/page/categoryList.jsp" ); } else { // 添加失败 // 设置失败标识 request.setAttribute( "flag" , "0" ); System.out.println( "失败 重复" ); request.getRequestDispatcher( "/page/addCategory.jsp" ).forward(request, response); //response .sendRedirect(request.getContextPath() + "/page/addCategory.jsp" ); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.zhou.web.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zhou.web.domain.Category; import com.zhou.web.service.UserService; import com.zhou.web.service.impl.UserServiceImpl; /** * DeleteCategoryServlet 删除图书分类的控制 */ @WebServlet( "/DeleteCategoryServlet" ) public class DeleteCategoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收数据 String categoryId = request.getParameter( "categoryId" ); // 处理数据 UserService userService = new UserServiceImpl(); // 获取图书分类列表 List<Category> categoryList = (List<Category>) request.getServletContext().getAttribute( "categoryList" ); // 删除图书 userService.DeleteCategory(categoryList,categoryId); // 显示结果 // 重定向到图书分类管理页面 response.sendRedirect(request.getContextPath() + "/page/categoryList.jsp" ); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package com.zhou.web.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zhou.web.domain.User; import com.zhou.web.service.UserService; import com.zhou.web.service.impl.UserServiceImpl; /** * LonginServlet 登入注册的判断的控制器 */ @WebServlet( "/LonginServlet" ) public class LonginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收验证码并进行校验 String verifyCode = request.getParameter( "verifyCode" ); // 先获取session中保存的验证码的信息 String code =(String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); //equalsIgnoreCase 忽略大小写比较 if (verifyCode==null || !verifyCode.equalsIgnoreCase(code)) { request.setAttribute( "msg" , "验证码输入不正确!" ); request.getRequestDispatcher( "/login.jsp" ).forward(request, response); //response .sendRedirect(request.getContextPath()+ "/login.jsp" ); return ; // 结束下面的代码 } // 接收用户名与密码并判断 String username = request.getParameter( "username" ); String password = request.getParameter( "password" ); // 封装数据 User user = new User(username,password); // 处理数据 UserService userService = new UserServiceImpl(); // .获取全局域ServletContext中用户集合 并调用业务逻辑处理接口中的方法进行判断 List<User> listUser =(List<User>) request.getServletContext().getAttribute( "userList" ); User existUser = userService.login(listUser, user); if (existUser == null) { request.setAttribute( "msg" , "用户名或密码错误!" ); request.getRequestDispatcher( "/login.jsp" ).forward(request, response); } else { // 登录成功 再session设置一个标志表明用户已经登录 request.getSession().setAttribute( "loginName" , existUser); // 重定向到首页 response.sendRedirect(request.getContextPath()+ "/page/categoryList.jsp" ); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
47
收起
正在回答
8回答
同学你好,检查同学代码,发现同学搞混了一个知识点:
url是上传文件的具体地址,在FileOutputStream中使用,而urlPath是上传成功后的服务器图片地址,将这个urlPath地址赋值给book中的地址属性。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
jia_蛙
2019-12-12 15:02:25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | package com.zhou.web.util; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.zhou.web.domain.Books; /** * UploadBookImg 将图片存入服务器的工具类 * @author 25677 * */ public class UploadBookImgUtil { public static Books uploadImg(HttpServletRequest request, HttpServletResponse response) throws IOException { String urlPath = "" ; // 图片地址 Books books = new Books(); //1 .创建磁盘文件项工厂 (如果我们使用空构造的话,缓存区和临时文件存放的位置都会有一个默认值) DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //2 .创建核心解析类 (构造方法需要传入一个磁盘文件项工厂) ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //3 .解析请求对象,将请求分成几个部分FileItem文件项:其中包括普通项、文件上传项 try { List<FileItem> list = fileUpload.parseRequest(request); //4 .遍历集合获得每个部分的对象 for (FileItem fileItem:list) { String name = "" ; // 普通项的名称 String value = "" ; // 普通项的值 // 判断时普通项还是文件上传项 if (fileItem.isFormField()) { // 普通项目 // 获取普通项的名称 name = fileItem.getFieldName(); // 获取普通项的值 value = fileItem.getString( "UTF-8" ); if (name.equals( "bookId" )) { books.setBookId(value); } else if (name.equals( "bookName" )) { books.setBookName(value); } else if (name.equals( "categoryId" )) { books.setBookCategory(value); } else if (name.equals( "bookPrice" )) { books.setBookPrice(Double.parseDouble(value)); } else if (name.equals( "remarks" )) { books.setBookNotes(value); } else if (name.equals( "bookPic" )) { books.setBookPath(value); } } else { // 文件上传项目 // 获得文件的名称 String fileName = fileItem.getName(); // 适用工具类生成唯一的文件名 String uuidFileName = UploadUtils.getUuidFileName(fileName); // 获得文件的输入流 相当于获取文件具体的内容 InputStream is = fileItem.getInputStream(); // 设置需要将文件写入到服务器的某个路径 // 服务器内图片的地址 urlPath = request.getContextPath() + "/uploadImg/" + uuidFileName; // 创建输出流与输出流进行对接: OutputStream os = new FileOutputStream(urlPath); int len = 0; byte[] b = new byte[1024]; while ((len = is. read (b)) != -1) { os.write(b,0,len); } is.close(); os.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } // 将服务器中的图片地址重新设置 books.setBookPath(urlPath); // 将图片地址返回回去 return books; } } |
1 | 系统找不到指定的路径。 现在图片也上传不到服务器的这个uploadImg这个文件中了 |
jia_蛙
2019-12-12 12:12:51
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.zhou.web.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zhou.web.domain.Books; import com.zhou.web.service.UserService; import com.zhou.web.service.impl.UserServiceImpl; import com.zhou.web.util.UploadBookImgUtil; /** * AddBooksServlet 添加图书的控制器 */ @WebServlet( "/AddBooksServlet" ) public class AddBooksServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 使用工具类接收并封装数据 Books books = UploadBookImgUtil.uploadImg(request,response); // 处理数据 UserService userService = new UserServiceImpl(); // 获取在初始化时存入在servletContext全局上下文中存在booksList集合 List<Books> booksList = (List<Books>) request.getServletContext().getAttribute( "booksList" ); // 调用方法判断新添加的图书是否已经在图书集合中存在: 判断条件为图书编号不同即可 Boolean addFlag = userService.JudgeBooks(booksList,books); // 显示数据 if (addFlag) { // 添加成功 重定向到图书信息管理页 response.sendRedirect(request.getContextPath() + "/page/bookList.jsp" ); } else { // 添加失败 // 请求转发到增加图书addBook.jsp 并设置flag 提示失败 request.getRequestDispatcher( "page/addBook.jsp?flag=0" ).forward(request,response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | package com.zhou.web.util; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.zhou.web.domain.Books; /** * UploadBookImg 将图片存入服务器的工具类 * @author 25677 * */ public class UploadBookImgUtil { public static Books uploadImg(HttpServletRequest request, HttpServletResponse response) throws IOException { String url = "" ; // 需要返回的图片地址 Books books = new Books(); //1 .创建磁盘文件项工厂 (如果我们使用空构造的话,缓存区和临时文件存放的位置都会有一个默认值) DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //2 .创建核心解析类 (构造方法需要传入一个磁盘文件项工厂) ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //3 .解析请求对象,将请求分成几个部分FileItem文件项:其中包括普通项、文件上传项 try { List<FileItem> list = fileUpload.parseRequest(request); //4 .遍历集合获得每个部分的对象 for (FileItem fileItem:list) { String name = "" ; // 普通项的名称 String value = "" ; // 普通项的值 // 判断时普通项还是文件上传项 if (fileItem.isFormField()) { // 普通项目 // 获取普通项的名称 name = fileItem.getFieldName(); // 获取普通项的值 value = fileItem.getString( "UTF-8" ); if (name.equals( "bookId" )) { books.setBookId(value); } else if (name.equals( "bookName" )) { books.setBookName(value); } else if (name.equals( "categoryId" )) { books.setBookCategory(value); } else if (name.equals( "bookPrice" )) { books.setBookPrice(Double.parseDouble(value)); } else if (name.equals( "remarks" )) { books.setBookNotes(value); } else if (name.equals( "bookPic" )) { books.setBookPath(value); } } else { // 文件上传项目 // 获得文件的名称 String fileName = fileItem.getName(); // 适用工具类生成唯一的文件名 String uuidFileName = UploadUtils.getUuidFileName(fileName); // 获得文件的输入流 相当于获取文件具体的内容 InputStream is = fileItem.getInputStream(); // 设置需要将文件写入到服务器的某个路径 // 表示获取到web目录下的uploadImg文件的绝对路径 String path = request.getServletContext().getRealPath( "/uploadImg" ); // 图片地址 url = path + "\\" + uuidFileName; // 创建输出流与输出流进行对接: OutputStream os = new FileOutputStream(url); int len = 0; byte[] b = new byte[1024]; while ((len = is. read (b)) != -1) { os.write(b,0,len); } is.close(); os.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } // 将服务器中的图片地址重新设置 books.setBookPath(url); // 将图片地址返回回去 return books; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | package com.zhou.web.listener; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import com.zhou.web.domain.Books; import com.zhou.web.domain.Category; import com.zhou.web.domain.User; /** * InitServletContextListener 启动程序时,初始化数据 * @author 25677 * */ // 使用注解的方式对监听器进行配置 @WebListener public class InitServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } @Override public void contextInitialized(ServletContextEvent event) { //1 .初始化账户列表参数 // 创建一个list集合用来保存用户 List<User> userList = new ArrayList<User>(); /* * 假设管理员账号比较隐私 不允许别人创建等操作 我们现在web.xml中配置好管理员账号 * 然后再程序初始化的时候获取到保存到list集合中,根据用户登录时输入的数据进行比较 */ String account = event.getServletContext().getInitParameter( "account" ); String password = event.getServletContext().getInitParameter( "password" ); // 创建User对象 并将获得的管理员输入填入其中 User user = new User(account,password); // 将user对象填入userlist中 userList.add(user); // 将userList存入ServletContext全局对象中 event.getServletContext().setAttribute( "userList" , userList); //2 .初始化图书分类列表参数 // 创建默认分类数据 Category category = new Category( "ca0001" , "计算机类" ); // 创建集合 List<Category> categoryList = new ArrayList<Category>(); // 往集合中添加数据分类 categoryList.add(category); // 将集合对象categoryList存入ServletContext全局对象中 event.getServletContext().setAttribute( "categoryList" , categoryList); //3 .初始化图书列表 Books books = new Books( "book0001" , "Java基础" , "计算机类" ,29D, "img/g1.jpg" , "第一本" ); // 创建集合 List<Books> booksList= new ArrayList<Books>(); // 往集合中添加数据分类 booksList.add(books); // 将集合对象booksList存入ServletContext全局对象中 event.getServletContext().setAttribute( "booksList" , booksList); } } |
1 2 3 4 5 6 7 8 9 10 | 老师 我修改了一下工具类,让其直接返回一books对象,boo是对象中的图片地址是tomcat中存储 图片的地址,现在tomcat的图片地址中也能显示上传的图片,但是我遇到一个问题:因为我在监听器 初始化的时候是这样初始化的: Books books = new Books( "book0001" , "Java基础" , "计算机类" ,29D, "img/g1.jpg" , "第一本" ); 然后再显示的bookList.jsp中是这样显示的: <img src= "${pageContext.request.contextPath}/${c.bookPath}" > 但是如果我使用服务器的地址的话,我新添加的图片就显示不出来,地址会报错,我试了很久,无论 是修改监听器中的图片初始化中books中的地址的格式,还是jsp中拼接,我都失败了,麻烦老师帮 我看一下,我只修改了sevlet和工具类,我都贴出来了,其他都没修改,和之前贴出来的一样,麻烦 您了 |
jia_蛙
2019-12-11 18:46:44
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" %> <!DOCTYPE html> <html> < head > <meta charset= "UTF-8" > <title>登录< /title > <link rel= "stylesheet" href= "${pageContext.request.contextPath}/css/login.css" > <script type = "text/javascript" > function data_Judge(){ // 获得用户名的值 var username = document.getElementById( "name" ).value; if (username == null || username== "" ){ alert( "用户名不能为空" ); return false ; } // 获得密码的值 var password = document.getElementById( "pwd" ).value; if (password == null || password== "" ){ alert( "密码不能为空" ); return false ; } // 获得验证码的值 var code = document.getElementById( "code" ).value; var length = code.length; if (length != "5" ){ alert( "验证码格式有误" ); return false ; } } // 点击更换图片函数 function changeImg(){ var codeImg = document.getElementById( "codeImg" ); /* 使用第三方直接获取验证码 */ codeImg.src= "${pageContext.request.contextPath}/KaptchaServlet?time=" + new Date().getTime(); } < /script > < /head > <body> <div class= "login" > <div class= "header" > <h1> <a href= "/login.do" >登录< /a > <!-- 如果登入失败 msg就会被赋值并提示错误信息 --> <p style= "color:red" > ${ msg }< /p > < /h1 > <button>< /button > < /div > <form action= "${pageContext.request.contextPath}/LonginServlet" method= "post" onsubmit= "return data_Judge()" > <div class= "name" > <input type = "text" id = "name" name= "username" > <p>< /p > < /div > <div class= "pwd" > <input type = "password" id = "pwd" name= "password" > <p>< /p > < /div > <div class= "code" > <input type = "text" id = "code" name= "verifyCode" style= "width: 150px" > <img id = "codeImg" onclick= "changeImg()" src= "${pageContext.request.contextPath}/KaptchaServlet" style= "width: 150px; height: 42px; vertical-align: middle;" > <p>< /p > < /div > <div class= "btn-red" > <input type = "submit" value= "登录" id = "login-btn" > < /div > < /form > < /div > < /body > < /html > |
1 2 3 4 5 6 7 | 老师 ,我在添加图书的AddBooksServlet中 把前端数据接收过来,然后再用工具类根据地址 前端穿过来的图片存入到服务器中,让后再返回一个图片再服务器的地址,然后将再sevlet中获得 的其他前端数据和其返回过来的服务器中的图片地址封装成user,当我完成这一步时,只要一点击 前端页面的添加,它就报空指针异常,我看了一下报错的信息 ,看不懂,但是只出现了一个类是我 写的AddBooksServlet.java:30)AddBooksServlet.java:63),AddBooksServlet第三十行我是我 根据前端获取的值转成double的值,我之前设置的时候都没问题。不知道问题出在哪里。麻烦老师 帮我看看 |
jia_蛙
2019-12-11 18:45:58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | package com.zhou.web.util; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * UploadBookImg 将图片存入服务器的工具类 * @author 25677 * */ public class UploadBookImgUtil { public static String uploadImg(HttpServletRequest request, HttpServletResponse response) throws IOException { String url = "" ; // 需要返回的图片地址 //1 .创建磁盘文件项工厂 (如果我们使用空构造的话,缓存区和临时文件存放的位置都会有一个默认值) DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //2 .创建核心解析类 (构造方法需要传入一个磁盘文件项工厂) ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //3 .解析请求对象,将请求分成几个部分FileItem文件项:其中包括普通项、文件上传项 try { List<FileItem> list = fileUpload.parseRequest(request); //4 .遍历集合获得每个部分的对象 for (FileItem fileItem:list) { // 判断时普通项还是文件上传项 if (!fileItem.isFormField()) { // 文件上传项目 // 获得文件的名称 String fileName = fileItem.getName(); // 适用工具类生成唯一的文件名 String uuidFileName = UploadUtils.getUuidFileName(fileName); // 获得文件的输入流 相当于获取文件具体的内容 InputStream is = fileItem.getInputStream(); // 设置需要将文件写入到服务器的某个路径 // 表示获取到web目录下的uploadImg文件的绝对路径 String path = request.getServletContext().getRealPath( "/uploadImg" ); // 图片地址 url = path + "\\" + uuidFileName; // 创建输出流与输出流进行对接: OutputStream os = new FileOutputStream(url); int len = 0; byte[] b = new byte[1024]; while ((len = is. read (b)) != -1) { os.write(b,0,len); } is.close(); os.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } // 将图片地址返回回去 return url; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.zhou.web.util; import java.util.UUID; /** * UploadUtils 解决文件名重名的方法 * @author 25677 * */ public class UploadUtils { /** * 解决多个用户选择头像文件名重名覆盖的问题 * @param fileName 原来的文件名 * @ return 新的不重名的文件名 */ public static String getUuidFileName(String fileName) { // 解决文件重名的问题: //a .jpg --> 获得后缀名.jpg --> 生成一段随机字符串将a替换掉 xxfsaf.jpg // 对原来文件名进行替换 //1 .首先使用lastIndexOf找到 点 出现的位置 (lastIndexOf:是从右向左查某个指定的字符串在字符串中最后一次出现的位置) int ind = fileName.lastIndexOf( "." ); //2 .根据点出现的位置开始截取 (substring() 方法用于提取字符串中介于两个指定下标之间的字符。) String exName = fileName.substring(ind); //3 .生成随机字符串 //UUID 是 通用唯一识别码,作用是让每一个元素都有一个唯一辨识的信息。因为UUID会有-,如果你去掉可以使用replace替换 String uuidFileName = UUID.randomUUID().toString().replace( "-" , "" ) + exName; //4 返回新生成的文件名 return uuidFileName; } // 测试 /* * public static void main(String[] args) { * System.out.println(UploadUtils.getUuidFileName( "a.jpg" )); } */ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | <%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" %> <!--引入JSTL标签库 prefix表示为这个JSTL核心库声明一个前缀 --> <%@ taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> < head > <meta charset= "UTF-8" > <title>新建图书信息< /title > <link rel= "stylesheet" href= "${pageContext.request.contextPath}/css/bootstrap.min.css" > <link rel= "stylesheet" href= "${pageContext.request.contextPath}/css/add.css" > <% String flag = request.getParameter( "flag" ); %> <script type = "text/javaScript" > /* 根据响应回来的flag判断图书是否已经存在 判断标志位:图书ID是否相同 */ var flag = '<%=flag%>' ; if ( "0" ==flag){ alert( "该图书已存在,请更改图书ID" ); } /* 表单提交的校验方法 */ function validate_form(){ /* 对图书编号进行校验 */ var bookId = document.getElementById( "bookId" ).value; var regex1 = /^book[0-9]{4}$/; if (bookId == "" ){ alert( "图书编号不能为空" ); return false ; } else if (!regex1. test (bookId)){ alert( "图书编号请满足:bookxxxx xxxx为4为数字" ); return false ; } /* 对书名进行校验 */ var bookName = document.getElementById( "bookName" ).value; console.log( "bookName: " + bookName); if (bookName == "" ){ alert( "图书名不能为空" ); return false ; } /* 对分类进行校验 */ var categoryId = document.getElementById( "categoryId" ).value; if (categoryId == "" ){ alert( "图书分类未选中" ); return false ; } /* 对价格进行校验 */ var bookPrice = document.getElementById( "bookPrice" ).value; var regex2 = /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/; if (bookPrice == "" ){ alert( "请输入价格!" ); return false ; } else if (!regex2. test (bookPrice)){ alert( "价格格式错误!" ); return false ; } /* 对图书封面进行校验 */ var bookPic = document.getElementById( "bookPic" ).value; if (bookPic == "" ){ alert( "请选择图书封面" ); return false ; } /* 对备注进行校验 */ var remarks = document.getElementById( "remarks" ).value; if (remarks == "" ){ alert( "请填写备注" ); return false ; } } < /script > < /head > <body> <nav class= "navbar navbar-default" > <div class= "container" > <div class= "navbar-header" > <a class= "navbar-brand" href= "/dept/list.do" > 图书信息管理 < /a > < /div > < /div > < /nav > <div class= "container" > <div class= "jumbotron" > <h1>Hello, XXX!< /h1 > <p>请小心地新增图书信息,要是建了一个错误的就不好了。。。< /p > < /div > <div class= "page-header" > <h3><small>新建< /small >< /h3 > < /div > <form enctype= "multipart/form-data" class= "form-horizontal" onsubmit= "return validate_form()" action= "${pageContext.request.contextPath}/AddBooksServlet" method= "post" > <div class= "form-group" > <label for = "name" class= "col-sm-2 control-label" >图书编号 :< /label > <div class= "col-sm-8" > <input name= "bookId" class= "form-control" id = "bookId" > < /div > < /div > <div class= "form-group" > <label for = "name" class= "col-sm-2 control-label" >图书名称 :< /label > <div class= "col-sm-8" > <input name= "bookName" class= "form-control" id = "bookName" > < /div > < /div > <div class= "form-group" > <label for = "categoryId" class= "col-sm-2 control-label" >分类 :< /label > < select id = "categoryId" name= "categoryId" class= "col-sm-2 form-control" style= "width: auto;margin-left: 15px" > <c:forEach items= "${applicationScope.categoryList}" var= "c" varStatus= "idx" > <option value= '${c.categoryName}' >${c.categoryName}< /option > < /c :forEach> < /select > < /div > <div class= "form-group" > <label for = "name" class= "col-sm-2 control-label" >价格 :< /label > <div class= "col-sm-8" > <input name= "bookPrice" class= "form-control" id = "bookPrice" > < /div > < /div > <div class= "form-group" > <label for = "name" class= "col-sm-2 control-label" >图书封面 :< /label > <input type = "file" id = "bookPic" name= "bookPic" style= "padding-left: 15px" > < /div > <div class= "form-group" > <label for = "name" class= "col-sm-2 control-label" >备注 :< /label > <div class= "col-sm-8" > <input name= "remarks" class= "form-control" id = "remarks" > < /div > < /div > <div class= "form-group" > <div class= "col-sm-offset-2 col-sm-10" > <button type = "submit" class= "btn btn-primary" >保存< /button > < /div > < /div > < /form > < /div > <footer class= "text-center" > copy@imooc < /footer > < /body > < /html > |
1 | <br> |
相似问题
登录后可查看更多问答,登录/注册
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧