spring MVC的一些小技巧

1,在controller中获取指定name的bean

/***
     *
     * @param request
     * @param beanName : 例如 userDao ,adminDao
     * @return
     */
    public Object getBean(HttpServletRequest request,String beanName){
        WebApplicationContext webApp=RequestContextUtils.getWebApplicationContext(request, request.getSession().getServletContext());
        return webApp.getBean(beanName);
    }

2,在controller中根据实体类自动注入dao

/***
     * 从WebApplicationContext 获取dao
     * @param request
     * @return
     */
    private  GenericDao<T> getDaoByWebApp(HttpServletRequest request){
        if(ValueWidget.isNullOrEmpty(dao)){
            WebApplicationContext webApp=RequestContextUtils.getWebApplicationContext(request   , request.getSession().getServletContext());
            try {
                dao=(GenericDao<T>)webApp.getBean(ValueWidget.title(SystemHWUtil.getFileSuffixName(clz.getName()+"Dao")));//返回的是同一个对象
            } catch (NoSuchBeanDefinitionException e) {
//              e.printStackTrace();
                dao=(GenericDao<T>)webApp.getBean(SystemHWUtil.getFileSuffixName(clz.getName()+"Dao"));//返回的是同一个对象
            }
            System.out.println("dao:"+dao);
        }
        return dao;
    }

那么clz 是如何获取的呢?

protected final Class<T> clz = SystemHWUtil.getGenricClassType(getClass());
/***
     * 获取实际的子类的class
     *
     * @param clz
     * @return
     */
    public static <T> Class<T> getGenricClassType(
            @SuppressWarnings("rawtypes") Class clz) {
        Type type = clz.getGenericSuperclass();
        if (type instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) type;
            Type[] types = pt.getActualTypeArguments();
            if (types.length > 0 && types[0] instanceof Class) {
                // System.out.println("class:"+types[0]);
                return (Class) types[0];
            }
        }

        return (Class) Object.class;
    }

3,在controller的action中指定response 的content type

使用produces

/***
     * 登录
     * @param model
     * @param status
     * @param view
     * @param session
     * @param request
     * @param callback
     * @return
     * @throws IOException
     */
    @ResponseBody
    @RequestMapping(value = "/login", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)
    public String login(Model model, Integer status, UserView view,Integer issavePasswd,
            HttpSession session, HttpServletRequest request,HttpServletResponse response, String callback)
            throws IOException {
        init(request);
        String content = null;
        UserDao userDao = (UserDao) getDao();
        User user2 = null;
        Map map = new HashMap();
        int login_result = 0;
        AccessLog accessLog=logInto(request);
        accessLog.setDescription("会员登录");

        if (ValueWidget.isNullOrEmpty(view.getUsername())) {
            login_result = Constant2.LOGIN_RESULT_USERNAME_EMPTY;//用户名不能为空
            accessLog.setOperateResult("用户名不能为空");
        } else if (ValueWidget.isNullOrEmpty(view.getPassword())) {
            login_result = Constant2.LOGIN_RESULT_PASSWORD_EMPTY;//密码不能为空
            accessLog.setOperateResult("密码不能为空");
        } else if (ValueWidget.isNullOrEmpty(user2 = userDao.getByUsername(view
                .getUsername()))) {
            login_result = Constant2.LOGIN_RESULT_USERNAME_INVALID;//用户名不存在
            accessLog.setOperateResult("用户名不存在");
        } else if (!user2.getPassword().equals(view.getPassword())) {
            login_result = Constant2.LOGIN_RESULT_FAILED;//登录失败(用户名和密码不匹配)
            accessLog.setOperateResult("登录失败(用户名和密码不匹配)");
        } else {
            login_result = Constant2.LOGIN_RESULT_SUCCESS;
            session.setAttribute(Constant2.SESSION_KEY_LOGINED_USER, user2);
            map.put("session", session.getId());// 下载session id到客户端
            map.put("userId", user2.getId());// 下载session id到客户端
            System.out.println("session id:" + session.getId());
            Map mapCookie=new HashMap();
            if(issavePasswd/*包装类型*/!=null&&issavePasswd==1) {//记住密码
                mapCookie.put(Constant2.COOKIE_KEY_USERNAME, user2.getUsername());
                mapCookie.put(Constant2.COOKIE_KEY_PASSWORD, user2.getPassword());
            }else{
                mapCookie.put(Constant2.COOKIE_KEY_USERNAME, false);
                mapCookie.put(Constant2.COOKIE_KEY_PASSWORD, false);
            }
            WebServletUtil.rememberMe(request,response,mapCookie);
            accessLog.setOperateResult("登录成功,session id:"+session.getId());
        }
        // boolean isExist = userDao.isExist(view.getUsername(),
        // view.getPassword());

        map.put(Constant2.LOGIN_RESULT_KEY, login_result);
        logSave(accessLog, request);
        content = JSONPUtil.getJsonP(map, callback);
        return content;
    }

4,使用eclipse开发Java web项目时获取指定目录的真实绝对路径

String realpath =WebServletUtil.getUploadPath(request, "upload/download/apk", request
                .getSession().getServletContext(), Constant2.SRC_MAIN_WEBAPP);
                /***
     *
     * @param request
     * @param uploadFolderName
     * @return
     */
    public static final String getUploadPath(HttpServletRequest request,
            String uploadFolderName, ServletContext sContext, String webappPath/*src\main\webapp
                                                                            */) {
        // project name:"/demo_channel_terminal"
        String projectName = request.getContextPath();// value:/shop_goods or
                                                        // "/springMVC_upload"
        String uploadPath = WebServletUtil.getUploadedPath(
                uploadFolderName/* "upload\" */, projectName, sContext,
                webappPath/* "src\main\webapp\" */);
        return uploadPath;
    }
/***
     * java web //
     * D:\xxx\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server
     * .core\tmp0\wtpwebapps\shop_goods\images //
     * D:\xxx\eclipse\workspace\shop_goods\ upload
     *
     * @param uploadFolderName
     * @param projectName
     * @param sContext
     * @return
     */
    public static String getUploadedPath(String uploadFolderName,
            String projectName, ServletContext sContext,String webappPath/*src\main\webapp*/ ) {
        String uploadFolder_tmp = null;
        if (uploadFolderName.startsWith(File.separator)) {
            uploadFolder_tmp = uploadFolderName;
        } else {
            uploadFolder_tmp = File.separator + uploadFolderName;// "/upload"
        }
        String realpath = sContext.getRealPath(uploadFolder_tmp);//D:\software\eclipse\workspace2\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\springMVC_upload\attached
        //区别在于是否是使用eclipse 来启动http服务(tomcat)
        String reg=".metadata\\.plugins";
        boolean isContain=realpath.contains(reg);
        System.out.println("[getUploadedPath]isContain:"+isContain);
        if(!isContain){
            webappPath=null;
        }
        // project name ,eg.shop_goods
        projectName = SystemHWUtil.deleteFrontSlash(projectName);
        realpath = SystemHWUtil.getRealPath(realpath, projectName);
        String result=null;//D:\software\eclipse\workspace2\springMVC_upload\src\main\webapp\attached
        if(!ValueWidget.isNullOrEmpty(webappPath)){
            //目的:把"http://localhost:8080/springMVC_upload/upload/image/"变为:
            //"http://localhost:8080/springMVC_upload/src/main/webapp/upload/image/"
            result=realpath.replaceAll("("+SystemHWUtil.deleteAfterSlash(uploadFolderName).replaceAll(File.separator.replace("\\", "\\\\")/* 因为\需要转义 */+"$", "") +"[\\/]?)$", webappPath.replace("\\", "\\\\")+"$1");
        }else{
            result=realpath;
        }
        System.out.println("[WebServletUtil.getUploadedPath]result:"+result);
        return result;
    }

相关常量

public static final String SRC_MAIN_WEBAPP="src\\main\\webapp\\";

5,spring MVC接收 jsonp 跨域请求

/***
     * 登录
     * @param model
     * @param status
     * @param view
     * @param session
     * @param request
     * @param callback
     * @return
     * @throws IOException
     */
    @ResponseBody
    @RequestMapping(value = "/login", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)
    public String login(Model model, Integer status, UserView view,Integer issavePasswd,
            HttpSession session, HttpServletRequest request,HttpServletResponse response, String callback)
            throws IOException {
        init(request);
        String content = null;
        UserDao userDao = (UserDao) getDao();
        User user2 = null;
        Map map = new HashMap();
        int login_result = 0;
        AccessLog accessLog=logInto(request);
        accessLog.setDescription("会员登录");

        if (ValueWidget.isNullOrEmpty(view.getUsername())) {
            login_result = Constant2.LOGIN_RESULT_USERNAME_EMPTY;//用户名不能为空
            accessLog.setOperateResult("用户名不能为空");
        } else if (ValueWidget.isNullOrEmpty(view.getPassword())) {
            login_result = Constant2.LOGIN_RESULT_PASSWORD_EMPTY;//密码不能为空
            accessLog.setOperateResult("密码不能为空");
        } else if (ValueWidget.isNullOrEmpty(user2 = userDao.getByUsername(view
                .getUsername()))) {
            login_result = Constant2.LOGIN_RESULT_USERNAME_INVALID;//用户名不存在
            accessLog.setOperateResult("用户名不存在");
        } else if (!user2.getPassword().equals(view.getPassword())) {
            login_result = Constant2.LOGIN_RESULT_FAILED;//登录失败(用户名和密码不匹配)
            accessLog.setOperateResult("登录失败(用户名和密码不匹配)");
        } else {
            login_result = Constant2.LOGIN_RESULT_SUCCESS;
            session.setAttribute(Constant2.SESSION_KEY_LOGINED_USER, user2);
            map.put("session", session.getId());// 下载session id到客户端
            map.put("userId", user2.getId());// 下载session id到客户端
            System.out.println("session id:" + session.getId());
            Map mapCookie=new HashMap();
            if(issavePasswd/*包装类型*/!=null&&issavePasswd==1) {//记住密码
                mapCookie.put(Constant2.COOKIE_KEY_USERNAME, user2.getUsername());
                mapCookie.put(Constant2.COOKIE_KEY_PASSWORD, user2.getPassword());
            }else{
                mapCookie.put(Constant2.COOKIE_KEY_USERNAME, false);
                mapCookie.put(Constant2.COOKIE_KEY_PASSWORD, false);
            }
            WebServletUtil.rememberMe(request,response,mapCookie);
            accessLog.setOperateResult("登录成功,session id:"+session.getId());
        }
        // boolean isExist = userDao.isExist(view.getUsername(),
        // view.getPassword());

        map.put(Constant2.LOGIN_RESULT_KEY, login_result);
        logSave(accessLog, request);
        content = JSONPUtil.getJsonP(map, callback);
        return content;
    }
/***
     * 用于jsonp调用
     * @param map : 用于构造json数据
     * @param callback : 回调的javascript方法名
     * @param filters : <code>SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter
                .serializeAllExcept("content");
        FilterProvider filters = new SimpleFilterProvider().addFilter(
                Constant2.SIMPLEFILTER_JACKSON_PAPERNEWS, theFilter);</code>
     * @return : js函数名(json字符串)
     */
    public static String getJsonP(Object map,String callback,FilterProvider filters)
    {
        ObjectMapper mapper = getObjectMapper();
        String content = null;
        ObjectWriter writer=null;
        try {
            if(filters!=null){
//              content = mapper.writer(filters).writeValueAsString(map);
                writer=mapper.writer(filters);
            }else{
//              content = mapper.writeValueAsString(map);
                writer=mapper.writer();
            }
            content=writer.writeValueAsString(map);
            System.out.println(content);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(ValueWidget.isNullOrEmpty(callback)){
            return content;
        }
        return callback+"("+content+")";
    }
    /***
     * jackson没有过滤
     * @param map
     * @param callback
     * @return
     */
    public static String getJsonP(Object map,String callback)
    {
        return getJsonP(map, callback, null);
    }
    public static String getJsonP(Object map)
    {
        return getJsonP(map, null, null);
    }
    /***
     *
     * @param key
     * @param value2
     * @param callback
     * @return : js函数名(json字符串)
     */
    public static String getJsonP(String key ,Object value2,String callback){
        Map map = new HashMap();
        map.put(key, value2);
        return getJsonP(map, callback);
    }   

前端代码:

/***
 * 会员登录
 * @param username
 * @param password
 */
var user_login=function(username,password){
//    alert(username+","+password);
    if(isHasLogin())
    {
        alert(LOGIN_MSG_HAVE_LOGINED_ALREADY);
        //Toast.showShortCenter(LOGIN_MSG_HAVE_LOGINED_ALREADY);
        return;
    }
    showMask2();
    $.jsonP({url:‘http://‘+server_url+‘/user/login?callback=?&username=‘+username+"&password="+password,success:function(data){
        var result=data.result;
        hideMask2();
        switch (result)
        {
            case 1:
                window.user={};
                window.sessionId=data.session;
                user.username=username;
                user.password=password;
                user.userId=data.userId;
                settings_before(document.getElementById("settings"));
                alert("登录成功");
                //plugins.toast.showShortCenter("登录成功");
                $.ui.goBack();
                break;
            case 3:
                alert("用户名不能为空");
                break;
            case 4:
                alert("密码不能为空");
                break;
            case 5:
                alert("用户名或密码错误");
                break;
            case 2:
                alert("用户名不存在");
                break;
        }

    }});
}
时间: 2024-12-23 06:53:38

spring MVC的一些小技巧的相关文章

MVC进阶讲解+小技巧-乱七八糟

开发步骤 1.建立项目 2.建立文件夹 3.建立Controllers 4.生成页面 5.编写Html+Js 6.编写异步请求的Action的方法,返回部分页(用于分页) 7.Js中显示部分页 8.增加新增按钮,增加Add的Action,并生成页面 9.新增页面Html+Js,增加保存Js方法,$.post到SaveAction,保存成功后关闭页面 http://www.cnblogs.com/wlb/archive/2009/12/07/1618954.html 第一次接触到MVC,才知道,什

spring Bean配置的小技巧

1.在主配置文件applicationContext.xml 中配置一个抽象bean 2.在子配置文件中引用这个抽象bean 3.这样的好处就是当sessionFactory 的名字发生的改变的时候,按照方式一的方式配置就必须全部一个个改变,会干死人的,但是第二种只需要改下主配置文件中的抽象bean的sessionFactory 就好了

初学者对Spring MVC的认识

首先是要一定说明的是,这倒是说明是什么?对吧Spring MVC 是SpringFrameWork的后续产品,并且已经融入到Spring Web Flow中同时Spring MVC 分离了控制器,模型对象,分派器(其实我不知道这是什么)以及处理程序对象的角色,这种分离让它们更容易进行定制. 说了这些很官方的话,我都有点晕了,呵呵,先上一个原理流程图吧,相信会比较直观! Spring MVC 原理图 Spring MVC 对应原理流程步骤: 1.Web客户端 --> DispatcherServl

spring mvc 配置(xml配置详解)

如果您曾经使用Spring MVC框架开发过Web应用程序,本文提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例. Spring Framework(J2EE框架),Spring(Spring框架)下载 2013-08-26Spring Framework(J2EE框架) 3.2.4 2013-08-26Spring(Spring框架) 4.0.0.M2 web.xml 配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <s

YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧

最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但通常都能大大提高应用程序的性能,希望对大家有用. 一.缓存 为了避免每次请求都去访问后台的资源,我们一般会考虑将一些更新不是很频繁的,可以重用的数据,通过一定的方式临时地保存起来,后续的请求根据情况可以直接访问这些保存起来的数据,这种机制就是所谓的缓存机制.缓存分为页面输出缓存,内存数据缓存和缓存依

spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍开发使用过程.首先看图:大概的操作界面,基本使用easyui组件实现,欢迎大家吐槽: 界面包含了基本的sql查询 和 sql执行的小功能,把查询和执行分开,也是为了后台实现的需要,以及权限控制的考虑,毕竟执行的操作,会影响到系统的数据问题.查询和执行的菜单,是用easyui的手风琴式的菜单处理的.两

MVC View小技巧

1.在View中添加命名空间引用 1)直接在.cshtml文件中添加 @using MvcMusicStore.Models 2)在Views文件夹的web.config文件中添加,对整个Views文件夹中所有View都有效 <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> .... <add namespace="MvcMusicStore.Models" /

MVC 基架不支持 Entity Framework 6 或更高版本 即 NuGet的几个小技巧

MVC 基架不支持 Entity Framework 6 或更高版本.有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=276833. 原因:mvc版本过低,ef版本过高 解决方法:1.从NuGet 卸载 ef 6.1 工具- 库程序包管理器 - 程序包管理控制台 输入PM> Uninstall-Package EntityFramework –Version 6.1.3 -Force 2.修改原语句 Install-Package <程序包名

Spring MVC 的环境搭建和入门小程序

1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入spring官网,在网页右边选择想要下载的版本.如图 1.1.2进入页面按Ctrl+F搜索Distribution Zip Files 找到如图页面,点击地址.来到下载面 链接地址为:http://repo.spring.io/release/org/springframework/spring/ Spring源码下载地址:https://github.com/spring-projects/spring