点击File->new->Maven Project.
右键所创建的项目->点击Properties->点击Java Build Path将JDK改成所需要的版本
然后点击Project Facets先改Java,再改Dynamic Web Module。否则Dynamic Web Module不能改
最后点击Deployment Assembly对应好路径。将src/main下的webapp文件删除。右键项目Java EE Tools 生成一个新的web.xml
在pom.xml中导入:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qst</groupId>
<artifactId>Struts2Demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Struts2Demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.struts.xwork/xwork-core -->
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>Struts2Demo</finalName>
</build>
</project>
右键项目。点击Maven然后update maven-----------------------------等待Jar包下载完成
在src/main/resources下新建struts.xml文件
<?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>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.devMode" value="true"></constant>
<include file="struts-product.xml"></include>
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="userAction_*" method="{1}" class="com.qst.action.UserAction">
<result name="main" type="dispatcher">/main.jsp</result>
<result name="login" type="dispatcher">/login.jsp</result>
<result name="input">/login.jsp</result>
</action>
<!-- <action name="*_*" method="{2}" class="com.qst.action.{1}">
<result name="main" type="redirect">/main.jsp</result>
<result name="login" type="dispatcher">/login.jsp</result>
</action> -->
<!-- <action name="userActionlist" method="list" class="com.qst.action.UserAction">
<result name="main" type="redirect">/main.jsp</result>
<result name="login" type="dispatcher">/login.jsp</result>
</action> -->
</package>
</struts>
在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" version="3.1">
<display-name>Struts2Demo</display-name>
<filter>
<filter-name>Struts2Filter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
main.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:debug/>
欢迎您:${sessionScope.username}
<br>${applicationScope.appname }
<br>${requestScope.requestarg }
</body>
</html>
login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
pageContext.setAttribute("basePath",basePath);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<base href="${pageScope.basePath}">
<script type="text/javascript">
function validate(){
if($("#username").val()=="" || $("#userpass").val()==""){
alert("用户名或密码不能为空!");
return false;
}else if($("#userpass").val().length<6 || $("#userpass").val().length>12){
alert("密码长度范围6-12");
return false;
}
return true;
}
</script>
</head>
<body>
<s:debug/>
<s:fielderror cssStyle="color:red"></s:fielderror>
<p><font color=red>${error}${requestScope.action.fieldErrors["user.username"]}</font></p>
<form action="user/userAction_login" method="post">
<p>username:<input name="user.username" id="username" type="text"/></p>
<p>userpass:<input name="user.userpass" id="userpass" type="password"/></p>
<p><input type="submit" value="提交"/></p>
</form>
</body>
</html>
error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
error!
${exception}
</body>
</html>
Users:
package com.qst.po;
public class Users {
private String username;
private String userpass;
public Users() {
}
public Users(String username,String userpass) {
this.username=username;
this.userpass=userpass;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
}
UserDao.java:
package com.qst.dao;
import com.qst.po.Users;
public interface UserDao {
public Users selectLogin(Users user);
}
UserDaoImpl.java:
package com.qst.dao;
import com.qst.po.Users;
public class UserDaoImpl implements UserDao {
@Override
public Users selectLogin(Users user) {
String sql="select * from tb_users where username=? and userpass=?";
if("张三".equals(user.getUsername()) && "123456".equals(user.getUserpass()))
return user;
return null;
}
}
UserService.java
package com.qst.service;
import com.qst.po.Users;
public interface UserService {
public boolean login(Users user);
}
UserServiceImpl.java:
package com.qst.service;
import com.qst.dao.UserDao;
import com.qst.dao.UserDaoImpl;
import com.qst.po.Users;
public class UserServiceImpl implements UserService {
UserDao userDao = new UserDaoImpl();
@Override
public boolean login(Users user) {
Users u = userDao.selectLogin(user);
if(u==null)
return false;
return true;
}
}
UserAction.java:
package com.qst.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.qst.po.Users;
import com.qst.service.UserService;
import com.qst.service.UserServiceImpl;
public class UserAction extends ActionSupport{
Users user;
String error;
public String register() {
return "";
}
public String list() {
return "";
}
public String login() {
UserService userService = new UserServiceImpl();
boolean login = userService.login(user);
if (login) {
Map<String,Object> session = ActionContext.getContext().getSession();
session.put("username", user.getUsername());
Map<String,Object> application = ActionContext.getContext().getApplication();
application.put("appname", "struts2app");
ActionContext.getContext().put("requestarg", "requestarg");
return "main";
} else {
error = "密码在六到十六位";
return "login";
}
}
public void validateLogin() {
if("".equals(user.getUsername())) {
super.addFieldError("user.username", "请输入正确的用户名");
}
if(user.getUserpass().length()<6 || user.getUserpass().length()>12) {
super.addFieldError("user.userpass", " 请输入正确的密码");
}
}
@Override
public void validate() {
System.out.println("validate()");
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public String getError() {
return error;
}
}