zoukankan      html  css  js  c++  java
  • 练习上传下载时遇到的问题

    • public class BaseServlet extends HttpServlet {
    • @Override
    • protected void service(HttpServletRequest req, HttpServletResponse res)
    • throws ServletException, IOException {
    • //页面的编码处理
    • req.setCharacterEncoding("utf-8");
    • res.setContentType("text/html;charset=utf-8");
    • //获取页面要调用的method参数
    • String methodName = req.getParameter("method");
    • if(methodName==null || methodName.trim().isEmpty()){
    • throw new RuntimeException("您未指定要调用的方法!");
    • }
    • //反射得到要调用的反射方法
    • Class clazz = this.getClass();//所访问servlet的字节码文件对象
    • Method method = null;
    • try {
    • method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
    • }
    • catch (Exception e) {
    • throw new RuntimeException("您要调用的方法"+methodName+"(HttpServletRequest,HttpServletResponse)不存在");
    • }
    • //执行方法
    • try {
    • String result = (String)method.invoke(this, req,res);
    • if(result==null || result.trim().isEmpty()){
    • return;
    • }
    • if(result.contains(":")){
    • int addr = result.indexOf(":");
    • String bef = result.substring(0,addr);
    • String aft = result.substring(addr+1);
    • if(bef.equalsIgnoreCase("r")){
    • res.sendRedirect(req.getContextPath()+aft);
    • }else if(bef.equalsIgnoreCase("f")){
    • req.getRequestDispatcher(aft).forward(req, res);
    • }else{
    • throw new RuntimeException("您指定的操作有误");
    • }
    • }else{
    • req.getRequestDispatcher(result).forward(req, res);
    • }
    • } catch (Exception e) {
    • throw new RuntimeException("方法内部错误"+e);
    • }
    • }
    • public class MyFileServlet extends BaseServlet {
    • MyService service = new MyService();
    • public String findAll(HttpServletRequest req,HttpServletResponse res){
    • List<MyFile> list = service.findAll();
    • req.setAttribute("list", list);
    • return "f:/day22/list.jsp";
    • }
    • public String downLoad(HttpServletRequest req,HttpServletResponse res) {
    • String fid = req.getParameter("fid");
    • MyFile myfile = service.load(fid);
    • try {
    • //获取文件资源名称
    • String path = req.getParameter("path");
    • //解析路径
    • String fname = myfile.getFilename();
    • String name = myfile.getName();
    • name = new String(name.getBytes("iso-8859-1"),"utf-8");
    • //封装文件
    • File file = new File(path,fname);
    • if(!file.exists()){
    • req.setAttribute("msg", "您要下载的资源不存在");
    • return "f:/day22/msg.jsp";
    • }
    • int cnt = myfile.getCnt();
    • /*
    • 其中MyFile 类型的cnt属性是Integer的int cnt = myfile.getCnt();
    • * myfile.setCnt(cnt+1);
    • * service.edit(myfile);
    • * 加入此句后会报出 方法内部错误
    • * java.lang.reflect.
    • * InvocationTargetException
    • * 后来将接口参数由myfile对象换成两个
    • * 需要的直接参数,而不是由myfile间接
    • * 获取,问题解决,仔细思考之后发现其实是反射方法的
    • 内部出了问题,也就是说baseservlet反射调用了我的这个
    • 方法,而我这个方法内部有可能在处理或调用其他方法时出现问题
    • * */
    • service.edit(cnt+1,fid);
    • name = new String(name.getBytes("GBK"),"iso-8859-1");
    • res.addHeader("content-disposition", "attatchment;filename="+fname);
    • IOUtils.copy(new FileInputStream(file), res.getOutputStream());
    • } catch (Exception e) {
    • throw new RuntimeException(e);
    • }
    • return null;
    • }
  • 相关阅读:
    java-引用数组、继承、super关键字
    java-分支重载以及构造方法
    java-面向对象之类、对象
    java-方法创建与使用
    java-数组排序之冒泡排序(经典排序)
    java-循环的应用环境以及数组的创建
    java-循环
    java-运算符与判断
    java-分支结构(四种基本分支结构的认识)
    java-运算符以及简单运用
  • 原文地址:https://www.cnblogs.com/itzfz/p/6120460.html
Copyright © 2011-2022 走看看