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下面的然后  粘贴覆盖 自己的 即可
posted @ 2015-10-01 22:51  need88  阅读(1437)  评论(0编辑  收藏  举报