java 开发中的debug
mysql 的 级联删除与级联更新
create table student(
id int,
departmentId int,
foreign key(departmentId) references department(departmentId) on delete cascade ;
);
级联更新(如:某次需要更新了 department表的某一个id 号,那么其下的 student中的departmentId 跟着改变 )
foreign key(departmentId) references department(departmentId) on update cascade ;
zuixin
spring 使用注解 @Resource 可以省略 setter () getter 方法
采用的是 field(属性) 注入
Spring默认
@Service
public class UserService{
}
等等 会自动创建 一个小写userSerivce, 但是 我测试
非 web 容器中 ,没有指定 @Service("userService") ,Spring却不存在此 bean ,
原因是 字母写错了,类 userService 写成 -------> ac.getBean("userService ");
即 类名 和 ac.getBean("userService "); 写的不一样
1.error opening trace file: No such file or directory
android api 的版本和模拟器的版本不一致导致的。我现在重新创建了一个项目,版本和运行的模拟器都选择一样的。结果不报这个错误了
2.Tomcat 不更新 全部jar包问题,删除lib 下面所有jar。 重新构建jar
3. Log4j 日志 不更新问题 , JavaEE 版本6 换成5 。
4. 空指针...... ------> 忘记new 对象,空引用即使用 此对象(或者 查询数据库返回null, 直接 set给 某一对象)
5. sl4j.api sl4j-log4j,log4j 注意版本的匹配
6.注意 配置 tomcat 的jdk和自己的一致
7. 不要给 sessionFactory起名
8. hibernate映射的时候实体 总是写错 ,和配置文件里面对应的 一定不要忘了 getter setter方法 ;特殊属性不需要
9.整合 hibernate找不到 class或 不能解析的(先看 自己hbm.xml中 <class name="Topic" table="topic">是不是写错,写成小写了 )
10. spring 容器:
在普通的Java程序中 也可以直接使用 spring的注解方式(但是千万不要忘记 了改变spring的扫描包 )
还有就是 ,1. spring在web 容器启动时候 中可以自己实例化
2. 普通Java程序中需要通过ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
注解后 ,就可以直接 Install installer = (Install) ac.getBean("install");得到该对象了
注解没有设置扫描包 : spring 会包 找不到 class异常
实例化Spring容器,无论WEB容器还是JavaSE 扫描的还是配置的 对象都会被实例化
#====================
但是 JavaSE中,JUnit测试用例 发现 @Resource注入根本无效,想在一个类里面用如 SessionFactory或者UserService之类的
@Resource
private UserService userService;
@Resource
private SessionFactory sessionFactory;
//## userSerivce.sayHello(); 空指针异常 (即无法注入 )
//## userService = (UserSerivce)ac.getBean("userSerivce"); userSerivce.sayHello(); //可以
自我判断: 我认为主要 @Resource无论 是javaSe还是Web都是可以注入的
但是:问题,通过ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
需要手动 通过 getBean("beanName");得到 已经实例化的容器对象
Java Application 运行 在 jre虚拟机中,无法自动关联注入 (因为jre没有被Spring管理)
但是WEB容器 web.xml 设置有Spring的监听器,Controller已经被Spring管理
(Tomcat,入口是Controller)运行时候却可以 在 Controller里面直接使用 注入的属性如UserService等等
例子1:
public class HibernateTest {
/*
## @Resource xxx //此类没有被Spring 管理,此注解无效(因为 HibernateTest对象都没有被创建,都不知道往哪里注入哦,所以我们见到可以使用的都是 类上面有注解,属性也有注解(对象得和属性关联才行 ))
private TestService testService ;
*/
@Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
## TestService service = (TestService) ac.getBean("testService"); //去Spring容器找实例化过的对象 OK
service.saveUser();
}
#====================
例子2:
@Component //##1
public class HibernateTest {
@Resource //##2
private TestService service; // ##2 已经 被注入 //##1 里了
@Test
public void save(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HibernateTest hibernateTest = (HibernateTest) ac.getBean("hibernateTest");
hibernateTest.service.saveUser(); //(1)正确
service.saveUser(); //(2)报错
/** 重点解释 这里为什么会报错:很重要 。(WEB中或者Spring容器的实例化在其他类里面[不论怎样,第一层(class上面没有注解即没有被Spring管理)的调用都需要使用getBean("")方式 ] )
//在自己的类里调用 service.saveUser(); TestService service 还没有被Spring容器指向 testService这个对象.
//故报空指针异常
*/
}
}
例子3: javaSE 程序哦
@Service
@Transactional
public class TestService {
@Resource
SessionFactory sessionFactory;
public void saveUser(){
Session session = sessionFactory.getCurrentSession(); // 只有事务管理器存在才可以,@Trasactional注解
User user = new User();
user.setUsername("王立");
user.setPassword("124");
session.save(user);
}
}
例子4 :
@Component // 注意这里不要配置为@Controller,因为我们在applicationContext.xml中已经配置@Controller注解不被扫描
public class HibernateTest {
@Resource
SessionFactory sessionFactory;
@Transactional
public void save(){
Session session = sessionFactory.getCurrentSession(); // 这里不能用getCurrentSession();// 只有事务管理器存在才可以,@Trasactional注解
for(int i=0;i<50;i++){
User user = new User();
user.setUsername("王立");
user.setPassword("124");
session.save(user);
}
}
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
HibernateTest hibernateTest = (HibernateTest) ac.getBean("hibernateTest");
hibernateTest.save();
}
}
11. 删除表时候 注意级联 问题 , 如 forum topic reply ;
1.先删除 reply 然后删除 topic 然后删除 forum
2.反过来删除的话: 如删除 forum ,必须设置级联删除,否则报错 ..
12.
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");// 注意,这里 spring在 初始化时候(不管是J2SE 还是JavaEE,都会把扫描包里面注解的类实例化,即调用Service....Action等 的构造方法)
13. "FROM "+clazz.getSimpleName()+"WHERE id IN(:ids)") 拼接 hql语句 不要 忘记 空格 fromForum from Forum
错误: ----------- 》node to traverse cannot be null!
14. 泛型 class BaseAction <T> {
public BaseAction() {
try {
// 通过反射获取model的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
// 通过反射创建model的实例
model = clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public class ForumAction extends BaseAction<Forum> {
// 从这里看出 一般在继承情况下 制定 T的类型 且 仍然 是 BaseAction<Forum> --> BaseAction<T>
//在那个类上面指定 ,那个类里面的方法 就适应
}
15. 泛型 T 始终 报错 java.lang.Class cannot be cast to java.lang.reflec
范式应该在编译的时候就指定,而不是运行时。
类级别 的 很像 容器
List<String> list = new ArrayList<String>();
list.add(T t); -------> list.add("必须是String类型");--> 自己指定
16. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'topicService' defined in file [D:\apache-tomcat-7.0.54\webapps\Fenye\WEB-INF\classes\com\wl\fenye\service\TopicService.class]: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.wl.fenye.service.TopicService]: Common causes of this problem include using a final class or a non-visible class; nested exception is net.sf.cglib.core.CodeGenerationException: java.lang.ClassCastException-->java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
此错误 原因还是 泛型 T 的问题 , 除了 必须使用继承 的方式制定 T 的类型(在编译阶段 ), 且 必须 Action 调用的时候 也制定 才可以
@Resource // 注入后Service 不需要在写 setter getter 方法
private ForumService<Forum> forumService;
@Resource
private TopicService topicService; // ------------------ > 错误 !!!!!!!!!!!
17. 这个错误 感觉 有点奇怪 -------->
abstract BaseDaoImpl implements BaseDao 时候 ,里面的方法必须 加上 @Override
否则 下面 各方面的继承 竟然不认 --------> 注意
18. 严重: Servlet.service() for servlet [CartAction] in context with path [/ShopingCart] threw exception
java.lang.NullPointerException
at com.wl.shopping.Action.CartAction.doGet(CartAction.java:28) cartService.findAll(); //说明没有 new对象 即 使用此方法
private CartService cartService;
private CartService cartService = new CartService();
普通的jsp编程 中忘记 new对象 (混淆 了 ssh 编程 ,ssh中 被spring管理后就不需要 实例化 了 )
19. 注意 getcurrentSesison()的 使用 ,必须在配置 @Transactional注解(时候,事务管理器存在情况下才可以使用)
也就是 Service被Spring管理 ,Service里面注入了 SessionFactory, 且 被@Transactional注解
public class SpringTest {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void saveUser(){
SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");
User user = new User();
user.setPassword("1234");
user.setUsername("wangli");
sessionFactory.openSession().save(user);
20.
Java
public class UserServiceImpl extends DaoSupportImpl<User> implements UserService {}
不要写反 -------------->
public class UserServiceImpl implements UserService extends DaoSupportImpl<User> {}
21. private Department department = new Department(); // ----------->注意,返回这里的时候,除非是从数据库中查询则会返回一个对象,否则一定要自己实例化,且不需要 setter getter方法,不适用ModelDriven则需setter getter
22. 由于ActionContext.getContext().put("forumList",forumList); //forumList在遍历的时候
<c:forEach var = "forum"
<a href="forum_show.action?id=${id}" /> ---->id 是可以直接从 forum中取出来的.
23.分页时候,一直显示在第一页不变是因为忘记在Action中 pageNum pageSize生成 getter setter方法
24. 做权限时候,比较复杂:
1. 准备权限的数据库数据,映射实体: user, role(可以暂时使用admin测试,后面再分配) ,privilege
2.使用监听器初始化 ,把顶级权限 数据放入application中
3.left.jsp 中遍历topPrivilege; 并增加user实体方法,hasPrivilegeByName();
4.拦截器的使用
25.下面的代码片断:
xmlns="http://www.w3cschool.cc"
规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3cschool.cc" 这个命名空间。
一旦您拥有了可用的 XML Schema 实例命名空间:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
xsi:schemaLocation="http://www.w3cschool.cc note.xsd"
26.
Cannot forward after response has been committed
if(code.toLowerCase().equals(sessioncode.toLowerCase())){
//、 --------------->数据库中验证
User u = new User();
u.setUsername(username);
u.setPasswd(passwd);
u = userSerivce.checkUser(u); // -------->给 u 重新赋值
if(u!=null){
request.getSession().setAttribute("loginuser", u);
}else{
request.setAttribute("msg", "您登陆的用户名或密码错误!!");
response.sendRedirect("/eshop/index.jsp");
return ; //-------------->注意这里一定要加上return,否则代码还会向下执行
}
request.getRequestDispatcher("/WEB-INF/jsp/userAction/list.jsp").forward(request, response);
}else{
request.getRequestDispatcher("/WEB-INF/jsp/userAction/error.jsp").forward(request, response);
}
27.String sql = "insert into goods(goodsName,goodsPrice,goodsAllNum,publisher,photo,goodsIntro) values(?,?,?,?,?,?)";不要写成 ------>
String sql = "insert into goods(goodsName,goodsPrice,goodsAllNum,publisher,photo,goodsIntro) values('?','?',?,?,?,?)" 之类的
28. sqlHelper 中 ------>使用 public static ResultSet executeQuery(String sql,Object[] parameters) 而不用 String parameters[];
29. 查询使用方法 executeQuery, insert,update 等用 executeUpdate();
30. 使用mysql 查询总数量时候,注意一定要 先
// 只有一条记录
coutRs.next(); ResultSet.next(); ------->
count = coutRs.getObject(1);
31. 文件上传所出现的问题:
<form action = "Goods_add" method ="post" enctype="multipart/form-data">
made:<input type="text" name="made"></input>
goodsName:<input type ="text" name="goodsName"/><br/>
goodsPrice:<input type ="text" name="goodsPrice"/><br/>
goodsAllNum:<input type ="text" name="goodsAllNum"/><br/>
file:<input type ="file" name ="photo"/><br/>
goodsIntro:<textarea rows="5" cols="5" name="goodsIntro"></textarea>
<input type="submit" value = "提交" />
</form>
-------------> enctype="multipart/form-data" 表示使用二进制流的形式,后台request.getParamenter();完全获取不到值 了
方法: 直接在 action? 后面附带参数或者 使用JavaScript动态在action后面赋值参数
32.
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
原因: 插入数据 sql语句错误 , executeQuery改为executeUpdate()
33. EL 表达式 取不到值session中user 值 的问题 :
if(!rs.next()){
System.out.println("-------->无忧此用户<--------");
return null;
}
rs.beforeFirst(); // 游标没有重置 ,导致本来根据用户名和密码查询到一个用户,却由于rs.next(); 然后第二次rs.next();
导致 rs.getInt(1); rs.getString(2); 等等 都是null 值
while(rs.next()){
user.setUserid(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setTruename(rs.getString(3));
user.setPasswd(rs.getString(4));
user.setEmail(rs.getString(5));
user.setPhone(rs.getString(6));
user.setAddress(rs.getString(7));
}
34. java.lang.NoSuchMethodException: com.wl.mini.UserAction.{1 }()
<action name="userAction_*" class="userAction" method="{1 }">
改为--> 连空格都不能有
<action name="userAction_*" class="userAction" method="{1}">
35.
<c:forEach var="goods" items="${mycart.cart }">
<tr class="mytr">
<td class="goodsId">${goods.goodsId }</td>
<td>${goods.goodsName }</td>
<td>${goods.goodsPrice }</td>
<td>${goods.goodsNum }</td>
<td><button onclick="removeGoods()">删除</button></td>
<td><button>修改数量</button></td>
<td><button>更新数据</button></td>
</tr>
</c:forEach>
在遍历时候 没此迭代的数据 千万不要写成 id="" (否则id就不唯一了) 写成 class
36.
else if(flag.equals("logout")){
System.out.println("--------------->注销admin登录");
request.getSession().removeAttribute("user");
response.sendRedirect("admin"); // 重定向到此 action中
// 注意下面的不能再次使用请求转发了,否则参数仍然带着,继续登录
// request.getRequestDispatcher("/WEB-INF/jsp/admin/login.jsp").forward(request, response);
}
37..
frameset 遇到的问题:
这是一个经常遇到的问题,特别是在用frame框架的时候,解决办法也很简单:
window.location 改为 top.location 即可在顶部链接到指定页
或window.open("你的网址","_top");
Response.Write("<script language='jscript'>window.open('" + Request.QueryString["url"].ToString() + "','_top');</script>");
38.
tomcat7 存入中文cookie时候回报错;
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
还上Tomcat7之后再次测试,异常终于重现,通过调试发现由于在登陆的时候需要使用Cookie来保存用户的登陆信息,而Tomcat7中cookie对中文的支持不够好,直接将中文字符的登陆名写入cookie时会引发异常,所以需要先转码,才不会出现上述的异常。
正常写入不算完事,因为此时后台解析cookie值的代码取到的值是乱码,使用cookie是无法登陆的;这就需要在后台验证cookie登陆时,得先将取得到的cookie值转成UTF-8格式之后在对比数据库确认登陆信息是否正确。
页面JS转码:encodeURI('你是');
后台Java解码:URLDecoder.decode("%E4%BD%A0%E6%98%AF","UTF-8");
39. 问题:
mysql 数据删除后 不会从最大自增的问题; 删除的数据id 空着不用;
40.
启动项目时报以下异常
严重: Exception loading sessions from persistent storage
java.io.EOFException
遇到上述异常,删除Tomcat里面的work\Catalina\localhost下的项目文件内容即可解决.
原因是由于项目测试中class文件或者其它文件更新过频繁。
之前经常碰到页面修改后,重新发布的项目页面还是原样,不管删掉tomcat/webapps/发布的项目还是重新部署,都无法显示修改后的效果,
但是其他页面修改后又能显示。真是莫名其妙。
现在才知道是tomcat的问题,同样删除Tomcat里面的work\Catalina\localhost下的项目文件内容即可解决.
41.
对比 struts2 和 eshop(jsp 版本)程序中的分页情况 ;
看来 使用 push(pageBean的方式);只能使用struts2的 OGNL表达式了
request.setAttribute("pageBean",pageBean); // 则可以使用 jstl 遍历比较方便
42.
No result defined for action and result input
Posted on 2009-01-06 21:41 沙漠中的鱼 阅读(23055) 评论(20) 编辑 收藏 所属分类: 开源框架
这是struts2的一个拦截器报的错误,当你的form中的数据有问题,比如说
<input type="text" name="receiverLoginID" value="<%=name%>"/>
当 name值为NULL时,就出这个错了,所以你可以在当前页面加入以下标签
<div style="color:red">
<s:fielderror />
</div>
它就会显示拦截器的错误,并在struts的XML中对应action里加如
<result name="input">/AddProducts.jsp</result>
让他把错误返回到该页面就可以了
struts2中默认的是如果错误发生就跳转到input
我常犯得错误是: 工具使用 value=${topic.id } 没有 " ";
id:<input type="hidden" name="id" value="${topic.id }"/>
这种错误常常是表单 数据有误
43.
java.lang.OutOfMemoryError: PermGen space
内存溢出了
preferences ------ java ---> installJres ------> edit ->设置参数
在Eclipse中的话设置jvm参数即可 -Xms 512m -Xmx 512m
44. <s:form action="forum_show?id=%{id}"></s:form> 不能写成
<s:form action="forum_show?id=${id}"></s:form> // struts2 标签体里面 不支持 EL表达式
<form action="forum_show.action?id=${id}" method="post"> </form>
45. 内存溢出
jre里面配置 即可
-Xms512m -Xmx512m
46.
User user = userService.getById(model.getId());
user.setAvatar(getUploadFileName()); // 把名字存入数据库 , 注意,更新数据,一定需要先从数据库中取出来,传过来的model并不能修改更新
userService.update(user);
return "toList";
}
47. strut2 上传文件 File upload, 不需要 File upload = new File(); // 不需 实例化,但是上传时候
一定不要 和实体User ..等的字段如 String photo, 而上传文件 <input type="file" name="photo" 重名否则出错
48.
String root = ServletActionContext.getServletContext().getRealPath("/images/user_photo");
// 注意得到的是目录/images/user_photo 和/images/user_photo/一样的结果
49.
关于eclipse buildpath的jar包不能复制到tomcat lib下的问题
建了一个web项目,需要引入mysql的jar包,用buildpath方式引入到项目,启动tomcat怎么也不能把这个jar复制到tomcat的lib目录下,所以肯定不行的,只能手工复制到lib中,后来找到一个解决方法。 项目上点击右键--》properties--》DeploymentAssembly--》选择你要复制到lib下的libraries就行
50.
SpringMVC 的标签库 也可以回显
如表单标签 ,同struts一样 如 :
<form:form action="emp" method="POST" modelAttribute="employee">
<form:input path="lastname"/> // 相当于 <input type="text" name="lastname" value="${employee.lastname}"/> jstl 没有此属性,不会报错,顶多不显示
<form:input path="password"/>
</form:form>
// 这些标签会回显 ,但是注意了,和struts2一样,这些属性 -->存在才行
Action 中 !!
ActionContext.getContext().put("employee",employee);
Controller
map.put("employee",employee);
51.. Android开发出现的错误 ,总是报空指针,原因是 低级的,把setContentView(R.layout.two); 放在了 Button button实例化的 后面
setContentView(R.layout.two);
Button spotBtn = (Button) findViewById(R.id.showSpot);
Button bannerBtn = (Button) findViewById(R.id.showBanner);
52. junit Test 必须有一个 默认的无参构造函数
53.
// InputStream fis = Main.class.getClassLoader().getResourceAsStream("rule.properties");
InputStream fis = new FileInputStream("src/rule.properties");
这两个文件的路径是不同的 ,一个在 bin 下面,一个在 src下面
54. 自己编写的爬虫程序 ,发现个别网站采集不了,原因是 可能网站的防盗链,通过非本站跳转访问的链接全部跳转 到错误页面,方法:
httpGet = new HttpGet(url);
httpGet.setHeader("Referer","http://baiduyun.57fx.cn/album-detail-id-26796.html");
HttpResponse httpResponse2 = httpclient.execute(httpGet);
加上头信息 即可,网站必须 有来源页.访问前的网页
55.The request sent by the client was syntactically incorrect. SpringMVc 参数问题,表单对应字段如 <input type="text" name="age" value="aa"/>错误!!
不能将 字符串付给 控制器中 POJO User的 int age,(改为Integer应该没有错,Integer接受字符串 "aa" 应该被变为NULL接收了 )
56. 数据库问题,insert into user(name,age) values("wangli","18"); 其中 name varchar(20),age int 类型
测试发现jdbc和mysql控制台执行此语句都成功了,原因是数据库中会自动转换String类型为 其 设置的字段。但是不能写成
insert into user(name,age) values("wangli","18abc");之类的,否则转换出错了!
这种现象 非常类似 Struts2 和SpringMVC中(内置)类型转换器的作用
55.
java 根据 url 读取网页内容 遇到403问题
分类: JAVA 2014-11-22 15:17 693人阅读 评论(0) 收藏 举报
[java] view plaincopy在CODE上查看代码片派生到我的代码片
URL url = new URL("****************");
StringBuffer html = new StringBuffer();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");
InputStreamReader isr = new InputStreamReader(conn.getInputStream(),"utf-8");
设一下请求属性就行了:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
conn.setRequestProperty("User-Agent", "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");
56. 小问题,jsoup读取网页源代码,提取后,不知道为什么都把<br/>换成了<br>,虽然正确,但是生成PDF的话,却不能生成,因为其严格的形式
连<img 标签都被它修改,操蛋的事情<img ../>被修改为<img ..> ,fuck
57. 在使用自己的字符串截取时候,遇到 突然不能截取的情况,可能原因就是自己 给字符串加上+\r\n的原因,在没有写入文件中前,我直接用正则匹配此字符串,是截取不了的,蛋疼的错误都被我遇到了
反过来再次从写入的文件中读取后再次截取,估计又成功了。
while((line=reader.readLine())!=null){
html.append(line+"\r\n");
}
jiequ = matcher.group(0); // 0 就表示第一个 匹配到的字
URL url = new URL("http://blog.csdn.net/lmj623565791/article/details/37992017");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");
InputStream in = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8"));
String line = "";
StringBuffer htmlbuffer = new StringBuffer();
while((line=reader.readLine())!=null){
htmlbuffer.append(line+"\n"); //------------------->zhuyi ,dont't \r\n le
}
String html = htmlbuffer.toString();
这个问题最终还是不能解决,只能换成httpclient了
58.
Android 使用HttpClient 中遇到的问题
1.主线程里面不能连接网络
2.使用handler时候,注意 Looper.prepare(); ... handler ... Looper.loop();
3. 启动 含 handler 的 子线程 start ();
59.
下面将介绍TextView实现滚动的三种方式:
1、嵌套在ScrollView或者HorizontalScrollView中
垂直滚动:
<scrollview android:layout_width="fill_parent"
android:layout_height="fill_parent" android:scrollbars="vertical">
<textview android:text="..."/>
</scrollview>
水平滚动:使用标签<horizontalscrollview></horizontalscrollview>
2、设置ScrollingMovementMethod
代码中添加:
TextView.setMovementMethod(new ScrollingMovementMethod());
XML中配置:
android:scrollbars="vertical"
3、使用Scroller来自定义TextView
4.小显示条 Toast显示时候,别总是忘记写 .show();方法
60. jar 包 版本问题
error at ::0 can't find referenced pointcut myPointcut
错误原因:如果你用的JDK版本是1.6的话,而引用的aspectjrt.jar是spring-2.0中包含的jar包的情况下就会报这样的错误。
解决方法:就是下载最新的aspectjrt的jar包即可,或者使用spring3.0中的包!在这边我使用的aspectjrt.jar居然是1.1的 所以出错了 改为aspectj最新版aspectj就没问题了
61.测试发现,某个方法里面没有对于异常没有 直接处理的,无论在哪里抛出的,当前方法都会直接停止掉,包括
try catch{throw new RuntimeException()}
但是finally{代码还会执行}
62.
runtime异常是运行是异常,如果抛出runtime异常,程序会停止运行,一般异常抛出程序不会停止,
甚至有事如果程序做了try catch 处理,catch块里是空的,即使程序发生异常,也会继续运行,
且不能发现程序发生异常,所以在写程序的时候不建议写空的catch块,不便于程序的维护;
而runtime异常一旦抛出程序会即刻停止运行
如果 我们
try {
File f = new File("H:/test.jsp");
FileInputStream fis = new FileInputStream(f);
} catch (Exception e) {
throw new RuntimeException("文件没有找到");
}
System.out.println("------>此句不会再次执行");
运行时异常 如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。
Runtime exception,也称运行时异常,我们可以不处理。
当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,
它就是运行时异常,并且这种异常还是最常见的异常之一。
63.
hibernateValidater 中的 @NotNull无效,使用@NotEmpty代替
@NotEmpty(message="用户名不能为空!!")
64.
一直出现一个很蛋疼的问题,Hibernate突然不能自动更新表和创建表了
原因:
@Lob
@Column(name="longContent", columnDefinition="CLOB", nullable=true) // mysql 可能没有这个字段 clob的原因吧
private String longContent ;
但是
@Lob
@Column(name="pics", columnDefinition="BLOB", nullable=true) //可省略,但是不指定 根据第一次生成类型,可能是 shortblob blob longblob
@Basic(fetch = FetchType.EAGER)
private byte[] pics ; //图片文件
却可以
65.
SpringMVC @requestBody 返回字符串乱码的解决方法
原因: 字符串转换和对象转换用的是两个转换器,而String的转换器中固定了转换编码为"ISO-8859-1"
1.修改 <mvc:annotation-driven>为
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
2.方法二:
亲测:
@ResponseBody //Response Headers Content-Type:application/javascript(js文件) Content-Type:text/html;charset=utf-8
@RequestMapping(value="/testJson",produces="text/html;charset=utf-8") // produces 结果,产品 (这个注解的属性相当于给Response设置返回信息,而@Response注解没有属性可以设置,故只有在这里设置了)
public String testJson() throws JSONException{
System.out.println("--------->testJson-org");
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
// json 的格式 很类似 Java的Map 集合 ,故可以方便的 转换
JSONObject object1 = new JSONObject();
object1.put("name", "王立");
object1.put("password", 1234);
JSONObject object2 = new JSONObject();
object2.put("name", "张华天");
object2.put("password", 124551);
jsonArray.put(object1);
jsonArray.put(object2);
json.put("users", jsonArray);
System.out.println("------------>"+json.toString());
return json.toString();
}
注意返回字符串就用这种方法就可以了
测试 : 虽然SpringMVC支持原生 request,response
但是使用
public String testJson4(HttpServletResponse response,Writer writer) throws JSONException, IOException{
response.setContentType("text/html;charset=utf-8");
...
writer.write(jsonStringer.toString());始终解决不了乱码问题;Fuck;不要令 自己那么变态
66.
出现找不到类 一般不是少 jar,就是jar冲突
如: hibernate-jpa-2.1-api-1.0.0.Final.jar 和j2ee6 library中的javax.persistence.jar冲突
一直运行都 报错,但是最后我把 j2ee6 library remove然后重新引入,又不报错了,不能说什么,只能说犯抽.
我的运气真是无语形容了,Fuck
这两个包使用的是jpa的注解(如@Entity @Table等等 )
67. 我使用最新版hibernate的问题,里面包含了很多了,不在需要sl4j-log4j.jar sl4j.api.jar 只需log4j即可
估计hibernate里面已经有处理日志的类了
68.
故,使用jar包,为了安全,我们一个也不要用myeclipse的,连javaee1.6 也不要
69. 测试发现 jsp 的pageEncoding="utf-8" 指定的是文件的编码格式(程序也会以此种格式编译)
如果 pageEncoding="utf-8"格式和 文件的编码格式不一致也会报错,使用myeclispe可以自动转换
70.
import org.springframework.transaction.annotation.Transactional;
要相信自己,如果认为自己实在没有错
就需要看 包 是否导入错误了
甚至注解导入错误了,比如我在hql查询 时候,完全正确但是查询结果一直为null
原来是不小心导成 javax.persistence.Transactional (但我发现导成这个平时也没错啊,只有一个测试出错,奇怪)
71.最蛋疼的 bug,哎,终于找到了,不细心啊
AOP的罪过
发现1: 我配置了AOP,拦截的方法正好是com.gs.oa.service.PrivilegeService.findTopList()方法 ,然而 AOP里面都没有写返回值,这是非常不对的,AOP把将要 return的 "返回值" 直接扔掉了
<aop:pointcut expression="execution(public * com.gs.oa.service.*.*(..))" id="pointcut"/>
发现2:只有在PrivilegeService类里面写的方法才被拦截到 ,父类继承的方法 都没有被拦截
72. QQ侧滑 使用 SlideMenu开源组件时候,需要删除我们 建立项目的 android-support-v4.jar包
因为,开源组件里面已经有一个了
73.
注意 我们登录的时候 放入session.setAttribute("user",user); user 不要设置 id值哦,否则 ${user.id } 登录后一直都不会为null
Struts2这点比较好,${id} 只从值栈中取出 request域中
@RequestMapping(value="/edit",method=RequestMethod.POST)
public String edit(User user){
System.out.println("-------更新-------");
User u = userService.getById(user.getId());
u.setUsername(user.getUsername());
u.setPassword(DigestUtils.md5Hex(user.getPassword()));
userService.update(u);
return "redirect:/user/list";
}
<form action="user/${user.id==null?'add':'edit' }" method="post">
<input name="id" type="hidden" value="${user.id }"/>
<input type="hidden" name="_method" value="${user.id==null?'PUT':'POST' }"/>
<input type="text" name="username" value="wangli"/>
<input type="password" name="password" value="123"/>
<input type="submit" value="提交"/>
</form>
74.
create table user(id integer primary key autoincrement,name varchar(20),blognum int)
测试发现 :
autoincrement 只能写在 integer类型上面,其他类型int也报错,注意 int 类型放在主键上面也不会自动增长
类型声明为id integer primary key 就会自动增长,无需写 autoincrement了
测试发现 sqlite select Name from user; 和 select name from user; 结果一样 ,故字段和mysql一样是不区分大小写的
76.
查询出来的cursor的初始位置是指向第一条记录的前一个位置的
cursor.moveToFirst()指向查询结果的第一个位置。
一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的,一般这样来用:while(cursor.moveToNext()){ }
cursor.moveToPrevious()是指向当前记录的上一个记录,是和moveToNext相对应的;
cursor.moveToLast()指向查询结果的最后一条记录
使用cursor可以很方便的处理查询结果以便得到想要的数据
77.
handler.post(new Runnable() {
run(){
里面方法等同于主线程,故这里不要访问网络
}
78. 解决第三方 lib 导出 v4包重复的解决办法 :可以删除自己的,也可以 复制第三方lib下面的然后 粘贴覆盖 自己的 即可
java 开发中的debug的更多相关文章
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- Java开发中常用jar包整理及使用
本文整理了我自己在Java开发中常用的jar包以及常用的API记录. <!-- https://mvnrepository.com/artifact/org.apache.commons/com ...
- Java开发中常见的危险信号(中)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- 完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络]
完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络] 地址:http://blog.csdn.net/qq_35101189/article/details/53729720?ref=m ...
- Java 开发中的对象拷贝
前言 在 Java 开发中,很多时候需要将两个属性基本相同的对象进行属性复制,比如 DO 转 VO等等. 本文主要介绍自己实现的简易拷贝工具类与 Spring 提供的属性拷贝的对比. Spring 提 ...
随机推荐
- std::string 字符串大小写转换(转)
该问题归结为std::transform函数的使用 函数原型 template < class InputIterator, class OutputIterator, class UnaryO ...
- CSS 从入门到放弃系列:CSS的引入方式
css的四种引入方式 内联方式(行间样式) <div style="width:100px;height: 100px; background-color: red"> ...
- 6、Django实战第6天:用户登录
今天开始,我们需要来写后台逻辑了.... 后台逻辑代码都是编写在views.py文件里面,今天要完成的登录功能,因此来编辑users.views.py 这里我们根据请求方法来判断分为2种情况,网页默认 ...
- centos7下mail邮件的查看删除、禁止部分应用发邮件
查看与删除 mail命令进入 & p #显示当前邮件& 2 #显示标号为2的文件 & d 1-100 ...
- mysql 获取当前日期及格式化(转)
MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段,format:日期格式 select now ...
- POJ 2068 Nim(博弈论)
[题目链接] http://poj.org/problem?id=2068 [题目大意] 给出两队人,交叉放置围成一圈,每个人能取的石子数有个上限,各不相同 轮流取石头,取到最后一块石头的队伍算输,问 ...
- 【旋转卡壳】poj3608 Bridge Across Islands
给你俩凸包,问你它们的最短距离. 咋做就不讲了,经典题,网上一片题解. 把凸包上的点逆时针排序.可以取它们的平均点,然后作极角排序. 旋转卡壳其实是个很模板化的东西…… 先初始化分别在凸包P和Q上取哪 ...
- 【莫队算法】【权值分块】poj2104 K-th Number / poj2761 Feed the dogs
先用莫队算法保证在询问之间转移的复杂度,每次转移都需要进行O(sqrt(m))次插入和删除,权值分块的插入/删除是O(1)的. 然后询问的时候用权值分块查询区间k小值,每次是O(sqrt(n))的. ...
- Echarts无数据时只显示文字不显示动画
只需要在option中加入如下代码即可: noDataLoadingOption: { text: '暂无数据', ...
- [HDU6271]Master of Connected Component
[HDU6271]Master of Connected Component 题目大意: 给出两棵\(n(n\le10000)\)个结点的以\(1\)为根的树\(T_a,T_b\),和一个拥有\(m( ...