cn.scxh.struts包 User类:
package cn.scxh.struts;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.ActionSupport;
public class User extends ActionSupport {
private static Logger log = Logger.getLogger(User.class);
@Override
public String execute() throws Exception {
log.debug("hello zhangbo");
log.info("hello caiyu");
log.error("hello yangming");
log.warn("hello xiaobao");
return SUCCESS;
}
public String add(){
log.debug("hello world");
return "ADD";
}
public String update(){
log.debug("UPDATE hello world");
return "UPDATE";
}
public String delete(){
log.debug("DELETE hello world");
return "DELETE";
}
}
配置文件:log4j.properties
### 设置###
log4j.rootLogger = debug,stdout,D
### 输出信息到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=D://logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
配置文件:struts.properties
#更改struts2后缀
struts.action.extension=do
#让struts2支持动态方法调用
struts.enable.DynamicMethodInvocation=true
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- 动态调用方式三 -->
<struts>
<!-- 让struts2支持动态方法调用 在struts.properties中实现-->
<!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->
<!-- 如果分层<struts>里写法如下(只分层): -->
<!--<include file="struts1.xml"></include>
<include file="struts2.xml"></include> -->
<!-- 命名空间为user -->
<package name="user" namespace="/user" extends="struts-default">
<default-action-ref name="default"/>
<!-- 解决struts2.5 通配符无效问题 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<!-- 访问地址:http://192.168.5.7:8080/Struts/user/User_add.do 类名加方法名-->
<!-- <action name="*_*" class="cn.scxh.struts.{1}" method="{2}">
<result>/index.jsp</result>
<result name="ADD">/one.jsp</result>
<result name="UPDATE">/index.jsp</result>
<result name="DELETE">/one.jsp</result>
</action> -->
<!-- 访问地址http://192.168.5.7:8080/Struts/user/user_delete.do -->
<action name="user_*" class="cn.scxh.struts.UserDemo" method="{1}">
<result>/index.jsp</result>
<result name="ADD">/one.jsp</result>
<result name="UPDATE">/index.jsp</result>
<result name="DELETE">/one.jsp</result>
<result name="input">/default.jsp</result>
</action>
<!-- 随便输入地址则执行默认如:http://192.168.5.7:8080/Struts/user/useaar_delete.do -->
<action name="default">
<result>/default.jsp</result>
</action>
</package>
</struts>
struts1.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- 所有匹配*.do的请求都由struts2处理 ,
如果在struts.properties中设置了struts2后缀,struts.properties优先-->
<constant name="struts.action.extension" value="do" />
<!-- 让struts2支持动态方法调用<default-action-ref name="index"/> -->
<!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->
<!-- package提供了将多个Action组织为一个模块的方式, package的名字必须是唯一的. namespace:定义package命名空间
该命名空间影响到url的地址, 例如此命名空间为/student那么访问是的地址为http://192.168.5.7:8080/Struts/student/test.a
namespace="/student" 命名空间可以不用student 如果用http://192.168.5.7:8080/Struts/student/a/test.a
也可以访问 /a/后面还可以随意加 但是student前面不能再加,
-->
<package name="student" namespace="/student" extends="struts-default">
<!-- 如果不加method默认执行execute方法 -->
<action name="add" class="cn.scxh.struts.User" method="add">
<result name="ADD">/one.jsp</result>
<result name="success">/index.jsp</result>
</action>
<action name="user" class="cn.scxh.struts.User">
<result name="ADD">/one.jsp</result>
<result name="success">/index.jsp</result>
<!-- 默认执行 execute方法 可以不写name="success" 默认执行-->
<!-- <result>/index.jsp</result> -->
</action>
<action name="update" class="cn.scxh.struts.User" method="update">
<result name="UPDATE">/one.jsp</result>
</action>
<action name="delete" class="cn.scxh.struts.User" method="delete">
<result name="DELETE">/one.jsp</result>
</action>
</package>
</struts>
struts2.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<!-- 动态调用方式二 -->
<!--访问地址http://192.168.5.7:8080/Struts/user/user!delete.do -->
<struts>
<!-- 让struts2支持动态方法调用 在struts.properties中实现-->
<!-- <constant name="struts.enable.DynamicMethodInvocation" value="true"/> -->
<!-- 命名空间为student -->
<package name="user" namespace="/user" extends="struts-default">
<!-- 解决struts2.5 通配符无效问题 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="user" class="cn.scxh.struts.User">
<result>/index.jsp</result>
<result name="ADD">/one.jsp</result>
<result name="UPDATE">/index.jsp</result>
<result name="DELETE">/one.jsp</result>
</action>
</package>
</struts>
此工程只需要struts.xml就可完成 struts1.xml struts2.xml只是动态调用的两种方法 struts.xml中应该是相对较常用的一种
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Struts</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
default.jsp index.jsp one.jsp不再累赘
传参、获取参数和验证输入如下:
cn.scxh.struts包 Use类:
package cn.scxh.struts;
public class Use {
private String name;
private String passWord;
public Use() {
}
public Use(String name, String passWord) {
this.name = name;
this.passWord = passWord;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
cn.scxh.struts包 UserDemo类:
package cn.scxh.struts;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 接收参数三种方式:
* 1.通过Action属性(将Use类写在此类中)
*
* 2.domainModel 已注释
* 利用现有model类,不需要实现implements ModelDriven<Use>
* 1>private Use use; 添加get,set方法
* 2>页上form表单name属性指定为 对象名.属性名 如: use.name
*
* 3.实现ModelDriven接口方式
* 1>实现ModelDriven接口
* 2>实例化model类.如 : private User user = new User();
* 3>表单add_user.jsp中 name值必须与Use类中的属性相同 如:name="name" name="passWord"
*/
public class UserDemo extends ActionSupport implements ModelDriven<Use>{
private Logger log = Logger.getLogger(UserDemo.class);
private Use use = new Use();
// private Use use;
@Override
public String execute() throws Exception {
return SUCCESS;
}
public String add(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
log.debug("name:"+use.getName()+"\npassWord:"+use.getPassWord());
log.debug("name:"+request.getParameter("name")+
"\npassWord:"+request.getParameter("passWord"));
if(use.getName().equals("admin") && use.getPassWord().equals("admin")){
return "ADD";
}else{
addActionError("用户名或密码错误!");
return INPUT;
}
}
public String update(){
log.debug("UPDATE hello world");
return "UPDATE";
}
public String delete(){
log.debug("DELETE hello world");
return "DELETE";
}
@Override
public Use getModel() {
return use;
}
// public Use getUse() {
// return use;
// }
// public void setUse(Use use) {
// this.use = use;
// }
}
需要导入: <%@ taglib prefix="s" uri="/struts-tags" %> 且在表单提交前加: <s:actionerror/>
在上面类判断用户名和密码else中写了输入错误提示语: addActionError("用户名或密码错误!");
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>添加用户</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
<script>
function check(){
var user = $("#name").val();//获取表单元素值
var number = $("#number").val();
if(user == "" || number ==""){
$("#msg").text("用户和密码不能为空!");
return false;
}else{
return true;
}
}
</script>
</head>
<body>
<form action="./user/user_add.do" method="post" enctype="application/x-www-form-urlencoded" οnsubmit="return check()">
用户:<input type="text" name="name" id="name"/><br>
密码:<input type="text" name="passWord" id="number"/><br>
<span id="msg" style="color:red;font-size:15px">${error}</span>
<s:actionerror/>
<input type="submit" value="添加"/>${message}
</form>
</body>
</html>