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

先说说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编译感觉没有真的便宜,一直找不到方法,今早重启电脑看到报了两个错,但是昨晚没报错,真的坑。

有问题的下方留言。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值