简单利用Struts2实现用户登录/测身材
本文最后更新于 2840 天前,其中的信息可能已经有所发展或是发生改变。

前几天看了一本JSP-Struts2相关的书,按照步骤来还是出现了几个问题

二月 16, 2017 12:33:07 上午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin
二月 16, 2017 12:33:07 上午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
二月 16, 2017 12:33:07 上午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 352 ms
二月 16, 2017 12:33:07 上午 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
二月 16, 2017 12:33:07 上午 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.16
二月 16, 2017 12:33:09 上午 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Parsing configuration file [struts-default.xml]
二月 16, 2017 12:33:09 上午 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
严重: Dispatcher initialization failed
Unable to load configuration. - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
	at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
	at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
	at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:221)
	at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
	at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:169)
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
	... 30 more
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name struts has already been loaded by bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:30:124 - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:205)
	... 33 more

二月 16, 2017 12:33:09 上午 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter struts2
Unable to load configuration. - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
	at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:190)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: Unable to load configuration. - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:58)
	at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
	at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
	... 28 more
Caused by: Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:221)
	at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
	at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:169)
	at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
	... 30 more
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name struts has already been loaded by bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.1.8.1.jar!/struts-default.xml:30:124 - bean - jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/sshTest/WEB-INF/lib/struts2-core-2.3.31.jar!/struts-default.xml:65:72
	at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:205)
	... 33 more

二月 16, 2017 12:33:09 上午 org.apache.catalina.core.StandardContext start
严重: Error filterStart
二月 16, 2017 12:33:09 上午 org.apache.catalina.core.StandardContext start
严重: Context [/sshTest] startup failed due to previous errors
二月 16, 2017 12:33:10 上午 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
二月 16, 2017 12:33:10 上午 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
二月 16, 2017 12:33:10 上午 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/46  config=null
二月 16, 2017 12:33:10 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 2658 ms

新手处理问题、老鸟或者大神可以忽略喔

问题1:Tomcat启动时出现的Error filterStart错误

出现这个问题,大家都是出找g女或者b仔、但是来来回回都是国人那些复杂的问题

我也是先按照网上的答案1,检查配置文件,反复检查若干遍之后,确认的确没有问题。
再按照网上的答案2,把“commons-fileupload-1.2.2.jar”和“commons-io-2.0.1.jar”包放到lib下,不过启动时还是出现相同的错误。

其实这需要去看报错的代码去分析!因为Error filterStart报错的原因实在太多了

1.xml配置失误

2.filter中某段代码未实例化

3.相应的包重复出现/相应的包包在部署是没有被包含/或者包对应的版本不对!(我就是出现struts2包和xwork包的版本不对)

4.类文件没有部署到tomcat下面,clean掉整个工程,重新编译,部署,启动tomcat.

问题2:关于Context []startup failed due to previous errors

可能出错的地方:

1.web.xml文件 web应用部署描述符,里面的部署的xml文件或者类,如果这些找不到就会发生startup failed due to previous errors错误。

2.如果在应用spring的话,在配置文件applicationContext.xml中定义的类、xml文件找不到也会报这个错误。

3.在web.xml,struts.xml,applicationContext.xml文件中自身有任何一点错误都可能引起上面的这个问题,而不仅仅是附带的文件错误导致。

4.如果使用ibatis的话,在SqlMapConfig.xml中定义的xml文件找不到也会报这个错误。(hibernate的配置在整合spring的时候使用spring的配置文件)

5.JDK的版本问题,最好使用JDK5.0 或者更高的版本。

6.Eclipse和tomcat的版本兼容问题

7.框架整合的过程中在导入到lib下的jar包冲突也可能产生该错误。

8.jar包的缺少以及jar包的版本也可产生该错误。(我的出现的问题)

9.其他的原因


所以为了解决Struts2 jar包的的重复或者出错。

还是直接用myeclipse配置的包使用 ->?myeclipse 如何配置struts2

自带已经包含了Struts2所需要的包


下面是一个简单利用Struts2实现用户登录的小程序

记得先把 这个 ->myeclipse 如何配置struts2?配置好才进行下面的

配置完成后在src中出现struts.xml的文件

然后需要建两个JSP页面:login.jsp 、loginResult.jsp,一个action类、

配置WEB.xml的代码如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<!-- 默认首页配置 -->
	<welcome-file-list> 
	<welcome-file>index.jsp</welcome-file> 
	</welcome-file-list>
	<!-- Starts配置名 -->
	<display-name>Starts info</display-name>
	<!-- Starts注册 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.FilterDispatcher
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	</web-app>

Jsp页面代码:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <br/>
  <br/>
  <br/>
    <div> 
    ${requestScope.message}  
    <s:form action="Login" method="post">
    	<s:textfield name="adminUserName" label="用户名" />
    	<s:password name="adminUserPassword" size="21" label="密码"/>
    	<s:submit value="提 交"/>
    </s:form> 
    </div>
  </body>
</html>

由于文件中用到了strut的标签,所以需要在文件头部加上下面语句:

<%@taglib prefix="s" uri="/struts-tags"%>

而:

${requestScope.message}  

是我使用了EL表达式,接收失败的报错信息显示出来

loginResult.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>通过</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    ${message}
  </body>
</html>

这个文件是显示验证结果!成功到这个页面

Struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="example" namespace="" extends="struts-default">
	<action name="Login" class="action.LoginAction">
		<result>/loginResult.jsp</result>
		<result name="input">/login.jsp</result>
	</action>
</package>
</struts>    

<struts></struts>之间是actionMapper相关的配置内容、一个WEB应用系统会有很多配置,所以用到了<package>来进行分类,这个相当于Java开发的包

最后是在loginAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Struts2实现用户登录
 * @author Administrator
 *
 */
public class LoginAction extends ActionSupport{
//	执行用户验证的方法
	public String execute() throws Exception{
		if("admin".equals(adminUserName)&&"admin".equals(adminUserPassword)){
			message=adminUserName+"登录成功!";
		}else{
			message=adminUserName+"登录失败!";
			return INPUT;
		}
		
		return SUCCESS;
	}
	
	public String adminUserName;//用户名
	public String adminUserPassword;//密码
	public String message;//执行后返回的信息
	public String getAdminUserName() {
		return adminUserName;
	}
	public void setAdminUserName(String adminUserName) {
		this.adminUserName = adminUserName;
	}
	public String getAdminUserPassword() {
		return adminUserPassword;
	}
	public void setAdminUserPassword(String adminUserPassword) {
		this.adminUserPassword = adminUserPassword;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	
}

这个类有山歌属性:adminUserNmae、adminUserPassword、和message。

执行完成会返回execute()方法。


程序开发完毕后:

运行结果图:

成功图:

失败图:


写的很烂、也很长气、新手学习处理的问题。


测身材体型的应用

index.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<style type="text/css">
		div{font-size: 50px;
			font-weight: bold;
			color: #f55;
		}
		#t{
			font-weight: bold;
			color: #f55;
		}
	</style>
  </head>
  <body>
    <center>
    <s:div>炸鸡专用测试</s:div>
		<s:form action="Body" method="post">
			<s:textfield name="height" label="身高(cm)" id="t"/>
			<s:textfield name="weight" label="体重(kg)" id="t" />
			<s:submit value="提交"/>
		</s:form>
    </center>
  </body>
</html>

normal.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'normal.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>正常!</h1>
  </body>
</html>

thin.,jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'normal.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>你的体型偏瘦!</h1>
  </body>
</html>

little_thin..jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'normal.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>你的体型:苗条!</h1>
  </body>
</html>

little_fat.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'normal.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>你的体型:轻度肥胖!</h1>
  </body>
</html>

fat.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'normal.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>你的体型:重度肥胖!</h1>
  </body>
</html>

BodyAction.java

package com.glj;


import com.opensymphony.xwork2.ActionSupport;

public class BodyAction extends ActionSupport {
	private String height;
	private String weight;
	public String execute(){
		
		double bodyHeight = Double.parseDouble(height);
		double bodyWeight = Double.parseDouble(weight);
		double standardBody = (bodyHeight-100)*0.9;
		double body = bodyWeight/standardBody;
		if(body<0.8){
			return "thin";
		}else if(body>=0.8&&body<0.9){
			return "little_thin";
		}else if(body>=0.9&&body<0.9){
			return "normal";
		}else if(body>=1.1&&body<=1.3){
			return "little_fat";
		}else if(body>1.3){
			return "fat";
		}else{
			return "error";
		}
	}
	public String getHeight() {
		return height;
	}
	public void setHeight(String height) {
		this.height = height;
	}
	public String getWeight() {
		return weight;
	}
	public void setWeight(String weight) {
		this.weight = weight;
	}
	
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="bodyTest" namespace="" extends="struts-default">
		<action name="Body" class="com.glj.BodyAction">
			<result name="thin">/thin.jsp</result>
			<result name="little_fat">/little_fat.jsp</result>
			<result name="fat">/fat.jsp</result>
			<result name="little_thin">/little_thin.jsp</result>
			<result name="normal">/normal.jsp</result>
			<result name="error">/index.jsp</result>
		</action>
	</package>
</struts>    

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.FilterDispatcher
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping></web-app>

带有数据验证(Validation)

去掉strut2标签自动生成html中的table/tr/td代码,只需要在配置文件struts.xml中加入以下代码即可

<constant name="struts.ui.theme" value="simple"></constant>

 

package com.glj;

import com.opensymphony.xwork2.ActionSupport;

public class userAction extends ActionSupport{
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void validate() {
		// TODO Auto-generated method stub
		super.validate();
		if("".equals(this.getUsername())||null==this.getUsername()){
			this.addFieldError("username", "对不起,用户名不能为空");
		}
		if("".equals(this.getPassword())||null==this.getPassword()){
			this.addFieldError("password", "对不起,密码不能为空");
		}
	}
	@Override
	public String execute() throws Exception {
		System.out.println("执行了userAction");
		if ("admin".equals(this.getUsername())&&"admin".equals(this.getPassword())) {
			return SUCCESS;
		}
		else{
			return ERROR;
		}
	}
}
<%@ page language="java" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head> 
  <body>
  <center>
    <form action="login.action" method="post" focus="login">
      <h2>系统登录:</h2>
      账号:
		<input type="text" name="username">
		${errors.username[0]}
		<br />
	      密码:
		<input type="password" name="password">	
		${errors.password[0]}
		<br />
		<input type="submit" value="提交">
    </form>
   </center>
  </body>
</html>

用<s:actionerror>标签显示出全部错误信息/<s:actionmessage /> 提示信息

package com.glj;

import com.opensymphony.xwork2.ActionSupport;

public class userAction extends ActionSupport{
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public void validate() {
		// TODO Auto-generated method stub
		super.validate();
		if("".equals(this.getUsername())||null==this.getUsername()){
			this.addActionError( "对不起,用户名不能为空");
		}
		if("".equals(this.getPassword())||null==this.getPassword()){
			this.addActionError("对不起,密码不能为空");
		}
	}
	@Override
	public String execute() throws Exception {
		System.out.println("执行了userAction");
		if ("admin".equals(this.getUsername())&&"admin".equals(this.getPassword())) {
			return SUCCESS;
		}
		else{
			return ERROR;
		}
	}
}

在jsp页面加入<s:actionerror />

<s:actionmessage /> 和

this.addActionError("对不起,密码不能为空");同理

评论

  1. Windows Chrome 57.0.2987.98
    8 年前
    2017-3-14 18:26:01

    一直是想骇进学校的U.R.P系统的,无奈。。。
    用的是 resin。

    • 博主
      iEdon
      Windows Chrome 50.0.2661.102
      8 年前
      2017-3-14 18:49:17

      厉害…

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇