SSH(七)新的开始

在完成了ssh框架搭建的基础上,我尝试着去了解更多。新一阶段还是一些简单的增删改查,只是提高自己的熟练度。

这一片我要创建一个登录页面,并查询数据库完成登录。

一、创建实体:

1、1新建职员实体employee:

package com.ssh.entity;

import java.util.Date;

public class Employee {

	private int employee_id;
	private String username;
	private String password;
	private String sex;
	private String positioin;
	private int phone;
	private Date birthday;

	//所属部门
	private Department department;

	public int getEmployee_id() {
		return employee_id;
	}

	public void setEmployee_id(int employeeId) {
		employee_id = employeeId;
	}

	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;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getPositioin() {
		return positioin;
	}

	public void setPositioin(String positioin) {
		this.positioin = positioin;
	}

	public int getPhone() {
		return phone;
	}

	public void setPhone(int phone) {
		this.phone = phone;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public Department getDepartment() {
		return department;
	}

	public void setDepartment(Department department) {
		this.department = department;
	}

}

1、2创建部门实体department:

package com.ssh.entity;

import java.util.HashSet;
import java.util.Set;

public class Department {

	private int department_id;
	private String department_name;
	private String department_parent_id;

	//部门员工集合(hibernate有单向关联,这里用双向关联)
	private Set<Employee> employees = new HashSet<Employee>();

	public int getDepartment_id() {
		return department_id;
	}
	public void setDepartment_id(int departmentId) {
		department_id = departmentId;
	}
	public String getDepartment_name() {
		return department_name;
	}
	public void setDepartment_name(String departmentName) {
		department_name = departmentName;
	}
	public String getDepartment_parent_id() {
		return department_parent_id;
	}
	public void setDepartment_parent_id(String departmentParentId) {
		department_parent_id = departmentParentId;
	}
	public Set<Employee> getEmployees() {
		return employees;
	}
	public void setEmployees(Set<Employee> employees) {
		this.employees = employees;
	}

}

二、实体映射文件:

2、1employee的映射文件employee.hbm.xml:

(注意职员表和部门表的对应关系多对一)

<?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="com.ssh.entity.Employee" table="employee">
		<id name="employee_id" column="employee_id">
			<generator class="native"></generator>
		</id>

		<property name="username" column="username" length="20"></property>
		<property name="password" column="password" length="20"></property>
		<property name="sex" column="sex" length="2"></property>
		<property name="positioin" column="positioin" length="20"></property>
		<property name="phone" column="phone" length="20"></property>
		<property name="birthday" column="birthday" ></property>

		<!-- 配置关联关系,员工对部门是多对一,这里生成的也是数据库表的外键。 -->
		<many-to-one name="department" class="com.ssh.entity.Department" column="depart_id"/>
	</class>
</hibernate-mapping>

2、2department实体映射文件:department.hmb.xml:

<?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="com.ssh.entity.Department" table="department">
		<id name ="department_id" column="department_id">
			<generator class="native"></generator>
		</id>

		<property name="department_name" column="department_name" length="20"></property>
		<property name="department_parent_id" column="department_parent_id" length="50"></property>

		<!-- 配置关联关系 -->
		<set name="employees">
			<key column="depart_id"></key>
			<one-to-many class="com.ssh.entity.Employee"/>
		</set>
	</class>

</hibernate-mapping>

3、3在applicationcontext.xml→sessionFactory→mappingResources引入hibernate映射文件:

        	<property name="mappingResources">
        		<list>
        			<!-- 映射文件全路径 -->
        			<value>com/ssh/entity/product.hbm.xml</value>
        			<value>com/ssh/entity/Department.hbm.xml</value>
        			<value>com/ssh/entity/Employee.hbm.xml</value>

        		</list>
        	</property>

运行项目,让ssh为你在数据库去创建你要的employee、department表。

三、新建登录页面

就在index.xml基础上修改吧。

这里有一个struts2的标签可以学习下:<h1><s:actionerror/></h1>他可以将后台的错误提示信息自动显示。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!-- struts2 标签库 -->
<%@taglib uri ="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>登录页面</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>

  <body>
  	<div align="center">
  		<h1><s:actionerror/></h1>
  		<h1>欢迎</h1>
    <s:form action="door_login" method="post" namespace="/" theme="simple">
    	<table border="1" width="400">
    		<tr>
    			<td>用户名:</td>
    			<td><s:textfield name="username"/></td>
    		</tr>
    		<tr>
    			<td>密    码:</td>
    			<td><s:textfield name="password"/></td>
    		</tr>
    		<tr>
    			<!-- colspan: 合并单元格-->
    			<td align="center" colspan="2"><input type="submit" value="登录"> </td>
    		</tr>
    	</table>
    </s:form>
  	</div>
  </body>
</html>

四、控制层、业务层、持久层登录方法的实现:

employeeAction:使用模型驱动ModelDriven接收前端数据

这里面有一个addActionError的方法,就是将错误提示信息返回给前端页面。

package com.ssh.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ssh.entity.Employee;
import com.ssh.service.employeeService;

public class employeeAction extends ActionSupport implements ModelDriven<Employee> {
	private Employee employee = new Employee();
	//使用模型驱动接收前段页面数据,并将获取数据封装到employee对象。
	public Employee getModel() {
		// TODO Auto-generated method stub
		return employee;
	}

	//注入业务层类
	private employeeService employeeService;
	public void setEmployeeService(employeeService employeeService) {
		this.employeeService = employeeService;
	}

	public String login(){
		Employee existEmployee = employeeService.login(employee);
		Date date = new Date();
		if (existEmployee != null) {
			System.out.println("acction"+existEmployee);
			//登陆成功,提示登录成功!把登录信息存入session
			this.addActionMessage(existEmployee.getUsername()+"登录成功!"+"\t"+date);
			ActionContext.getContext().getSession().put("existEmployee", employee);
			return SUCCESS;
		}else {
			//登录失败,提示错误信息,返回登录界面。
			this.addActionError("用户名或密码错误!");
			return INPUT;
		}
		//return NONE;
	}

}

employeeService:

public interface employeeService {

	Employee login(Employee employee);

}

实现类employeeServiceImpl:

public class employeeServiceImpl implements employeeService {
	private employeeDao employeeDao;
	//注入dao
	public void setEmployeeDao(employeeDao employeeDao) {
		this.employeeDao = employeeDao;
	}

	public Employee login(Employee employee) {
		Employee existEmployee = employeeDao.findUsernameAndPassword(employee);
		return existEmployee;
	}

}

employeeDao:

public interface employeeDao {

	Employee findUsernameAndPassword(Employee employee);

}

实现类employeeDaoImpl:注意继承hibernate模板

public class employeeDaoImpl extends HibernateDaoSupport implements employeeDao {

	public Employee findUsernameAndPassword(Employee employee) {
		String hql ="from Employee where username = ? and password = ?";
		List<Employee> list =this.getHibernateTemplate().find(hql, employee.getUsername(),employee.getPassword());
		if (!list.isEmpty()) {
			System.out.println("dao:"+list.get(0));
			return list.get(0);
		}
		return null;
	}

}

五、配置applicationcontext.xml以及struts.xml:

5、1控制层、业务层、持久层的注入配置:

		<bean id="employeeAction" class="com.ssh.action.employeeAction" scope="prototype">
			<!-- 需要手动注入service -->
			<property name="employeeService" ref="employeeService"></property>
		</bean>

		<!-- 配置业务层的类 -->
		<bean id="employeeService" class="com.ssh.service.impl.employeeServiceImpl">
			<property name="employeeDao" ref="employeeDao"></property>
		</bean>

	    <!-- 配置dao层:注入hibernate模板 -->
        <bean id="employeeDao" class="com.ssh.dao.impl.employeeDaoImpl">
        	<!-- ref 值与sessionFactory bean id保持一致 -->
        	<property name="sessionFactory" ref="sessionFactory"></property>
        </bean>

5.2struts.xml的action配置:

注意这里配置的两个返回结果标签result,成功的跳转addproduct。jsp,失败的返回登录页。

<?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.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

  <package name="default" namespace="/" extends="struts-default">
        <action name="door_*" class="employeeAction" method="{1}">
        	<result name="success">/addproduct.jsp</result>
        	<result name="input">/index.jsp</result>
        </action>
    </package>

</struts>

六、运行项目

成功跳转:

时间: 2024-11-08 14:07:04

SSH(七)新的开始的相关文章

Ubuntu创建新用户并解决ssh登录显示异常

创建用户 #创建ubuntu用户 adduser ubuntu 添加sudo权限 #放开写/etc/sudoers文件的权限 chmod u+w /etc/sudoers #编辑 vim /etc/sudoers ##在root ALL=(ALL) ALL下增加xxx ALL=(ALL) ALL ##四种类型的权限设置,添加任意一种 ##xxx ALL=(ALL) ALL ##允许用户xxx执行sudo命令(需要输入密码) ##%xxx ALL=(ALL) ALL ##允许用户组xxx里面的用户

RHEL7.0修改SSH默认端口及SELinux运行状态修改

Linux系统安装好后,默认会开启SSH服务以便远程配置.但使用默认端口22不安全,一般不建议使用默认端口,那就需要修改SSH默认端口.在RHEL7.0上修改和7.0以下类似,但要注意SELinux的修改. SSH 为 Secure Shell,由IETF的网络工作小组(Network Working Group)所制定:SSH 是建立在应用层和传输层基础上的一种安全协议.SSH传输数据是加密的,可以有效防止传输过程被截取数据保障安全.SSH的数据是经过压缩的,所以可以加快传输的速度. 修改步骤

[故障解决]Ssh连接port 22: Connection refused

金山云有一个服务器需要连接到数据库但是总是失败,检查之后发现它的VPC配错了,更改VPC之后,这台服务器也会更换一个新的内网IP地址,但是问题来了,更换了内网IP之后,从跳板机连接,提示port 22: Connection refused. #ssh -v 新的ip地址,发现根本没有到Connection established.直接就提示port 22: Connection refused.这基本可以断定不是跳板机的问题了,那么就需要在远程机器里看配置. 但是远程机器是无法连接的啊,怎么办

使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: 2.使用ping钥匙临时开启远程主机SSH:22端口: 我们今天就讨论第2种方案,阐述如何通过ping钥匙来临时打开SSH:22的访问权限 原理: recent 模块可以记录最近访问者IP,常利用此功能做DROP策略应对syn-flood及ddos攻击.但在本例中我们反其道,利用recent模块做A

多github帐号的SSH key切换

我有两个github帐号,一个是个人所用,一个是为公司项目所用.如果是单用户(single-user),很方便,默认拿id_rsa与你的github服务器的公钥对比:如果是多用户(multi-user)如user1,user2,那么就不能用在user2的身上了,这个时候就要配置一下了: 1.新建user2的SSH Key #新建SSH key: $ cd ~/.ssh # 切换到C:\Users\Administrator\.ssh ssh-keygen -t rsa -C "[email pr

RHEL7 修改SSH默认端口及修改SELinux运行状态

RHEL7安装后,默认开启SSH服务以便远程配置,但默认端口22并不安全,一般不建议使用默认端口,那就修改SSH默认端口.在sshd_config里面的修改RHEL7.0上修改和7.0以下类似,但要注意SELinux的修改. 修改步骤: 1.查看是否已安装SSH软件包  # rpm -qa|grep ssh 2.检查服务是否开启  # systemctl status sshd.service 3.检查进程运行状态  # ps -ef |grep sshd 4.检查程序运行端口 # netsta

Iptables构建ssh安全一例

这两天对iptables这块做温习,受其他网友的启发,发现recent这个模块在线上的环境做ssh防护还是挺受用的. recent的使用实际也很简单,咱们先来看看其各个常用的参数 --name            #设定列表名称,默认DEFAULT.     --rsource       #源地址,此为默认.     --rdest         #目的地址     --seconds       #指定时间内     --hitcount      #命中次数     --set   

DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: 2.使用ping钥匙临时开启远程主机SSH:22端口: 我们今天就讨论第2种方案,阐述如何通过ping钥匙来临时打开SSH:22的访问权限 原理: recent 模块可以记录最近访问者IP,常利用此功能做DROP策略应对syn-flood及ddos攻击.但在本例中我们反其道,利用recent模块做A

阿里云修改默认的ssh端口

Linux服务器的ssh服务支持远程访问服务器,默认的ssh端口号是22.为了安全起见,很多用户会将端口号由22改为其他的端口号.? 如果遇到修改端口号并重启ssh服务后,新的端口号不生效,请参考以下步骤检查:? 1.?如果是使用命令 /usr/sbin/sshd -p修改端口号 ,它是实时的,也就是命令执行后,不重启ssh服务新的监听端口就已经生效了.但是重启ssh服务之后,sshd依然会使用配置文件中指定的监听端口,所以可能会造成一个假象是用命令无法修改端口. 2. 修改配置文件中的端口号,

docker创建支持ssh服务的centos镜像

以centos为基础,目的使用ssh服务远程连接docker容器 环境:宿主机centos7,直接搜索docker的centos镜像,下载最新版本 1.先按照docker:yum install -y epel-release yum install -y docker 2.启动docker: systemctl start docker.service 3.使用ps查看docker是否启动 ps aux |grep docker 4.下载centos的docker镜像 docker pull