Struts2实现简易登录

使用struts2编写登录demo


工具:
eclipse
tomcat v8.0
struts-2.3.x
顺便附个下载:struts-2.3.29-all.zip
(上个月下载的2.3.28.1,因为S2-037,最新已经是2.3.29了)

1.新建web project

命名后点击next并勾选Generate web.xml

2.导入相关jar包

打开struts-2.3.28.1\apps目录,将struts2-blank.war解压缩,从解压得到的WEB-INF\lib目录获取jar包,添加到新建项目lib中。

3.配置web.xml


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>LoginByStruts2display-name>
  <welcome-file-list>
    <welcome-file>index.jspwelcome-file>
  welcome-file-list>
  
  <filter>
    <filter-name>struts2filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
  filter>
  <filter-mapping>
    <filter-name>struts2filter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>
web-app>

4.配置struts.xml文件

在src文件夹下面创建strutx.xml文件。



<struts>

    <package name="user" extends="struts-default"> 

        <action name="login" class="com.claude.action.Login" method="login">
            <result name="success">/success.jspresult>
            <result name="input">/index.jspresult>
        action>

    package>
struts>    

5.编写Bean

定义实体类Person

package com.claude.bean;

public class Person {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

6.编写Dao

模拟登录验证

package com.claude.dao;

import com.claude.bean.Person;

public class Dao {
    public boolean isLogin(Person person) {
        if (person.getUsername().equals(person.getPassword())) {
            return true;
        } else {
            return false;
        }

    }
}

7.编写Action

LoginAction处理登录的业务逻辑

package com.claude.action;
import com.claude.bean.Person;
import com.claude.dao.Dao;
import com.opensymphony.xwork2.ActionSupport;


public class Login extends ActionSupport{
    /**
     * 
     */
    private static final long serialVersionUID = -1339567642215112514L;
    private Person person;
    public String login(){
        Dao dao=new Dao();
        boolean flag=dao.isLogin(person);
        if(flag){
            return SUCCESS;
        }else{
            return INPUT;
        }

    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }
}

8.相关JSP

登录界面index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%-- <%@ taglib prefix="s" uri="/struts-tags"%> --%>

<html>
<head>
<title>Logintitle>
<link href="bootstrap.min.css" rel="stylesheet">
<link href="signin.css" rel="stylesheet">
head>
<body>

    <%-- "login">
        "person.username" label="username">
        "person.password" label="password">
        
     --%>
    <h2>Loginh2>

    <div class="container">
        <form class="Login" action="login" method="post">
            <label for="inputName" class="sr-only">Usernamelabel> <input
                type="text" id="inputName" class="form-control"
                placeholder="UserName" name="person.username"> <br /> <label
                for="inputPassword" class="sr-only">Passwordlabel> <input
                type="password" id="inputPassword" class="form-control"
                placeholder="Password" name="person.password">
            <div class="checkbox">
                <label> <input type="checkbox" value="remember-me">
                    Remember me
                label>
            div>
            <button class="btn btn-lg btn-primary btn-block" type="submit">Sign
                inbutton>
        form>
    div>

body>
html>

登录成功success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<html>
  <head>  
    <title>success pagetitle>
  head>

  <body>
    Success login. <br>
  body>
html>

9.运行结果

登录页面
Struts2实现简易登录_第1张图片

登录成功后
这里写图片描述

程序目录如下
Struts2实现简易登录_第2张图片

此demo的struts2工作流程

(用Markdown做的,凑合看……)

Created with Raphaël 2.1.0 开始 访问JSP登录界面index.jsp 提交表单后数据提交到login.action struts2截获所有请求 查找struts.xml,login.action对用Login类 生成一个Login实例,将提交的数据设置到该实例中 根据method设置调用login()方法,否则默认调用实例的 返回SUCCESS 登录成功,访问success.jsp页面 结束 yes no

遇到的一些问题和解决方法

(1)初次配置时,打开JSP出现404。再看控制台,打印出如下错误信息

16:53:04.209 [localhost-startStop-1] ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed
com.opensymphony.xwork2.config.ConfigurationException: Unable to load configuration.
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70) ~[xwork-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:970) ~[struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:438) ~[struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:482) [struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74) [struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57) [struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) [catalina.jar:8.0.33]
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) [catalina.jar:8.0.33]
    at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:105) [catalina.jar:8.0.33]
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4658) [catalina.jar:8.0.33]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5277) [catalina.jar:8.0.33]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) [catalina.jar:8.0.33]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) [catalina.jar:8.0.33]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) [catalina.jar:8.0.33]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_77]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_77]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_77]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]
Caused by: com.opensymphony.xwork2.config.ConfigurationException: Cannot locate the chosen ObjectFactory implementation: spring
    at org.apache.struts2.config.AbstractBeanSelectionProvider.alias(AbstractBeanSelectionProvider.java:74) ~[struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.config.AbstractBeanSelectionProvider.alias(AbstractBeanSelectionProvider.java:45) ~[struts2-core-2.3.28.1.jar:2.3.28.1]
    at org.apache.struts2.config.DefaultBeanSelectionProvider.register(DefaultBeanSelectionProvider.java:363) ~[struts2-core-2.3.28.1.jar:2.3.28.1]
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:240) ~[xwork-core-2.3.28.1.jar:2.3.28.1]
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) ~[xwork-core-2.3.28.1.jar:2.3.28.1]
    ... 17 more

不难发现居然在纯struts程序的中出现了spring的字眼,经过排查,发现错误原因是:struts.xml中多了一句

<constant name="struts.objectFactory" value="spring">constant>
正常的配置绝对不会出现这种错误,怪就怪自己偷懒,从别处SSH项目里拷过来的配置文件,没改干净就用上了。
初学者一定要自己亲自配置,然后可以和现有项目对比,这样才容易发现细节问题。

(2)也是一个小问题,我在jsp页面中添加CSS时,发现没有起到作用。立即google了一下,按照很多人给出的方法,依次尝试(部分试过的代码已在index.jsp中加以注释),还是无果。不得已把CSS文件放在了程序根目录下。
(3)博客看了不少,从没自己写过。学的越多,越觉得记性不好使,笔记翻不过来,先写一篇非常简单的,算是给自己填补空白。代码过于简单,就不加注释了。研究了一下排版,尚不熟悉。如有看官路过,望多多包涵,不吝赐教。

你可能感兴趣的:(SSH2)