您的位置:首页 > 编程语言 > Java开发

Struts2学习(三)---Struts2.5使用通配符完成登录注册

2017-03-13 10:32 549 查看
先说说Struts2.5版本之后吧,Struts2可能觉得安全不够,要提高安全强度,然后现在的struts.xml里面你必须要加一个
<allow-methods>
,

-1,先看web.xml,配置过滤器的时候在2.5跟前面的不一样,最好还是用Ctrl+shift+t来寻找

<?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">

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<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>*.action</url-pattern>
</filter-mapping>

</web-app>


0.我用的maven,先看看pom.xml,搭建自己的骨架可以看看我另一个博客http://blog.csdn.net/shouldnotappearcalm/article/details/52353712

<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.nsu</groupId>
<artifactId>ClassStudyStruts2_01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.5</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/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</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/ognl/ognl -->
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.1.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>

</dependencies>

</project>


1.现在来看看struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="gzr" namespace="/" extends="struts-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="user_*" class="com.nsu.edu.action.UserAction" method="{1}">
<result name="loginSuccess">/index.jsp</result>
<result name="loginFail">/login.jsp</result>
<result name="edit">/edit.jsp</result>
<result name="registerSuccess">/login.jsp</result>
<result name="registerFail">/register.jsp</result>
</action>
</package>

</struts>


你也可以像我一样
<global-allowed-methods>regex:.*</global-allowed-methods>
这里使用regex:.*亲测有效.struts2.5dtd这个还是在struts-core.jar里面找到struts-default.xml里面拷出来。

*这里使用通配符,user_ method=”{1}” {1}这里是通配符

如果是user_login 会调用login方法

如果是user_*_* method=”{1}_{1}”

如果是user_test1_test2 会调用test1_test2方法**

2.现在来看UserAction

package com.nsu.edu.action;

import java.util.List;

import com.nsu.edu.model.User;
import com.nsu.edu.service.UserService;
import com.nsu.edu.service.impl.UserServiceImpl;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{

User user=new User();
UserService userService=new UserServiceImpl();
private String errorMessage;

/**
* 业务组件
* @return
*/
public String login(){
System.out.println(user.getName()+","+user.getPassword());
List<User> selectUserList=userService.login(user);
if(selectUserList.size()==1){
return "loginSuccess";
}
else{
errorMessage="用户名密码错了";
return "loginFail";
}
}

public String register(){
System.out.println(user.getName()+","+user.getPassword());
int count=userService.regist(user);
if(count>0){
return "registerSuccess";
}else{
return "registerFail";
}
}

public String edit(){
return "edit";
}

public String getErrorMessage() {
return errorMessage;
}

public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}

@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}

}


3.接下来看看数据库连接工具,你们链接自己的

package com.nsu.edu.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHelper {
private static final String DBDRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/javaweb";
private static final String USERNAME = "root";
private static final String PASSWORD = "123";
private Connection conn;

public DBHelper() {
try {
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public Connection getConnection(){
return this.conn;
}
public void close(){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}


4.接下来就看看Dao层,没什么好解释的,很简单

package com.nsu.edu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.nsu.edu.model.User;
import com.nsu.edu.util.DBHelper;

public class UserDao {

private DBHelper dbHelper;
private Connection connection;

public UserDao() {
dbHelper=new DBHelper();
// TODO Auto-generated constructor stub
}

/**
* @param user
* @return
*/
public List<User> selectUserByNameAndPassword(User user){
List<User> selectList=new ArrayList<User>();
String sql="select * from user where name=? and password=?";
try {
connection=dbHelper.getConnection();
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, user.getName());
preparedStatement.setString(2, user.getPassword());
ResultSet resultSet=preparedStatement.executeQuery();
while(resultSet.next()){
User selectUser=new User(resultSet.getInt("id"),resultSet.getString("name"),resultSet.getString("password"));
selectList.add(selectUser);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
closeConnection();
}
return selectList;
}

public int addUser(User user){
String sql="insert into user(name,password) values(?,?)";
int count=0;
try {
connection=dbHelper.getConnection();
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1, user.getName());
preparedStatement.setString(2, user.getPassword());
count=preparedStatement.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
closeConnection();
}
return count;
}

public void closeConnection() {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}


5.这里还没用Spring,还是new吧。接下来是service层的代码

package com.nsu.edu.service;

import java.util.List;

import com.nsu.edu.model.User;

public interface UserService {

public List<User> login(User user);

public int regist(User user);

}


6.UserService写的是接口,现在写实现类

package com.nsu.edu.service.impl;

import java.util.List;

import com.nsu.edu.dao.UserDao;
import com.nsu.edu.model.User;
import com.nsu.edu.service.UserService;

public class UserServiceImpl implements UserService{

private UserDao userDao;

public UserServiceImpl() {
userDao=new UserDao();
}

@Override
public List<User> login(User user) {
// TODO Auto-generated method stub
return userDao.selectUserByNameAndPassword(user);
}

@Override
public int regist(User user) {
// TODO Auto-generated method stub
return userDao.addUser(user);
}

}


7.Mode层的User

package com.nsu.edu.model;

public class User {

private Integer id;
private String name;
private String password;

public User() {
super();
// TODO Auto-generated constructor stub
}
public User(Integer id, String name, String password) {
this();
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}

}


8.数据库建表的就不说了,很简单的,但是接的id列我设置了auto_increment.

9.下面是几个页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<c:if test="${errorMessage !=null}">${errorMessage }</c:if>
<form action="user_login.action">
<input type="text" name="name" value="" />
<input type="password" name="password" value="" />
<button type="submit">登陆</button>
</form>
</body>
</html>


register.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>
<form action="user_register.action" method="post">
姓名:<input type="text" name="name" />
密码:<input type="password" name="password" />
<input type="submit" value="注册"/>
</form>
</body>
</html>


index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
index
${name }
</body>
</html>


以上就是全部的代码了,基本还是很简单的,记得使用通配符,真的好用,还有就是struts2.5版本记得配置allow-methods,低于2.5的就不用管了,还有就是昨晚写了会电脑就没电了(人傻钱多戴),eclipse还是有点问题的,刚开始写的我用tomcat编译感觉没有真的便宜,一直找不到方法,今早重启电脑看到报了两个错,但是昨晚没报错,真的坑。

有问题的下方留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0 struts
相关文章推荐