打开IDE MyEclipse
新建一个WEB PROJECT
点击Finish。生成一个新的web project
导入STRUTS2 JAR包
这些JAR包地址为:\struts-2.3.16.3-all\struts-2.3.16.3\lib
复制粘贴到工程目录的lib包下,MyEclipse会自动加载
现在说一个我在搭建框架时出现的问题,我想把这些JAR包按照技术类别分类,所以我就创建了USER LIBRARY,可是我发现发布后运行报错!找不到包异常。
这种做法和直接把JAR拷贝到lib下自动加载
两者是不同的,下面分别来解释:
用MyEclipse开发WEB项目的时候,当你把jar文件放到lib目录下的话,MyEclipse会自动的将该jar包放入当前项目的类库中,所以我们就可以直接用该jar包所包含的一些API了。
User Library是指用户的类库,首先你要明确,它是根据路劲来引入的,而不是真正的将jar包拷贝到了你系统的目录中(如果你仔细观察的话就会发现,你用User Library的方法引进jar包的话,项目的大小是不会发生变化的,除了自己做测试外,不建议采用这种方法,原因不言而喻)。虽然这种方法也是将jar包引进了类库中,但是在web应用程序下的lib目录下(如果是tomcat的话,这个lib指的就是应用程序的\WEB-INF\lib)是没有此jar包的(对比下第一种情况),如果此时的jar包只是供一般的java应用程序应用的话,是不会出现错误的;但如果此时的jar包要给web应用程序应用的话,就会出现问题了。
修改web.xml文件
第一次修改不是知道怎么写肿么办...
(可以参考struts2自带的工程实例,路径为:\struts-2.3.16.3\apps
该目录下有几个war包,解压缩打开就可以看到一个个完整的简单struts2项目..大家可以引以借鉴..)
找到实例中的web.xml打开,路径为:\struts2-blank\WEB-INF
拷贝
<span style="color:#ff0000;"><filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span>
粘贴到咱们的项目中的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>S2SH</display-name>
<span style="color:#ff0000;"><filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
好了.web.xml配置完毕.
那么org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,他是干嘛的?有啥用?
StrutsPrepareAndExecuteF
prepare与execute
前者表示准备,可以说是指filter中的init方法,即配制的导入
后者表示进行过滤,指doFilter方法,即将request请求,转发给对应的 action去处理
接下来
从实例项目中\struts2-blank\WEB-INF\classes拷贝struts.xml
到本项目中的src目录下,编译后MyEclipse会自动加载到\WEB-INF\classes下
修改struts.xml把没用的删掉!
最终是这样就行啦!
<span style="color:#ff0000;"><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
</struts>
</span>
OK!到此STRUTS2配置完毕!
发布到TOMCAT下,运行一下试试!
是否报错? 如果报错请留言咱们一起解决哈!
STRUTS2搭建好了! 怎么用呢?
咱们一起实现一个STRUTS2的简单登录功能吧!
登录页面 index.jsp
<span style="color:#000099;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<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">
</head>
<body>
<s:form action="/loginSpace/login.action" name="loginForm">
<s:textfield name="userName" label="UserName"></s:textfield>
<s:password name="passWord" label="PassWord"></s:password>
<s:submit label="LOGIN"></s:submit>
</s:form>
<s:actionerror/>
</body>
</html></span>
struts.xml
<strong><span style="color:#000099;"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="loginPackage" namespace="/loginSpace" extends="struts-default">
<action name="login" class="com.zsy.action.LoginAction">
<result name="success" type="redirect">/index.jsp</result>
<result name="error">/index.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts></span></strong>
解释:
package:类似于java中的包
name:只得的是包的名字,可以自定义
namespace:命名空间,默认为'/',如果未填,当你页面请求action时就会到根目录寻找包名为login下的action,如果你填写了namespace为'/loginSpace',就会到相应的目录下寻找,如果没找到,还会到根目录下继续寻找对应的action,如果还是未找到就会报错
extends:类似于java中的继承特征,extends="struts-default"就是继承struts-default.xml,它里面定义了许多跳转类型、拦截器等一些常用的东西
LoginAction.java
<span style="color:#000099;">package com.zsy.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String userName;
private String passWord;
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String execute() throws Exception{
if(!userName.equals("admin")){
super.addFieldError("userName", "用户名不正确");
return ERROR;
}
if(!passWord.equals("admin")){
super.addFieldError("passWord", "密码不正确");
return ERROR;
}
return SUCCESS;
}
public void validate(){
if(userName == null || userName.length() == 0){
super.addActionError("用户名不能为空");
}
if(passWord == null || passWord.length() == 0){
super.addActionError("密码不能为空");
}
}
}</span>
好啦!到此结束!发布运行看结果吧!
打开IE 输入:http://localhost:8080/S2SH/ 或者 http://127.0.0.1:8080/S2SH/
直接点Submit
当前设定的账号为:admin/admin
输入错误会显示
好啦!到此功能OK!