??xml version="1.0" encoding="utf-8" standalone="yes"?>
错误前代码:
if(admin.getSadminName()==null||admin.getSadminName().length() < 1) {
addFieldError("admin.sadminName", "用户名错?");
return INPUT;
}
if(admin.getSadminPass()==null||admin.getSadminPass().length() < 1) {
addFieldError("admin.sadminPass", "密码错误Q?);
return INPUT;
}
if(vn==null||vn.length()<1) {
addFieldError("vn", "验证码输入错误!");
return INPUT;
}
String ValidateNumber = sessionMap.get("ValidateNumber").toString();
logger.info("ValidateNumber="+ValidateNumber);
logger.info("vn="+vn);
if(ValidateNumber==null||ValidateNumber.length()<1) {
addFieldError("vn", "验证码baocun输入错误Q?);
return INPUT;
}
if(ValidateNumber.equalsIgnoreCase(vn)==false) {
addFieldError("vn", "验证码输11入错误!");
return INPUT;
}
Tadmin cAdmin = adminService.validateAdmin(admin.getSadminName(),MD5.getString(admin.getSadminPass()));
if(cAdmin==null) {
addFieldError("admin.sadminName", "用户名或者密码错?);
System.out.println("用户名密码错?);
return INPUT;
}
sessionMap.put(NewsUtil.ADMIN_USERKEY, cAdmin);
return SUCCESS;
如果是这L。action只能执行一ơ,好像action中的参数一直没有释放,所以再ơ提交,action一直处于运行状态,再次提交Q系l不会改变?br />
如果修改?br />
//查用户名是不是存?br />
if(NewsUtil.checkNull(admin.getSadminName())){
//addFieldError("admin.sadminName", "您输入的用户名有错误");
//actionMessage.
addActionMessage("您输入的用户名有错误");
System.out.println("您输入的用户名有错误");
return INPUT;
}
//查密码是不是I或者null
if(NewsUtil.checkNull(admin.getSadminPass())){
//addFieldError("admin.sadminPass", "您输入的密码不正?);
System.out.println("您输入的密码不正?);
return INPUT;
}
if(NewsUtil.checkNull(vn)){
//addFieldError("vn", "您输入验证码错误");
System.out.println("您输入验证码错误");
return INPUT;
}
String validateNumber = (String)SessionMap.get("ValidateNumber");
if(NewsUtil.checkNull(validateNumber)){
//addFieldError("vn", "你的验证码不正确。请重新输入");
System.out.println("你的验证码不正确。请重新输入");
return INPUT;
}
if(validateNumber.equalsIgnoreCase(vn)==false){
//addFieldError("vn", "您输入的验证码不正确。请重新输入");
System.out.println("您输入的验证码不正确。请重新输入");
return INPUT;
}
Tadmin cAdmin = adminService.validate(admin.getSadminName(), MD5.getString(admin.getSadminPass()));
if(cAdmin == null){
//addFieldError("admin.sadminName", "对不P您输入的用户名或者密码有问题");
System.out.println("对不P您输入的用户名或者密码有问题");
return INPUT;
}
//开始更新用L陆信息的更新
cAdmin.setIloginTime(cAdmin.getIloginTime()+1);
//cAdmin.setSlastLoginIp(validateNumber)
cAdmin.setSlastLoginTime(new Date());
adminService.update(cAdmin);
SessionMap.put(ShopUtil.TADMIN_LOGINED_KEY, cAdmin);
return SUCCESS;
OKl了,我在怀疑是不是我用的版本中有q样的一个bugQ?
今天早晨myeclipse自动升了,发现q个功能已经修复了, 但是再次使用的时_q是自动关闭了,艾!看来版本q是要稳定后才能使用啊,q一位惊天在自动升已经更新了该功能
真晕
web.xml <xwork> import com.opensymphony.xwork.ActionSupport; /**
<?xml version="1.0" encoding="GB18030"?>
<web-app version="2.4"
xmlns=" xmlns:xsi=" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"
<include file="webwork-default.xml"></include>
<package name="default" extends="webwork-default">
<action name="helloWorld" class="cn.javaworker.yeming.action.HelloWorld">
<result name="success">index.jsp</result>
<result name="input">hello.jsp</result>
</action>
</package>
</xwork>
hello.jsp
<%@ taglib prefix="ww" uri="/webwork"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Enter you name</title>
</head>
<body>
<ww:form action="helloWorld">
<ww:textfield label="please enter user name" name="name"></ww:textfield>
<input type="submit"/>
</ww:form>
<form action="helloWorld.action">
please enter you name:<input type="text" name="name" value="<ww:property value="name"/>"/>
<input type="submit">
</form>
</body>
</html>
index.jsp
<%@ taglib prefix="ww" uri="/webwork"%>
<html>
<head>
<title>hello page</title>
</head>
<body>
The message generated by my first action is :<ww:property value="message"/>
</body>
</html>
HelloWorld.java
package cn.javaworker.yeming.action;
* @author $author
*/
@SuppressWarnings("serial")
public class HelloWorld extends ActionSupport{
private String message;
private String name;
/**
* @see com.opensymphony.xwork.Action#execute()
*/
public String execute() throws Exception
{
if(name==null||name.equals("")||name.equals("world")){
addFieldError("name","blank names or names of 'world' are not allowed!");
return INPUT;
}
message ="hello "+name+"!\n";
message+="this is the time is: "+System.currentTimeMillis();
return SUCCESS;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the message
*/
public String getMessage() {
return message;
}
}
JDK下面有一个非帔R要的目录Q即Q?$JAVA_HOME/jre/libQ大家用得最普遍的就?JAVA_HOME/jre/lib/ext目录Q可以放|常用的JAR扩展包)了,我喜Ƣ将jtds-1.2.jar文g拯到此目录下,当运行打包好的JARӞ不需要ؓ每一个JAR配置数据库驱动加载\径(当然Q你也可以将jtds-1.2.jar加入到系l环境变量中Q只是你得Reboot your computer而已Q?br />
好了Q下面言归正传,如果你用myeclipse配置了resin服务器,你会发现myeclipseq不能启动resinQ而在控制C打印出来的是resin.conf:241: Required file '\conf\app-default.xml' can not be read for resin:import.Q很明显Q是pȝ找不到app-default.xml'文gQ而这个文件确实在$RESIN_HOME/conf/目录下,打开resin.confQ定位到133行,发现配置文g是这LQ?lt;resin:import path="${resin.home}/conf/app-default.xml"/>Q因?{resin.home}/是Resin的当前目录,所以我们可以换?lt;resin:import path="./conf/app-default.xml"/>Q再启动QOK?br />
resin.conf里面q有一个地Ҏ较有意思,且看211行代码:<web-app-deploy path="webapps"/>Q系l配|的Web应用目录?RESIN_HOME/webappsQ而Eclipse工程发布后是?RESIN_HOME/deployQ所以我们干脆就不用myeclipse里的站点发布功能Q直接修改resin.conf文gQ加载一个外部目录,它手指向你的工E,扑ֈ如下代码Q?40行)<web-app id="/" root-directory="webapps/ROOT"/>Q在后面加上<web-app id="/import" root-directory="D:/eclipse/work/Import/WebRoot"/>?br />
好像问题q不止这么简单,因ؓ我的D:/eclipse/work/Import/WebRoot工程是用Struts框架开发的Q所有在resin启动import的时候,报了如下的错误:
javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl
XML解释器的错误Q顺便在Google上一搜,扑ֈ了三U解军_法,受推荐的Ҏ如下Q?br />?$JAVA_HOME/jre/lib目录下新建endorsed目录Q如果没有的话)Q然后将你工Elib目录下的xercesImpl.jar拯到刚建的那个目录里面Q问题即可解冟?br />
不推荐在$JAVA_HOME/jre/lib下面新徏内容为javax.xml.parsers.SAXParserFactory: org.apache.xerces.jaxp.SAXParserFactoryImpl的jaxp.properties文gQ当Ӟ如果你准备强行这么干的话Q你的Tomcat只能暗无天日了?br />
下面是附加内?br />
附一QApache与Resin集成
1. 更改Apache的文目录:在httpd.conf中找到DocumentRootQ将其后双引号中的内Ҏ?D:/HttpServer/webapps/"
2. 配置Apache的Resin模块Q在httpd.conf最后添加如下代?br /> LoadModule caucho_module "D:/HttpServer/resin/win32/apache-2.2/mod_caucho.dll"
<IfModule mod_caucho.c>
ResinConfigServer localhost 6800
CauchoStatus yes
</IfModule>
3. 更改默认的访问文Ӟ在httpd.conf中找到DirectoryIndex Q在其后dindex.jsp index.php
注意Q每个文件之间用I格间隔开
4. Resin虚拟目录配置Q在resin.conf中找到如下行<host id="" root-directory=".">Q然后加?br /> <web-app id="/import" root-directory="D:/HttpServer/webapps/import"/>
id问\径,root-directory为文目录所在\?br />5. 讄Resin启动Q你必须先在pȝ环境变量中配|JAVA_HOMEQ然后在命o行窗口中q入Resin目录Q输入httpd -installQ安装Resin为Windowspȝ服务Q,httpd -removeQ移除……)
l过以上步骤QResin可以监听处理所有Apache不能处理的文Ӟ包括.jsp, .do及其它控制器路径Qƈ同时解决了用80端口讉K时图片相对\径不对的问题
附二QApache中加入PHP处理模块Qƈ且屏蔽Resin3.1的PHP解释模块
1. 屏蔽resin的PHP处理模块Qresin?.0开始支持phpQ其3.1版本的PHP解释配置是在app-default.xml中(与resin.conf同一个目录)Q只要对servlet配置比较熟悉的都能在app-default.xml中轻易屏蔽PHP解释功能Q打开app-default.xml后,?lt;!-- -->屏蔽如下代码卛_Q?br /> <servlet servlet-name="resin-php"
servlet-class="com.caucho.quercus.servlet.QuercusServlet">
</servlet>
<servlet-mapping url-pattern="*.php" servlet-name="resin-php"/>
<welcome-file>index.php</welcome-file>
2. 配置Apache的PHP处理模块Q在httpd.conf最后添加如下代码(我的PHP是装在D:/HttpServer/php5Q?br /> ## Add php5 module
LoadModule php5_module "D:/HttpServer/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
# Configure php.ini path
PHPIniDir "D:/HttpServer/php5/"
呵呵Q因为Resin的PHP配置不太熟悉Q网上的资料也比较少Q所以还是用了Apache+PHP的处理方式?br />
代码Q?br />/**
* E序开发日期:2006-6-28-16:09:14
* javaworker.cn中程序员Q叶明开?br /> * E序作用Q从q接池中取出一条记录,使用创徏数据库连接,以及释放该连?br /> * E序开发:
*/
package com.javawoker.yeming.jiemie.database;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
/**
*@author 叶明 ---guming123416@gmail.com
*@version $Id: v 1.01 2006/06/38 16:09:14 teodord Exp $
*/
public class Pubconn {
/*
* 创徏U有变量conn为数据库q接对象中Connection
* 创徏U有变量dsye为数据库q接池的DataSource
*/
private Connection conn;
private DataSource dsye;
private static Logger log=Logger.getLogger(Pubconn.class);
/*
* 创徏构造函数PubconnQ在建立class中加载数据源的InitialContext
*/
public Pubconn()
{
try{
Context initCtx=new InitialContext();
if(initCtx==null)
{
throw new Exception("不能加蝲文gContext");
}
dsye=(javax.sql.DataSource)initCtx.lookup("jdbc/yeming");
}catch(Exception ex)
{
ex.printStackTrace();
log.error("在加栽数据库q接池时间发生错?+ex.getMessage());
}
}
/*
* 从连接池中取Z条连接变?br /> *
*/
public Connection getConn()
{
try{
conn=dsye.getConnection();
}catch(SQLException ex)
{
ex.printStackTrace();
log.error("获得q接对象CONN旉发生错误"+ex.getMessage());
}
return conn;
}
/*
* 关闭数据库连接,释放资源
*/
public void closeConn(Connection conn)
{
try{
if(conn!=null)
{
conn.close();
conn=null;
}
}catch(SQLException ex)
{
ex.printStackTrace();
log.error("关闭CONN旉发生错误"+ex.getMessage());
}
}
}
然后建立调用面
代码如下Q?br />
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GBK" contentType="text/html charset=gbk"%>
<jsp:useBean id="yeconn" scope="page" class="com.javawoker.yeming.jiemie.database.Pubconn"></jsp:useBean>
<%
Connection conn=yeconn.getConn();
Statement stmt=conn.createStatement();
String sql="select * from combasicinfo";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
out.println(rs.getInt(1));
out.println(rs.getString(2));
}
rs.close();
stmt.close();
yeconn.closeConn(conn);
%>