SSH——struts_spring_plugin

struts_spring_plugin

(1)UserDao中加入一个方法叫做loadById()

package com.zgy.registration.dao;

import java.util.List;

import com.zgy.registration.model.User;

public interface UserDao {

public void save(User u);

public boolean checkUserExistsWithName(String username);

public List<User> list();

public User loadById(int id);

}

(2)UserDaoimpl中实现loadById(int id)

package com.zgy.registration.daoImpl;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;

import org.hibernate.Session;

import org.springframework.orm.hibernate4.HibernateTemplate;

import org.springframework.stereotype.Component;

import com.zgy.registration.dao.UserDao;

import com.zgy.registration.model.User;

import com.zgy.registration.util.HibernateUtil;

@Component("userDao")

public class UserDaoImpl implements UserDao {

private HibernateTemplate hibernateTemplate;

public void save(User u) {

hibernateTemplate.save(u);

}

public boolean checkUserExistsWithName(String username) {

List<User> user = (List<User>) hibernateTemplate.find("from User u where u.username=?", username);

if(user != null && user.size() > 0){

return true;

}

return false;

}

public HibernateTemplate getHibernateTemplate() {

return hibernateTemplate;

}

@Resource

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

@Override

public List<User> list() {

return (List<User>) this.hibernateTemplate.find("from User u");

}

@Override

public User loadById(int id) {

// TODO Auto-generated method stub

return this.hibernateTemplate.load(User.class, id);

}

}

(3)UserManager中加入一个loadById()方法

package com.zgy.registration.service;

import java.sql.SQLException;

import java.util.List;

import com.zgy.registration.model.User;

public interface UserManager {

public abstract boolean exists(User u) throws SQLException,

ClassNotFoundException;

public abstract void add(User u);

public abstract List<User> getUsers();

public abstract User loadById(int id);

}

(4)UserManagerImpl中实现loadById(int id)方法

package com.zgy.registration.serviceImpl;

import java.sql.SQLException;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.zgy.registration.dao.UserDao;

import com.zgy.registration.model.User;

import com.zgy.registration.service.UserManager;

@Component("userManager")

public class UserManagerImpl implements UserManager {

private UserDao userDao;

public UserDao getUserDao() {

return userDao;

}

@Resource

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

/* (non-Javadoc)

* @see com.zgy.registration.serviceImpl.UserManager#exists(com.zgy.registration.model.User)

*/

@Override

public boolean exists(User u) throws SQLException, ClassNotFoundException {

return userDao.checkUserExistsWithName(u.getUsername());

}

/* (non-Javadoc)

* @see com.zgy.registration.serviceImpl.UserManager#add(com.zgy.registration.model.User)

*/

@Override

public void add(User u) {

userDao.save(u);

}

@Override

public List<User> getUsers() {

// TODO Auto-generated method stub

return userDao.list();

}

@Override

public User loadById(int id) {

// TODO Auto-generated method stub

return this.userDao.loadById(id);

}

}

(5)UserAction中加入load()方法

package com.zgy.registration.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

import com.zgy.registration.model.User;

import com.zgy.registration.service.UserManager;

import com.zgy.registration.vo.UserRegisterInfo;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

@Component("user")

@Scope("prototype")

public class UserAction extends ActionSupport implements ModelDriven {

/**

*

*/

private static final long serialVersionUID = 1L;

private UserRegisterInfo info = new UserRegisterInfo();

private UserManager um;

private List<User> users;

private User user;

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public UserRegisterInfo getInfo() {

return info;

}

public void setInfo(UserRegisterInfo info) {

this.info = info;

}

public UserAction(){

}

public UserManager getUm() {

return um;

}

@Resource(name="userManager")

public void setUm(UserManager um) {

this.um = um;

}

@Override

public String execute() throws Exception {

User u = new User();

u.setUsername(info.getUsername());

u.setPassword(info.getPassword());

if(um.exists(u)) {

return "fail";

}

um.add(u);

return "success";

}

@Override

public Object getModel(){

return info;

}

public String list(){

this.users = this.um.getUsers();

return "list";

}

public List<User> getUsers() {

return users;

}

public void setUsers(List<User> users) {

this.users = users;

}

public String load(){

this.user = this.um.loadById(info.getId());

return "load";

}

}

(6)struts.xml中添加配置

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

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

<package name="registration" extends="struts-default" namespace="/">

<action name="user" class="com.zgy.registration.action.UserAction">

<result name="success">/registerSuccess.jsp</result>

<result name="fail">/registerFail.jsp</result>

<result name="list">/userlist.jsp</result>

<result name="load">/user.jsp</result>

</action>

</package>

</struts>

(7)访问http://localhost:8080/32_Registration10/user!load.action?id=1

(8)报错:

Unable to instantiate Action, com.zgy.registration.action.UserAction,  defined for ‘user‘ in namespace ‘/‘Failed to convert property value of type ‘com.zgy.registration.action.UserAction‘ to required type ‘com.zgy.registration.model.User‘ for property ‘user‘; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.zgy.registration.action.UserAction] to required type [com.zgy.registration.model.User] for property ‘user‘: no matching editors or conversion strategy found - action - file:/D:/study/tools/Tomcats/apache-tomcat-6.0.32/webapps/32_Registration10/WEB-INF/classes/struts.xml:9:70

(9)出错的原因是:

struts_spring_plugin中,有一个struts.objectFactory.spring.autoWire,默认值是name

struts中的Action 中的属性会自动根据名字查找对应的bean。就是测出的setUser()方法会自动找一个名叫user的bean,而此时user这个bean对应的是UserAction,所以报错。

(10)解决方法:

将UserAction的@Component改为u

UserAction中不需要注入userManager,由插件自动注入

package com.zgy.registration.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

import com.zgy.registration.model.User;

import com.zgy.registration.service.UserManager;

import com.zgy.registration.vo.UserRegisterInfo;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

@Component("u")

@Scope("prototype")

public class UserAction extends ActionSupport implements ModelDriven {

/**

*

*/

private static final long serialVersionUID = 1L;

private UserRegisterInfo info = new UserRegisterInfo();

private UserManager userManager;

private List<User> users;

private User user;

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public UserRegisterInfo getInfo() {

return info;

}

public void setInfo(UserRegisterInfo info) {

this.info = info;

}

public UserAction(){

}

public UserManager getUserManager() {

return userManager;

}

public void setUserManager(UserManager userManager) {

this.userManager = userManager;

}

@Override

public String execute() throws Exception {

User u = new User();

u.setUsername(info.getUsername());

u.setPassword(info.getPassword());

if(userManager.exists(u)) {

return "fail";

}

userManager.add(u);

return "success";

}

@Override

public Object getModel(){

return info;

}

public String list(){

this.users = this.userManager.getUsers();

return "list";

}

public List<User> getUsers() {

return users;

}

public void setUsers(List<User> users) {

this.users = users;

}

public String load(){

this.user = this.userManager.loadById(info.getId());

return "load";

}

}

(11)运行

org.apache.jasper.JasperException: could not initialize proxy - no Session - Class: org.hibernate.proxy.AbstractLazyInitializer

此时原来的报错已经解决了,以上报错是因为load()方法取出的数据,load()方法取得的是代理对象而产生的报错

(12)在使用了struts_spring_plugin后,Struts中的Action将有该插件产生,不再是由spring产生

(13)解决以上报错的方法:

a) 使用get()方法代替load()方法

b) 扩大session的范围

(14)扩大session的范围的方式是在web.xml中增加如下filter

<filter>

<filter-name>openSessionInView</filter-name>

<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>

</filter>

(15)如果在spring的配置文件中,配置的取得SessionFactory的bean的名字不是sessionFactory 的话,上面的filter将会出错,因其默认的就是sessionFactory,此时可以在<filter>中添加参数来实现对应。

<init-param>

<param-name>sessionFactoryBeanName</param-name>

<param-value>sf</param-value>

</init-param>

(16)OpenSessionInViewFilter默认的事务是只读的,当没有配置spring的事务管理的时候使用了OpenSessionInViewFilter将会出错。当配置了事务后,OpenSessionInViewFilter会认为该事务的模式是read-write。

(17)配置Action中的class属性为u,在UserAction上写上@Component("u"),这样就可以在spring容器中查找对应的class

a) 修改struts.xml

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

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

<package name="registration" extends="struts-default" namespace="/">

<action name="u" class="u">

<result name="success">/registerSuccess.jsp</result>

<result name="fail">/registerFail.jsp</result>

<result name="list">/userlist.jsp</result>

<result name="load">/user.jsp</result>

</action>

</package>

</struts>

b) 修改UserAction.java

package com.zgy.registration.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

import com.zgy.registration.model.User;

import com.zgy.registration.service.UserManager;

import com.zgy.registration.vo.UserRegisterInfo;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

@Component("u")

@Scope("prototype")

public class UserAction extends ActionSupport implements ModelDriven {

/**

*

*/

private static final long serialVersionUID = 1L;

private UserRegisterInfo info = new UserRegisterInfo();

private UserManager userManager;

private List<User> users;

private User user;

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

public UserRegisterInfo getInfo() {

return info;

}

public void setInfo(UserRegisterInfo info) {

this.info = info;

}

public UserAction(){

}

public UserManager getUserManager() {

return userManager;

}

@Resource

public void setUserManager(UserManager userManager) {

this.userManager = userManager;

}

@Override

public String execute() throws Exception {

User u = new User();

u.setUsername(info.getUsername());

u.setPassword(info.getPassword());

if(userManager.exists(u)) {

return "fail";

}

userManager.add(u);

return "success";

}

@Override

public Object getModel(){

return info;

}

public String list(){

this.users = this.userManager.getUsers();

return "list";

}

public List<User> getUsers() {

return users;

}

public void setUsers(List<User> users) {

this.users = users;

}

public String load(){

this.user = this.userManager.loadById(info.getId());

return "load";

}

}

二十二、中文问题

(1)解决中文问题使用spring的filter

<filter-name>encodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>GBK</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

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

</filter-mapping>

(2)使用struts的配置

<constant name="struts.i18n.encoding" value="UTF-8" />

(3)运行程序,从页面输入中文字符,数据库中存储的中文可以实现,没有出现乱码

时间: 2024-10-12 20:52:12

SSH——struts_spring_plugin的相关文章

华为交换机配置telnet和SSH登录设备(简单实用版)

Telnet是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.在终端使用者的电脑上使用telnet程序,用它连接到服务器.终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样.可以在本地就能控制服务器.要开始一个telnet会话,必须输入用户名和密码来登录服务器.Telnet是常用的远程控制Web服务器的方法,极大的提高了用户操作的灵活性. 测试拓扑图 配置telnet: 1.1普通认证登录

【Struts2】SSH如何返回JSON数据

  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就是平常的配置 第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下 1 package com.javen.tool; 2 3 import java.io.IOException; 4 import java.io.P

Linux ssh

一.简介 二.安装 三.配置 四.其他 1)SSH端口转发 https://blog.fundebug.com/2017/04/24/ssh-port-forwarding/

已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步代码时,还是提示输入密码?

GitHub虽好,但毕竟在国内访问不是很稳定,速度也不快,而且推送到上面的源码等资料必须公开,除非你给他交了保护费:所以有条件的话,建议大家搭建自己的Git Server.本地和局域网服务器都好,不信你试试,那速度,怎一个爽字了得! 默认情况下,使用TortoiseGit同步代码,每次都需要输入用户名和密码,但为了方便可以在客户端创建ssh密钥,用于服务器端和客户端的认证(详细过程大家可参考这里),但有时会出现“ 已经在Git Server服务器上导入了SSH公钥,可用TortoiseGit同步

maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)

前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ssh项目分割为不同的几个部分独立开发,很重要,加油 --WH 一.maven父工程与子模块的拆分与聚合原理 问题描述:将ssh工程拆分为多个模块开发 1.1.拆分原理 创建一个maven project(pom),然后在创建三个子模块(maven moudule),其中三个子模块,分别为 dao.service.web,也就是将三层的内容分别独立为一个项目,进一步将耦合性降低,其中如何将他们

ssh 忽略known_hosts连接

ssh 忽略known_hosts连接两种方式 1.通过paramiko连接: #!/usr/bin/env python import paramiko ip='192.168.190.128' username='root' password='server' port=22 #设置记录日志 paramiko.util.log_to_file('ssh.log') #生成ssh客户端实例 s = paramiko.SSHClient() s.set_missing_host_key_poli

&lt;Linux&gt; SSH配置之后 SHH slave1 测试 error:SSH: command not found

首先要查看一下ssh命令存在何处 # which ssh /usr/bin/ssh 使用ssh的绝对路径 # /usr/bin/ssh slave1Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64) * Documentation: https://help.ubuntu.com/ 545 packages can be updated.240 updates are security updates.

Linux服务器安全策略配置-SSH与动态MOTD(一)

Linux登录提示(静态/动态MOTD) 在用户输入口令或使用密钥成功登录后,让服务器自动为我们执行几个简单的操作,如打印提示信息,打印异常信息,执行一个脚本,或者发送邮件等.能够预先提示信息给登录者,让我们在登录机器采取任何操作之前,可以快速的了解这台机器的重要信息.看起来是不是很有意思呢? 也许我们会想,这对于服务器的安全加固并没有直接的影响,而且每次刚刚登录就执行一系列命令.脚本(如收集服务器资源使用情况的信息),似乎也有点多余.因此,如果是在生产环境的Linux服务器并且需要配置登录提示

SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层. (2)建立好各层的实现类及接口; (3)建立一个source folder文件夹,用来存放一些配置问价. (4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下. Java工程层级结构如下图: 二.hibernate整合到Spring容器中 步骤: 1.编写domain