java 小菜鸟问题1
1. 异常转换为字符串
public static String getExceptionMessage(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
return sw.toString();
}
2.spring 中获取当前request..
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
3.对于前台extjs的,可固定controller中格式,自定义一个传出类。。转成json返回
public class AjaxJson {
private boolean success = true;// 是否成功
private String msg = "操作成功";// 提示信息
private Object obj = null;// 其他信息
private QueryResult<T> records;
private Map<String, Object> attributes;// 其他参数
4. 根据request获取浏览器类型
private final static String IE10 = "MSIE 10.0";
private final static String IE9 = "MSIE 9.0";
private final static String IE8 = "MSIE 8.0";
private final static String IE7 = "MSIE 7.0";
private final static String IE6 = "MSIE 6.0";
private final static String MAXTHON = "Maxthon";
private final static String QQ = "QQBrowser";
private final static String GREEN = "GreenBrowser";
private final static String SE360 = "360SE";
private final static String FIREFOX = "Firefox";
private final static String OPERA = "Opera";
private final static String CHROME = "Chrome";
private final static String SAFARI = "Safari";
private final static String OTHER = "其它";
public static String checkBrowse(HttpServletRequest request) {
String userAgent=request.getHeader("USER-AGENT");
if (regex(OPERA, userAgent))
return OPERA;
if (regex(CHROME, userAgent))
return CHROME;
if (regex(FIREFOX, userAgent))
return FIREFOX;
if (regex(SAFARI, userAgent))
return SAFARI;
if (regex(SE360, userAgent))
return SE360;
if (regex(GREEN, userAgent))
return GREEN;
if (regex(QQ, userAgent))
return QQ;
if (regex(MAXTHON, userAgent))
return MAXTHON;
if (regex(IE10, userAgent))
return IE10;
if (regex(IE9, userAgent))
return IE9;
if (regex(IE8, userAgent))
return IE8;
if (regex(IE7, userAgent))
return IE7;
if (regex(IE6, userAgent))
return IE6;
return OTHER;
}
public static boolean regex(String regex, String str) {
Pattern p = Pattern.compile(regex, Pattern.MULTILINE);
Matcher m = p.matcher(str);
return m.find();
}
5.实现跳转
return new ModelAndView(new org.springframework.web.servlet.view.RedirectView("loginController.do?login"));
6.别忘了使用带参数的requestMapping
@RequestMapping(params = "user")
7.针对已完成的方法类,可以右键添加 junit Test Case.可自动生成方法对应的test方法
8.可在系统启动时,初始化一些 类似数据字典的信息放入map. 方便使用。减少访问时间
9.确定的是前台页面 会调用后台,需要一个action...在action中处理所有逻辑。---。提取一个Service层处理业务逻辑。。。
但是是否需要单独的一个DAO层处理数据库操作。。是每个表一个dao还是通用一个commondao...
假设每个表创建一个dao..那么对于需要多表联合操作的sql 数据库操作该放哪里???以及Service之间是否互相调用?
10.先做个通用的前后台,针对单表进行增删改。比如前台一个grid,一个新增,修改,删除,查询的按钮,后台一个deleteAction和一个SaveAction(根据id判断是新增还是修改)再加一个查询。。。。
这样就能尽快看到效果,然后再根据实际业务细化
11.权限,报表的,工作流的。。。
权限,权限折腾好久好久了,天天打酱油。。
其实很简单的,和常见的一样基于角色的。。((用户。。用户角色关系。。角色。。角色权限关系。。权限。。权限资源关系。。资源))仅此而已。
除了在权限设置页面本身,可能需要的查询很多样,但更多的都是通过( 用户。。资源)参数, 获取相应的权限信息。。
至于在权限管理页面:获取指定用户 a.已授权的所有资源 b.所在的角色组 c 所管理的角色组
,and 获取指定角色 a.已授权的资源 b.已拥有的权限,c.角色成员 d 角色管理员,,
加上部门,变得更复杂点。。。。统一授权,分级授权,权限嵌套。权限规则
12.spring的web service, 要尽快看下,最少能够搭建一个最简单的调用,已替换之前的cxf方式的webservice
http://www.iteye.com/topic/152556