jdk7:JDK7 安装和配置
eclipse-kepler:怎么下载安装eclipse
tomcat7 : 手把手图文教你eclipse下如何配置tomcat
maven3.3.1 :Maven在Eclipse中的配置
我的风格是,先把一步步把项目搭好,跑起来,过程中你自然会有思考:为什么是这样的?原来是这样的!可不可以这样?项目跑不起来你肯定也会自己排查原因,跑起来了我们再看看原理、要点。
1,新建maven项目:
2,添加tomcat运行jar包
3,配置pom.xml,引入Struts2核心依赖包及其他依赖项
可以打开maven在线仓库:http://mvnrepository.com/
在里面搜索struts2,然后拷贝其中一个版本的struts2-core的maven依赖路径粘贴到pom.xml文件中。
4,新建一个action,以UserAction为例,继承自com.opensymphony.xwork2.ActionSupport。完成action的内容。
package com.pub.action;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
public String execute() {
return SUCCESS;
}
public String login() {
try {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String username = request.getParameter("userName");
String password = request.getParameter("password");
System.out.println("name->" + username + ",password->" + password);
if ("admin".equals(username) && "123456".equals(password)) {
return SUCCESS;
} else {
return LOGIN;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
5,配置
5.1 在/MavenStruts/src/main/resources下新建struts.xml配置文件,内容如下:
<struts>
<constant name="struts.i18n.reload" value="false" />
<constant name="struts.devMode" value="false" />
<include file="struts-default.xml" />
<package name="pub" namespace="/" extends="struts-default">
<action name="*_*" class="com.pub.action.{1}Action" method="{2}">
<result name="success">/index.jspresult>
<result name="login">/login.jspresult>
action>
package>
struts>
5.2 修改/StrutsTest/src/main/webapp/WEB-INF/web.xml文件,修改后文件内容如下:
<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<welcome-file-list>
<welcome-file>login.jspwelcome-file>
welcome-file-list>
web-app>
6,新建login.jsp和index.jsp(/MavenStruts/src/main/webapp/login.jsp、/MavenStruts/src/main/webapp/index.jsp)
login.jsp:
<%@page import="org.apache.naming.java.javaURLContextFactory"%>
<%@ page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试页面title>
head>
<body>
<h2>Hello World!h2>
<form action="User_login.action" method="post">
用户名:<input type="text" name="userName" value="admin" /><br>
密 码:<input type="password" name="password" value="123456"><br>
<input type="submit" value="登录">
<input type="reset" value="重置" />
form>
body>
html>
index.jsp:
<%@page import="org.apache.naming.java.javaURLContextFactory"%>
<%@ page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello Maventitle>
head>
<body>
<p>Maven Struts2应用模板新建成功!p>
body>
html>
7,发布项目,启动tomcat,访问测试:http://localhost/MavenStruts(这里已经把tomcat端口号改为了80,请改为你的实际端口)
点击登陆按钮:
8,要点整理
如果你真的是原封不动地拷贝我上面的代码及配置并且完全按照我的操作一步步走,99%的可能你一定能够运行成功,那1%的可能不在我的考虑范围之内。
8.1 action的配置
看上面,首先我在struts.xml中做了如下配置:
name="pub" namespace="/" extends="struts-default">
name="*_*" class="com.pub.action.{1}Action" method="{2}">
<result name="success">/index.jspresult>
<result name="login">/login.jspresult>
package的name为pub,我的意思是这个包为公共基础包。重点是namespace=”/”,name其实是匹配一个路径,”/”表示匹配项目下的所有,这里就对应了login.jsp中form的action=”User_login.action”,当namespace=”/”时,不管action名前面加任何名称,比如我把action写为:action=”user/User_login.action”,都将匹配到namespace=”/”的package下。
那么,假如我将这里的namespace写为”user”,那么action=”User_login.action”就将不再能匹配到该package下了,只有将action对应改为action=”user/User_login.action”才能正确访问。
8.2 通配符
看上面的配置中有两个”“号,这就是通配符,其中第一个*_是一种模式,而User_login是匹配这种模式的,其中User对应第一个,login对应第二个,于是,就把这两个*匹配的内容按顺序替换到后面的{1}、{2}的位置,于是就匹配得到了classs=”com.pub.action.UserAction”,method=”login”。