• 一些知识


    使用绝对路径来指定文件路径

    之前在项目中,无论是指定图片路径,还是文件路径(js文件,css文件)亦或者是指定action,我都是爱用相对路径,因为很多文件我都没有进行分类,都是胡乱扔在同一个文件路径中,所以使用相对路径较轻松,但是随着项目规模逐渐变大,采用分类进行管理,会发现很多相对路径不能使用,只能使用绝对路径,我之前一直使用"../"来回到根路径,再进行追加路径找到文件,而事实上,只要出现多次转跳到本身页面的情况,其中的路径就会出现累加错误

    而使用“${pageContext.request.contextPath }/”就可以解决大多是问题,${pageContext.request.contextPath}是通过 get方法去取的,先使用pageContext.getRequest()得到HttpServletRequest对象,再调用 HttpServletRequest的getContextPath方法作用是取出部署的应用程序名,这样不管如何部署,所用路径都是正确的

    El表达式的写法:${pageContext.request.contextPath}

    jsp的写法:<%=request.getContextPath()%>

    既然是EL表达式,就应该在jsp中使用了

    我们还可以使用这样的方式:

    <%
       pageContext.setAttribute("APP_PATH", request.getContextPath());
    %>

    其实和上面的使用原理都是一样的 ,只不过是使用一个别名来代替复杂的写法。在需要的时候这样使用即可:

    <img src="${APP_PATH }/images/logo.gif" />
    
    <a href="${APP_PATH }/productServlet">商品管理</a>

     如果我们使用了JSTL标签,那么使用:

    <c:url value="/productServlet"></c:url>

    可以实现同样的效果

    将结果放到哪?

    在进行完一系列操作后返回的结果放到哪里,又如何在页面中使用?我们可以将结果放入值栈或者请求域对象(就是request中了),这样在页面中使用EL+JSTL或者Struts2标签就可以取出值使用了

    放入值栈方式一 :

    ServletActionContext.getContext().getValueStack().set("list", list);             //ServletActionContext是Struts2中的类,可以使用set方法将集合放入
    ActionContext.getContext().getValueStack().push(pageBean);                       //可以将对象使用push方法放入值栈,也可以放入集合
    //ServletActionContext这个类直接继承了ActionContext

    页面中我是用struts2标签select

    <s:select name="department.id" list="list" listKey="id" listValue="dname" headerKey="" headerValue="---请选择部门---"/>

    放入值栈方式二 :

    先定义一个list,生成其get方法

        private List<Customer> list;
        public List<Customer> getList() {
            return list;
        }

    在要放入值栈中的action方法放入到这个list就行了。集合如此,其他对象也是用类似方法

    放入域对象方式 :

    ServletActionContext.getRequest().setAttribute("list", list);              //就是得到request,将数据放进去

    想放到session中就使用getSession()就行了

    生成JSON格式数据

    使用的是fastjson.jar这个工具jar包,是阿里巴巴开发的

    String json=JSON.toJSONString(manager);             //manager是个对象,JSON类就是这个jar包中的
    ServletActionContext.getResponse().setContentType("application/json;charset=utf-8");              //指定写入request中的数据格式
    ServletActionContext.getResponse().getWriter().write(json);                                     //写入request

    值得说的是在使用EasyUI的Datagrid 数据网格时,这个组件要求返回的json格式类似{total:xx,rows:[{user_id:1,user_name:'tom'}]}

            Map map=new HashMap();                                    //使用map帮助我们
            map.put("total", pageBean.getTotalCount());               //根据要求的格式将数据放入map
            map.put("rows", pageBean.getList());
            
            String json = JSON.toJSONString(map);                     //将这个map生成json
            ServletActionContext.getResponse().setContentType("application/json;charset=utf-8");
            ServletActionContext.getResponse().getWriter().write(json);

    使用Ajax进行数据交互

    使用了Ajax之后,控制层Action进行完数据库的交互之后,将数据生成JSON数据通过response响应出去,接下来返回什么呢?还是像之前返回SUCCESS/ERROR,然后再action配置文件中转跳到另一个页面?试验之后,会发现将这个页面的HTML返回了,这并不是我们想要的,我们想要的是将JSON数据返回,所以Action类要返回NONE,不可以再返回到一个页面。同理,如果出现错误,也会将错误信息发送给页面。(可以通过Firefox的Firebug的网络面板看到)

  • 相关阅读:
    用Darwin和live555实现的直播框架
    用Darwin和live555实现的直播框架
    VS2010 C++编译报错LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    VS2010编译和运行项目错误
    C#如何使用VS2010与SQL2008建立链接及初步调用(转)
    linQ to sql 查询生成的sql语句
    查看Linq to Sql生成的sql语句(转)
    linq to sql 项目移植后,数据库实体类需要重新创建?
    什么是Asp.net Core?和 .net core有什么区别?(转)
    ASP.NET Core 2.0 使用支付宝PC网站支付实现代码(转)
  • 原文地址:https://www.cnblogs.com/lz2017/p/6848584.html
Copyright © 2020-2023  润新知