分类文章存档: Java编程和Java企业应用

贴吧进度-09-05-07

今天写到创建帖子,在编码上遇到问题,jUnit下调用函数没有任何问题,那就表示问题出在Struts Filter捕获的文本上。

找了好几个方法都没有奏效。

游客登录情况下的Session还存在一点问题,原因是session类型转换上的问题,今天还没有好好的研究一下。

至此为止,登录注册写完了,静态校验写了一个毛胚,今天写完的现实帖子的列表,表现层用OGNL完成的,终于脱离开代码混杂的页面。

解决了一个tx.commit的错误,原来是《开发者突击》书上的代码有问题,我参考了Hibernate的官方文档,终于发现了错误的原因,tx.rollback()应该在catch里面而不是final里面。

写着写着就感觉自己太多的不足,太多要学习的地方,加油!

学习使用log4j

今天用Log4j时候,感觉只显示message讯息太少了,直觉上这些流行的工具应该会提供更强大的定制功能,就去google了一下

果不其然:相关配置参数如下

# Pattern to output the caller’s file name and line number.
# %m 输出代码中指定的消息
# %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
# %r 输出自应用启动到输出该log信息耗费的毫秒数
# %c 输出所属的类目,通常就是所在类的全名
# %t 输出产生该日志事件的线程名
# %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
# %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

通过配置这些参数可以定制自己想要的记录。

我修改 log4j.properties 文件后却没有得到我预想的效果,经过检查,发现在 appender 的定义名与下面使用的不一致,唉,也不知道当初哪里拷贝来的代码

并且如果想使用定制模式,应该设定log4j.appender.A1.layout=org.apache.log4j.PatternLayout (其中A1为上面设定的输出位置,我使用的是ConsoleAppender)

下面是我完整的 log4j.properties 阅读全文 »

No configuration found for the specified action

Tomcat 控制台打出如下警告:
WARN – No configuration found for the specified action: ‘xxxxx’in namespace: ‘/’. Form action defaulting to ‘action’ attribute’s literal value.

主要由于在写struts2表单时有给action指定全名,如:<s:form action=”xxxAction.do”…>,直接写成<s:form action=”xxxAction”…>即可,因为在struts.xml中struts.action.extension属性有指定啦。

有一个关于在namespace上的设置在 hi.baidu.com/mum0532/blog/item/128f9a64fa8594f5f6365457.html 。这位朋友讲的很透彻很详细

关于Struts2 的 namespace 详细解释 www.javaeye.com/topic/125743

Servlet JSP 的 Java类的最简单MVC模型

来自Head First Servlet and JSP

XML语言: web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> –>

<servlet>
<servlet-name>Ch3 Beer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Ch3 Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>

</web-app>

HTML语言: form.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Beer Selection Page</title>
</head>

<body>
<h1 align="center">Beer Selection Page</h1>
<form method="post" action="SelectBeer.do">
select beer characteristics<p>
Color:
<select name="color" size="1">
<option>light
<option>amber
<option>brown
<option>dark
</select>
<br>
<br>
<center>
<input type="submit">
</center>
</form>
</body>
</html>

Java语言: BeerSelect
package com.example.web;

import com.example.model.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class BeerSelect extends HttpServlet
{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
// response.setContentType("text/html");
// PrintWriter out = response.getWriter();
// out.println("Beer Selection Advice<br>");
String c = request.getParameter("color");
// out.println("<br>Got beer color " + c);

BeerExpert be = new BeerExpert();
List result = be.getBrands(c);

// Iterator it = result.iterator();
// while (it.hasNext())
// {
// out.print("<br>try: " + it.next());
// }

request.setAttribute("styles", result);
RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forward(request, response);
}
}

Java语言: BeerExpert
package com.example.model;

import java.util.*;

public class BeerExpert
{
public List getBrands (String color)
{
List brands = new ArrayList();
if (color.equals("amber"))
{
brands.add("Jack Amber");
brands.add("Red Moose");
}
else
{
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return brands;
}
}

Java Server Page语言: result.jsp
<%@ page import="java.util.*"%>

<html>
<head>
<title>Beer Recommendations JSP</title>
</head>

<body>
<h1 align="center">Beer Recommendations JSP</h1>
<p><%
List sytles = (List)request.getAttribute("styles");
Iterator it = sytles.iterator();
while (it.hasNext())
{
out.print("<br>try: " + it.next());
}
%>
</body>
</html>

Java中的POST引发的…

因为一直想写一个刷人气的工具,其中最基本的就是post方法了,然后再收集页面中的元素。今天我就开始着手写Java的POST方法。

在Java.net.*;中用URL构造地址,然后用流写入,似乎应该是很简单的方案,我却一直没成功。我百度Google了很久,参考了很多别人代码,似乎很容易实现,可是我的一直问题,而我觉得和网上提供的一样。我的代码如下

package netStudy01;
import java.io.*;
import java.net.*;

public class PostBaidu
{
public static void main(String[] args)
{
   try
   {
    URL url = new URL("http://localhost/xhpx_web/gradequery.asp");
    try
    {
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
     HttpURLConnection.setFollowRedirects(false);
     conn.setInstanceFollowRedirects(false);
     conn.setRequestMethod("POST");
     conn.setDoOutput(true);
     conn.setDoInput(true);
     conn.setRequestProperty("User-Agent",
       "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)");
     conn.setRequestProperty("Content-Type",
       "application/x-www-form-urlencoded");
    
     OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(),"ASCII");
     String request = "exam_id=123&submit=%CC%E1%BD%BB";
     out.write(request);
     out.flush();
     out.close();
    
     BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
     String line;
     StringBuffer content = new StringBuffer();
     while ((line = in.readLine()) != null)
     {
      content.append(line + "\n");
     }
     System.out.print(content);
    } catch (IOException e)
    {
     e.printStackTrace();
    }
   
   
   } catch (MalformedURLException e)
   {
    e.printStackTrace();
   }
  
}

}

很不幸,返回的数据一直还是这个提交页面,我尝试了好多方法,甚至用ethereal截取POST信息,用IE的POST信息和JVM的POST信息一一对比并增加信息,包括"User-Agent","Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)""Content-Type", "application/x-www-form-urlencoded"都没有什么效果。

如果POST百度,甚至直接都运行时错误,我Java学的太少,完全不知道错误缘由。再加上本来java.net功能就很弱,我想使用Apache.commons.html-client.*的包来完成,这样也能捕获到网页元素。

Goolge了一会才从Apache的项目列表中找到http://hc.apache.org/downloads.cgi这个组件,呵呵,居然是校内网提供的镜像站点,看来校内的架构也用到了Apache的开源阿。

1.7M下完,配好ClassPath和项目jar,打开java文档,也就是API说明吧,铺天盖地的英文有点怕…呵呵,慢慢看吧,压缩包内还有几个小例子,可以供参考。

网上详细的资料不多了,得研读好一会,继续学习,Lingoes开着,英语果然很重要阿““

想起以前在.NET平台下面做,轻松容易很多,不用自己辛苦的找组件,MS的实力摆在哪里,全都提供好了。