SSH配置与讲解

一、Struts

首先介绍Struts,在web项目中加入Struts的jar包,并在Web.xml中添加Struts的配置:

<filter>

      <filter-name>struts2</filter-name>

      <filter-class>

       org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

      </filter-class>

  </filter>

  <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>/*</url-pattern>

  </filter-mapping>

 

其中filter是指户请求的截,url-pattern中的/*是指使用Struts所有的截。接着建一个Login.jsp,源如下

 

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

<%@ page isELIgnored="false" %>

<%@ taglib uri="/struts-tags" prefix="s"%> 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

 

  <head>

    <title>用户登录</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

  </head>

 

  <body>

      <s:form action="Login.action" method="post">

        <s:textfield name="UserName" label="帐号">

          </s:textfield>

 

          <s:password name="Password" label ="密码">

          </s:password>

          <s:submit value="登录"></s:submit>

      </s:form>

 </body>

</html>

其中的【s:】的的标签是由Struts标签库提供的,Struts中提供了一个非常大的标签库,利用标签库可以助开HTML的表单设计和一些业务逻辑控制,form标签中的action指向的是我的控制器,默是以.action尾,我添加一个控制器,用于理用的登录请求,命名Login.java,如下

package account;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionSupport;

public class Login extends ActionSupport {

    public String UserName;

    public String Password;

    public String getUserName() {

        return UserName;

    }

    public void setUserName(String userName) {

        UserName = userName;

    }

    public String getPassword() {

        return Password;

    }

    public void setPassword(String password) {

        Password = password;

    }

    //对表单进行验证

    @Override

    public void validate() {

        if(UserName.equals(""))

        {

            this.addFieldError("UserName", "用户名不允许为空!");

        }

        if(Password.equals("")){

            this.addFieldError("Password", "密码不能为空!");

        }

    };

    //执行控制器逻辑

    public String execute()

    {

        if(UserName.equals("admin") && Password.equals("123")){

            return Action.SUCCESS;

        }

        else {

            return Action.ERROR;

        }

    }

}

 

其中Login的类继承自ActionSupportActionSupport类实现了StrutsAction的接口,并且还具有了对表单进行验证的功能,在Login中重写alidate就可以对表单进行验证,在出错的时候,添加错误信息。execute相当于控制器的“main”函数,其必须为public类型,并且返回值为String,在本例中返回的结果为Action中的5个字符常量之一(当然,也可以自定义返回接口)。

    接下来在src的目录下对struts.xml添加相应的配置,把控制器和我们的jsp文件关联起来,配置的代码如下:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="ghyStruts" extends="struts-default">
<action name="Login" class="account.Login">
    <result name="success" type="redirectAction">
    <param name="username">${UserName}</param>
    <param name="actionName">index</param>
    </result>
    <result name="error">/error.jsp</result>
    <result name="input">Login.jsp</result>
</action>
 
<action name="index" class="home.index">
    <result name="index">/index.jsp</result>
</action>
</package>
</struts>    

 

 

其中的action代表了一个控制器求,result是指求返回的果(控制器中的execute方法的返回),其中的name与返回的字符串必对应起来,type="redirectAction"代表跳到另外一个action中,可以在跳候,添加参数,参数的名称、和跳转结果的action的名字都是由param指定。如果需要直接返回到另外一个jsp面,可以直接在result中添加jsp的名字,如/error.jsp,其中的“/”代表根目

     Struts中提供了大量的标签库标签库中的所有的标签头都是以s,格式s:xxx,以其中的控制标签if例:

 

<s:if test="UserName==‘admin‘">您好,管理</s:if>
<s:else>您好,普通用!</s:else>

 

其中test是判断条件,UserName控制器返回的属性,里面的内容是条件

   二、Spring

    下面来介一些Spring框架实现的IoC,首先添加一个接口IService,代如下:

package lizon;

 

public interface IService {

    public void save();

}

    再添加一个Service类实现该接口:

package service;

 

import lizon.IService;

 

public class Service implements IService {

    public void save() {

        System.out.println("保存");

    }

}

    添加一个Run,来用接口的save

package lizon;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import service.Service;

 

public class Run {

    private IService isvc;

    public IService getIsvc() {

        return isvc;

    }

    public void setIsvc(IService isvc) {

        this.isvc = isvc;

    }

    public static void main(String[] args) {

       

    }

}

    注意,我的Run中有一个IService接口的属性,接下来,我Spring的配置,把Service注入到IService中:

<?xml version="1.0" encoding="UTF-8"?>

<beans

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

 

    <bean id="svc" class="service.Service">

    </bean>

   

    <bean id="run" class="lizon.Run">

        <property name="isvc" ref="svc"></property>

    </bean>

</beans>

    首先配置一个Service的bean,并它的例起个名字叫svc,然后配置一个run的bean,并把svc的实现,注入到Run中的IService接口中。这样Runmain方法中,我就可以这样调用:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

Run run = (Run) context.getBean("run");

run.isvc.save();

    ApplicationContext得配置文件中的接口的实现,然后用。在我Run方法中没有涉及到任何实现的代,有效地接口和实现进行了解耦。Spring框架可以注入多种数据型,包括基本数据型、null型、ListMapSet等,可以构造函数行注入。并且在配置文件中改scope的属性,可以松地实现单例模式(Singleton)或多例模式(Prototype)。

    Spring有另一个擅域:AOP,下面来介一下在SpringAOP实现方法,借用上面例子中的接口和实现,代如下:

package lizon;

 

public interface IService {

    public void save();

}

package service;

 

import lizon.IService;

 

public class Service implements IService {

    public void save() {

        System.out.println("保存");

    }

}

    假如个接口和实现是我中多年前完成的功能模在我想在save方法中加入行前后的日志,但是根据设计修改关对扩展开放的原,我应该直接修改save方法,而是使用AOPsave方法展,下面定一个基于Spring方法行增

package Interceptor;

 

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

 

public class mylog implements MethodInterceptor{

 

    @Override

    public Object invoke(MethodInvocation arg0) throws Throwable {

        System.out.println("方法行前");

        arg0.proceed();

        System.out.println("方法行后");

        return null;

    }

 

}

    个mylog的类继承自Spring中的MethodInterceptor,并重写了该类中的invoke方法,其中arg0.proceed()是行被代理的方法,并在行的前后加入了自定的日志,最后我配置一个Spring,让这个增的方法和原方法关起来:

<?xml version="1.0" encoding="UTF-8"?>

<beans

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

 

    <bean id="svc" class="service.Service">

    </bean>

   

    <bean id="mylog" class="Interceptor.mylog"></bean>

   

    <bean id="myproxy" class="org.springframework.aop.framework.ProxyFactoryBean">

        <property name="proxyInterfaces">

            <value>lizon.IService</value>

        </property>

       

        <property name="target" ref="svc"></property>

       

        <property name="interceptorNames">

            <list>

            <value>mylog</value>

            </list>

        </property>

    </bean>

 

</beans>

    个配置文件中,首先定了接口的实现svc和代理mylog,然后配置代理的接口,proxyInterfaces里面的value是我需要增的接口,target中的ref是接口的实现,interceptorNames中配置我使用哪一个代理用方法如下:

public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        IService isvc = (IService) context.getBean("myproxy");

        isvc.save();

    }

    三、Hibernate

    最后介一下Hibernate,首先用数据脚本建一个User表:

CREATE TABLE USER

(

    USERID INTEGER NOT NULL PRIMARY KEY,

    USERNAME VARCHAR(12) NOT NULL,

    PASSWORD VARCHAR(50)

);

    接着建一个User:

package lizon;

public class User {

    private int userid;

    private String username;

    private String password;

    public int getUserid() {

        return userid;

    }

    public void setUserid(int userid) {

        this.userid = userid;

    }

    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;

    }   

}

    建一个User.hbm.xmlUserUSER表关起来:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC

        ‘-//Hibernate/Hibernate Mapping DTD 3.0//EN‘

        ‘http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd‘>

<hibernate-mapping>

    <class name="lizon.User" table="USER">

        <id name="userid" column="USERID">

            <generator class="increment"/>

        </id>

        <property name="username" column="USERNAME"></property>

        <property name="password" column="PASSWORD"></property>

    </class>

</hibernate-mapping>

    添加一段代看一下Hibernate是怎么跟数据交互的:

package lizon;

import hb4.HibernateSessionFactory;

import org.hibernate.Session;

public class Run {

    public static void main(String[] args) {

        Session session = null; 

        try

            //取得Session

            session = HibernateSessionFactory.getSession(); 

            //开启事务处

            session.beginTransaction(); 

            //新增一个User,这时象是瞬

            User user = new User();

            user.setUsername("lizon"); 

            user.setPassword("123"); 

            //保存User象 ,这时象是持久化状

            session.save(user); 

            //提交事 

            session.getTransaction().commit(); 

        }catch(Exception e){ 

            e.printStackTrace(); 

            // 

            session.getTransaction().rollback(); 

        }finally

            if(session != null){ 

                if(session.isOpen()){ 

                    //session这时候的象是游离状

                    session.close(); 

                } 

            } 

        } 

    }

}

    段代中,我首先例化了一个新的User象,然后使用HibernateSession象保存到了数据,甚至包含了一个事务处理,在,我没有使用任何的sql句,仅仅对User行操作就可以持久化到数据,使用Hibernate减少了大量的重复JDBC的代,可以更好地实现面向象的程,当然,里介的只是Hibernate的冰山一角,由于篇幅有限,Hibernate的外、延HQL等有趣的可以自行学

 

时间: 2024-11-08 22:17:25

SSH配置与讲解的相关文章

SSH配置环境都正常,但是每次执行到Action中的方法时就中断了,而且不报任何错误

SSH配置环境都正常,但是每次执行到Action中的方法时就不执行课,而且不报任何错误.Action中的方法封装的是业务层,业务层封装DAO层,检查了一天才发现错误在哪. 在applicationContext.xml中报了一个异常,如: Multiple annotations found at this line: - Exception 'com/dao/StudentDAO : Unsupported major.minor version 51.0' - Exception 'com/

centos ssh配置使用

配置 数据阶梯 CentOS SSH配置 默认CentOS已经安装了OpenSSH,即使你是最小化安装也是如此.所以这里就不介绍OpenSSH的安装了. SSH配置: 1.修改vi /etc/ssh/sshd_config,根据模板将要修改的参数注释去掉并修改参数值: Port 22 指定SSH连接的端口号,安全方面不建议使用默认22端口 Protocol 2,1 允许SSH1和SSH2连接,建议设置成 Protocal 2 其他参数根据自己的需要进行调整.配置方法详见: man ssh_con

linux 防火墙和SSH配置

一.防火墙配置 # vi /etc/sysconfig/iptables 下面防火墙规则文件例子(标红部分是需要改的内容) /////////////////////////////////////////////////////////////////////////////////////////////////// # Firewall configuration written by system-config-securitylevel # Manual customization o

H3C交换机SSH配置完全攻略---转载

使用SSH+密码认证(基本SSH配置方法) 注:在用户使用SSH登录交换机时,交换机对所要登录的用户使用密码对其进行身份验证 生成RSA和DSA密钥对 [H3C]public-key local create rsa [H3C]public-key local create dsa 设置用户接口上的认证模式为AAA,并让用户接口支持SSH协议 [H3C]user-interface vty 0 4 [H3C-ui-vty0-4]authentication-mode scheme [H3C-ui

ssh配置服务及如何构建私有CA

构建私有CA及SSH配置服务 在了解如何构建私有CA之前,先来熟悉基础概念:CA表示证书颁发机构.PKI表示公钥基础设施.RA证书的注册机构.CRL证书的吊销列表.构架CA时还会涉及到一些加密方式,这里来了解一些加密类型. 几种加密方式及其区别:单项加密:主要用于数据的提取特征值,验证通信内容的完整性.对称加密:成对密钥,且双方密钥相同.一般用于加密通信内容,效率高安全性不好.公钥加密:成对密钥,但是密钥存在公钥和私钥,效率低,安全性好. CA存在的作用和意义:是用来增加通信资源可靠性的证书颁发

ssh配置公钥私钥(key)登录SecureCRT

在用windows时管理linux服务器时,常会用到SecureCRT.Xshell以及开源的putty.在我工作环境大多都是采用密码认证的方式进行登录.今天对学习了些SecureCRT的密钥登录方式.对比密码认证方式,使用密钥认证登录会有以下几个优点: 1.公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦2.多用户管理服务器时,可以通过多个公钥登录同一用户下,可以避免因为密码认证被用户都需要密码,导致的密码容易泄密的危险.并且使用passwd修改密码,也不会影响到其他用户的登录.3.做

FreeBSD系统SSH配置详解并能使用su

修改freebsd可以用sshd权限用户登录ssh 但不能用root用户登录的方法 在/etc/ssh/sshd_config最后中加入 PermitRootLogin yes #允许root登录 PermitEmptyPasswords no #不允许空密码登录 PasswordAuthentication yes # 设置是否使用口令验证. 就可以了 FreeBSD SSH配置详解 首先vi编辑/etc/inetd.conf,去掉ssh前的#,保存退出 (开启****ssh服务) 编辑/et

ssh远程登录讲解

ssh是什么东西? 在Linux系统中,OpenSSH是目前最流行的远程系统注册与文件传输应用,也是传统的Telnet,ftp的网络应用的换代产品,OpenSSH不仅适用于Linux系统,也可以适合多种Unix系统,而且起ssh与scp等客户端软件也适用于Windows操作系统.如有必要,Windows用户可以采用windows版的scp客户端软件,即winscp,在Windows系统与linux系统之间实现文件的复制. 如何安装ssh? 在Ubuntu Linux系统中,openssh的客户端

cisco+H3C交换机SSH配置实例

Cisco交换机+H3C交换机SSH配置(cisco关闭Telnet) Cisco交换机 进入交换机配置模式: a)        CoreSW#configure terminal 配置交换机名称: a)        CoreSW(config)#hostname CoreSW(可选配置). 配置domain-name: a)        CoreSW(config)#ip domain-namexxxxx.com(名称按自己要求而定). 配置登录用户和密码(如有本地用户可不创建). a)