精华内容
下载资源
问答
  • ssh项目

    2018-09-10 21:47:31
    最近整理笔记发现之前写过的一个ssh商城项目的demo。主要功能有产品展示,分类,搜索,下单,购物车,申请退款,收货地址,用户中心,上传头像登陆,修改密码,注册,登陆,发邮件,评价..、后台管理系统(角色管理...

    最近整理笔记发现之前写过的一个ssh商城项目的demo。主要功能有产品展示,分类,搜索,下单,购物车,申请退款,收货地址,用户中心,上传头像登陆,修改密码,注册,登陆,发邮件,评价…、后台管理系统(角色管理,权限管理,用户管理,订单管理,处理退款,个人基本信息设置,系统日志,订单统计,采购管理,发货,商品管理…)

    先来看看项目吧
    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里做了异常拦截器,作用单反项目出现异常将直接跳转自定义404页面,作为用户体验的友好提示。在struts.xml里配置如下:

    <global-results>
    			<result name="exceptionPage">/error.html</result>
    			<result name="login" type="redirectAction"> login_login</result>   
    		</global-results> 
    		<global-exception-mappings>
    			<exception-mapping result="exceptionPage" exception="java.lang.Exception" />
    		</global-exception-mappings>
    

    这个项目已经搭建好了框架,从前端到后端的jsp页面,以及上面图片的功能均已做完,如果有朋友想学习这一块,或者想那这个半成品的项目练手,请联系我q: 1913284695(附加:原文连接和项目源码)

    代码已经有了该有的功能,可以进行参考借鉴哦

    展开全文
  • 完整SSH项目,完整SSH项目

    千次下载 热门讨论 2010-05-09 23:11:33
    完整SSH项目,完整SSH项目,完整SSH项目
  • 完整的ssh项目 完整的ssh项目

    热门讨论 2011-05-27 09:55:15
    完整的ssh项目 完整的ssh项目完整的ssh项目 完整的ssh项目完整的ssh项目 完整的ssh项目
  • SSH项目基础框架,整合了spring+hibernate+struts2三个基础框架,可以用此项目包作为快速开发ssh框架项目开发的基础框架。
  • 使用纯Java实现一个WebSSH项目

    万次阅读 多人点赞 2020-03-10 13:18:21
    使用纯Java语言实现的WebSSH项目。 技术:SpringBoot+WebSockey+jsch+xterm.js

    前言

    最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:GateOne、webssh、shellinabox等,这些项目都可以很好地实现webssh的功能,但是最终并没有采用,原因是在于这些底层大都是python写的,需要依赖很多文件,自己用的时候可以使用这种方案,快捷省事,但是做到项目中供用户使用时,总不能要求用户做到服务器中必须包含这些底层依赖,这显然不太合理,所以我决定自己动手写一个WebSSH的功能,并且作为一个独立的项目开源出来。

    github项目开源地址:https://github.com/NoCortY/WebSSH

    技术选型

    由于webssh需要实时数据交互,所以会选用长连接的WebSocket,为了开发的方便,框架选用SpringBoot,另外还自己了解了Java用户连接ssh的jsch和实现前端shell页面的xterm.js.

    所以,最终的技术选型就是 SpringBoot+Websocket+jsch+xterm.js

    导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <!-- Web相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- jsch支持 -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.54</version>
        </dependency>
        <!-- WebSocket 支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!-- 文件上传解析器 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>
    

    一个简单的xterm案例

    由于xterm是一个冷门技术,所以很多同学并没有这方面的知识支撑,我也是为了实现这个功能所以临时学的,所以在这给大家介绍一下。

    xterm.js是一个基于WebSocket的容器,它可以帮助我们在前端实现命令行的样式。就像是我们平常再用SecureCRT或者XShell连接服务器时一样。

    下面是官网上的入门案例:

    <!doctype html>
     <html>
      <head>
        <link rel="stylesheet" href="node_modules/xterm/css/xterm.css" />
        <script src="node_modules/xterm/lib/xterm.js"></script>
      </head>
      <body>
        <div id="terminal"></div>
        <script>
          var term = new Terminal();
          term.open(document.getElementById('terminal'));
          term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
        </script>
      </body>
     </html>
    

    最终测试,页面就是下面这个样子:

    xterm入门

    可以看到页面已经出现了类似与shell的样式,那就根据这个继续深入,实现一个webssh。

    后端实现

    由于xterm只要只是实现了前端的样式,并不能真正地实现与服务器交互,与服务器交互主要还是靠我们Java后端来进行控制的,所以我们从后端开始,使用jsch+websocket实现这部分内容。

    • WebSocket配置

      由于消息实时推送到前端需要用到WebSocket,不了解WebSocket的同学可以先去自行了解一下,这里就不过多介绍了,我们直接开始进行WebSocket的配置。

      /**
      * @Description: websocket配置
      * @Author: NoCortY
      * @Date: 2020/3/8
      */
      @Configuration
      @EnableWebSocket
      public class WebSSHWebSocketConfig implements WebSocketConfigurer{
          @Autowired
          WebSSHWebSocketHandler webSSHWebSocketHandler;
          @Override
          public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
              //socket通道
              //指定处理器和路径,并设置跨域
              webSocketHandlerRegistry.addHandler(webSSHWebSocketHandler, "/webssh")
                      .addInterceptors(new WebSocketInterceptor())
                      .setAllowedOrigins("*");
          }
      }
      
    • 处理器(Handler)和拦截器(Interceptor)的实现

      刚才我们完成了WebSocket的配置,并指定了一个处理器和拦截器。所以接下来就是处理器和拦截器的实现。

      拦截器

      public class WebSocketInterceptor implements HandshakeInterceptor {
          /**
           * @Description: Handler处理前调用
           * @Param: [serverHttpRequest, serverHttpResponse, webSocketHandler, map]
           * @return: boolean
           * @Author: NoCortY
           * @Date: 2020/3/1
           */
          @Override
          public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
              if (serverHttpRequest instanceof ServletServerHttpRequest) {
                  ServletServerHttpRequest request = (ServletServerHttpRequest) serverHttpRequest;
                  //生成一个UUID,这里由于是独立的项目,没有用户模块,所以可以用随机的UUID
                  //但是如果要集成到自己的项目中,需要将其改为自己识别用户的标识
                  String uuid = UUID.randomUUID().toString().replace("-","");
                  //将uuid放到websocketsession中
                  map.put(ConstantPool.USER_UUID_KEY, uuid);
                  return true;
              } else {
                  return false;
              }
          }
      
          @Override
          public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
      
          }
      }
      

      处理器

      /**
      * @Description: WebSSH的WebSocket处理器
      * @Author: NoCortY
      * @Date: 2020/3/8
      */
      @Component
      public class WebSSHWebSocketHandler implements WebSocketHandler{
          @Autowired
          private WebSSHService webSSHService;
          private Logger logger = LoggerFactory.getLogger(WebSSHWebSocketHandler.class);
      
          /**
           * @Description: 用户连接上WebSocket的回调
           * @Param: [webSocketSession]
           * @return: void
           * @Author: Object
           * @Date: 2020/3/8
           */
          @Override
          public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {
              logger.info("用户:{},连接WebSSH", webSocketSession.getAttributes().get(ConstantPool.USER_UUID_KEY));
              //调用初始化连接
              webSSHService.initConnection(webSocketSession);
          }
      
          /**
           * @Description: 收到消息的回调
           * @Param: [webSocketSession, webSocketMessage]
           * @return: void
           * @Author: NoCortY
           * @Date: 2020/3/8
           */
          @Override
          public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {
              if (webSocketMessage instanceof TextMessage) {
                  logger.info("用户:{},发送命令:{}", webSocketSession.getAttributes().get(ConstantPool.USER_UUID_KEY), webSocketMessage.toString());
                  //调用service接收消息
                  webSSHService.recvHandle(((TextMessage) webSocketMessage).getPayload(), webSocketSession);
              } else if (webSocketMessage instanceof BinaryMessage) {
      
              } else if (webSocketMessage instanceof PongMessage) {
      
              } else {
                  System.out.println("Unexpected WebSocket message type: " + webSocketMessage);
              }
          }
      
          /**
           * @Description: 出现错误的回调
           * @Param: [webSocketSession, throwable]
           * @return: void
           * @Author: Object
           * @Date: 2020/3/8
           */
          @Override
          public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {
              logger.error("数据传输错误");
          }
      
          /**
           * @Description: 连接关闭的回调
           * @Param: [webSocketSession, closeStatus]
           * @return: void
           * @Author: NoCortY
           * @Date: 2020/3/8
           */
          @Override
          public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {
              logger.info("用户:{}断开webssh连接", String.valueOf(webSocketSession.getAttributes().get(ConstantPool.USER_UUID_KEY)));
              //调用service关闭连接
              webSSHService.close(webSocketSession);
          }
      
          @Override
          public boolean supportsPartialMessages() {
              return false;
          }
      }
      

      需要注意的是,我在拦截器中加入的用户标识是使用了随机的UUID,这是因为作为一个独立的websocket项目,没有用户模块,如果需要将这个项目集成到自己的项目中,需要修改这部分代码,将其改为自己项目中识别一个用户所用的用户标识。

    • WebSSH的业务逻辑实现(核心)

      刚才我们实现了websocket的配置,都是一些死代码,实现了接口再根据自身需求即可实现,现在我们将进行后端主要业务逻辑的实现,在实现这个逻辑之前,我们先来想想,WebSSH,我们主要想要呈现一个什么效果。

      我这里做了一个总结:

      1.首先我们得先连接上终端(初始化连接)

      2.其次我们的服务端需要处理来自前端的消息(接收并处理前端消息)

      3.我们需要将终端返回的消息回写到前端(数据回写前端)

      4.关闭连接

      根据这四个需求,我们先定义一个接口,这样可以让需求明了起来。

      /**
       * @Description: WebSSH的业务逻辑
       * @Author: NoCortY
       * @Date: 2020/3/7
       */
      public interface WebSSHService {
          /**
           * @Description: 初始化ssh连接
           * @Param:
           * @return:
           * @Author: NoCortY
           * @Date: 2020/3/7
           */
          public void initConnection(WebSocketSession session);
      
          /**
           * @Description: 处理客户段发的数据
           * @Param:
           * @return:
           * @Author: NoCortY
           * @Date: 2020/3/7
           */
          public void recvHandle(String buffer, WebSocketSession session);
      
          /**
           * @Description: 数据写回前端 for websocket
           * @Param:
           * @return:
           * @Author: NoCortY
           * @Date: 2020/3/7
           */
          public void sendMessage(WebSocketSession session, byte[] buffer) throws IOException;
      
          /**
           * @Description: 关闭连接
           * @Param:
           * @return:
           * @Author: NoCortY
           * @Date: 2020/3/7
           */
          public void close(WebSocketSession session);
      }
      

      现在我们可以根据这个接口去实现我们定义的功能了。

      1. 初始化连接

        由于我们的底层是依赖jsch实现的,所以这里是需要使用jsch去建立连接的。而所谓初始化连接,实际上就是将我们所需要的连接信息,保存在一个Map中,这里并不进行任何的真实连接操作。为什么这里不直接进行连接?因为这里前端只是连接上了WebSocket,但是我们还需要前端给我们发来linux终端的用户名和密码,没有这些信息,我们是无法进行连接的。

        public void initConnection(WebSocketSession session) {
                JSch jSch = new JSch();
                SSHConnectInfo sshConnectInfo = new SSHConnectInfo();
                sshConnectInfo.setjSch(jSch);
                sshConnectInfo.setWebSocketSession(session);
                String uuid = String.valueOf(session.getAttributes().get(ConstantPool.USER_UUID_KEY));
                //将这个ssh连接信息放入map中
                sshMap.put(uuid, sshConnectInfo);
        }
        
      2. 处理客户端发送的数据

        在这一步骤中,我们会分为两个分支。

        第一个分支:如果客户端发来的是终端的用户名和密码等信息,那么我们进行终端的连接。

        第二个分支:如果客户端发来的是操作终端的命令,那么我们就直接转发到终端并且获取终端的执行结果。

        具体代码实现:

        public void recvHandle(String buffer, WebSocketSession session) {
                ObjectMapper objectMapper = new ObjectMapper();
                WebSSHData webSSHData = null;
                try {
                    //转换前端发送的JSON
                    webSSHData = objectMapper.readValue(buffer, WebSSHData.class);
                } catch (IOException e) {
                    logger.error("Json转换异常");
                    logger.error("异常信息:{}", e.getMessage());
                    return;
                }
            //获取刚才设置的随机的uuid
                String userId = String.valueOf(session.getAttributes().get(ConstantPool.USER_UUID_KEY));
                if (ConstantPool.WEBSSH_OPERATE_CONNECT.equals(webSSHData.getOperate())) {
                    //如果是连接请求
                    //找到刚才存储的ssh连接对象
                    SSHConnectInfo sshConnectInfo = (SSHConnectInfo) sshMap.get(userId);
                    //启动线程异步处理
                    WebSSHData finalWebSSHData = webSSHData;
                    executorService.execute(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                //连接到终端
                                connectToSSH(sshConnectInfo, finalWebSSHData, session);
                            } catch (JSchException | IOException e) {
                                logger.error("webssh连接异常");
                                logger.error("异常信息:{}", e.getMessage());
                                close(session);
                            }
                        }
                    });
                } else if (ConstantPool.WEBSSH_OPERATE_COMMAND.equals(webSSHData.getOperate())) {
                    //如果是发送命令的请求
                    String command = webSSHData.getCommand();
                    SSHConnectInfo sshConnectInfo = (SSHConnectInfo) sshMap.get(userId);
                    if (sshConnectInfo != null) {
                        try {
                            //发送命令到终端
                            transToSSH(sshConnectInfo.getChannel(), command);
                        } catch (IOException e) {
                            logger.error("webssh连接异常");
                            logger.error("异常信息:{}", e.getMessage());
                            close(session);
                        }
                    }
                } else {
                    logger.error("不支持的操作");
                    close(session);
                }
        }
        
      3. 数据通过websocket发送到前端

        public void sendMessage(WebSocketSession session, byte[] buffer) throws IOException {
                session.sendMessage(new TextMessage(buffer));
        }
        
      4. 关闭连接

        public void close(WebSocketSession session) {
            //获取随机生成的uuid
                String userId = String.valueOf(session.getAttributes().get(ConstantPool.USER_UUID_KEY));
                SSHConnectInfo sshConnectInfo = (SSHConnectInfo) sshMap.get(userId);
                if (sshConnectInfo != null) {
                    //断开连接
                    if (sshConnectInfo.getChannel() != null) sshConnectInfo.getChannel().disconnect();
                    //map中移除该ssh连接信息
                    sshMap.remove(userId);
                }
        }
        

      至此,我们的整个后端实现就结束了,由于篇幅有限,这里将一些操作封装成了方法,就不做过多展示了,重点讲逻辑实现的思路吧。接下来我们将进行前端的实现。

    前端实现

    前端工作主要分为这么几个步骤:

    1. 页面的实现
    2. 连接WebSocket并完成数据的接收并回写
    3. 数据的发送

    所以我们一步一步来实现它。

    • 页面实现

      页面的实现很简单,我们只不过需要在一整个屏幕上都显示终端那种大黑屏幕,所以我们并不用写什么样式,只需要创建一个div,之后将terminal实例通过xterm放到这个div中,就可以实现了。

      <!doctype html>
      <html>
      <head>
          <title>WebSSH</title>
          <link rel="stylesheet" href="../css/xterm.css" />
      </head>
      <body>
      <div id="terminal" style="width: 100%;height: 100%"></div>
      
      <script src="../lib/jquery-3.4.1/jquery-3.4.1.min.js"></script>
      <script src="../js/xterm.js" charset="utf-8"></script>
      <script src="../js/webssh.js" charset="utf-8"></script>
      <script src="../js/base64.js" charset="utf-8"></script>
      </body>
      </html>
      
    • 连接WebSocket并完成数据的发送、接收、回写

      openTerminal( {
          //这里的内容可以写死,但是要整合到项目中时,需要通过参数的方式传入,可以动态连接某个终端。
              operate:'connect',
              host: 'ip地址',
              port: '端口号',
              username: '用户名',
              password: '密码'
          });
          function openTerminal(options){
              var client = new WSSHClient();
              var term = new Terminal({
                  cols: 97,
                  rows: 37,
                  cursorBlink: true, // 光标闪烁
                  cursorStyle: "block", // 光标样式  null | 'block' | 'underline' | 'bar'
                  scrollback: 800, //回滚
                  tabStopWidth: 8, //制表宽度
                  screenKeys: true
              });
      
              term.on('data', function (data) {
                  //键盘输入时的回调函数
                  client.sendClientData(data);
              });
              term.open(document.getElementById('terminal'));
              //在页面上显示连接中...
              term.write('Connecting...');
              //执行连接操作
              client.connect({
                  onError: function (error) {
                      //连接失败回调
                      term.write('Error: ' + error + '\r\n');
                  },
                  onConnect: function () {
                      //连接成功回调
                      client.sendInitData(options);
                  },
                  onClose: function () {
                      //连接关闭回调
                      term.write("\rconnection closed");
                  },
                  onData: function (data) {
                      //收到数据时回调
                      term.write(data);
                  }
              });
          }
      

    效果展示

    • 连接

      连接

    • 连接成功

      连接成功

    • 命令操作

      ls命令:

      ls命令

      vim编辑器:

      vim编辑器

      top命令:

      top命令

    结语

    这样我们就完成了一个webssh项目的实现,没有依赖其它任何的组件,后端完全使用Java实现,由于用了SpringBoot,非常容易部署。

    但是,我们还可以对这个项目进行扩展,比如新增上传或下载文件,就像Xftp一样,可以很方便地拖拽式上传下载文件。

    这个项目之后我会持续更新,上述功能也会慢慢实现,Github:https://github.com/NoCortY/WebSSH

    喜欢可以给个Star哦~

    欢迎大家访问我的个人博客:Object’s Blog

    展开全文
  • ssh结构ssh项目结构

    2010-04-16 17:34:08
    简单概述java ssh项目的分层结构,了解企业中ssh框架的使用规范
  • 我将带领大家搭建Java+Tomcat+Struts开发环境,并亲手开发SSH项目。1、您将学会亲手搭建JavaWeb开发环境。2、您将学会SSH三大框架的原理与整合,并亲手开发SSH项目。 3、手把手教学,助力您轻松进入Java的编程...
  • 在eclipse导入SSH项目

    万次阅读 2017-04-30 20:43:37
    在eclipse导入SSH项目

    第一步:建立一个workspace(或者用已有的workspace也可以),将工程文件夹复制到workspace

    我的workspace文件夹直接建立在E盘的根目录下

    第二步:将工程导入工程

    1.打开eclipse (此处需注意:应采用javaEE 的IDE),别忘了在进入之时选中刚才的workspace

    2.点击file ->  import 

    进入界面如下,并按照下图说明操作


    然后点击确定,最后再点击Finish

    第三步:消除”红色”

    可以看见,项目中有很多错误,但这并不是项目代码的错误

    1.首先要部署一下tomcat

    点击:  windows-> preference

    注意:第3处可根据自己电脑上安装的tomcat版本来选择,下图也是一样,

    2.创建数据库

    首先建立数据库连接,注意记住密码

    右键创建数据库


    注意创建之时将字符集编码改成 UTF-8

    创建之后将已经创建好的表格导入


    此时,再右键刷新一下

     

    3.修改代码中数据库的相关配置

    第四步:运行测试


    展开全文
  • SSH项目到Maven项目。

    千次阅读 2015-11-21 22:57:57
    在这里,我将手把手教你从SSH项目到Maven项目。 首先,我们在MyEclipse下有一个项目叫Electric 看到这么多的引入的包,想死的心都有了,有木有? 很多初学者肯定有很多疑问,这么多的依赖包我要怎么管理。确实。...

    在这里,我将手把手教你从SSH项目到Maven项目。
    首先,我们在MyEclipse下有一个项目叫Electric
    这里写图片描述

    看到这么多的引入的包,想死的心都有了,有木有?
    很多初学者肯定有很多疑问,这么多的依赖包我要怎么管理。确实。很难管理。在没有Maven前,第三方jar包的导入就是这样。有了maven之后就好了。只要在配置文件pom.xml中(Project Object Model)把依赖配置copy下。得了。可以写代码了,不用操心jar包的导入问题喽!!
    具体怎么搞?
    懂得怎么创建Maven项目的同学跳过这一部分,直接到开始移植项目

    新建Maven项目

    File->New->Web Project。有盆友肯定会奇怪了。不是新建Maven项目按吗。没错就是Web Project,只不过在新建项目的时候,把这个勾勾给勾上!切记!!!(Add Maven Support)
    这里写图片描述点击下一步,点击remove
    这里写图片描述
    下面这个勾勾打上,不打也可以,不过要记得自己添加web.xml
    这里写图片描述
    下面这里要注意啦,选择MyEclipse JEE Project ,那么将不是Maven规范,是我们普通项目。这里我选择Standard Maven JEE project struture,满足Maven约束。不这样做也可以,个人习惯。
    这里写图片描述
    点击下一步,出现叫我们导包的界面。这里把勾勾都去掉
    这里写图片描述
    因为这些Jar包都是MyEclipse中自带的jar包,没有需要让maven为我们管理。免得pom.xml文件过大。点击Finish完成Maven项目的创建。
    这里写图片描述
    这时候,项目报错了,报错的原因是因为没有导入JavaEE5.0的支持。因为上一步我们把它勾掉了。现在我就来导入,导入大家都会导入吧。点击项目->右键->Build Path->Add Library->MyEclipse Library,在弹出的对话框中输入JavaEE,出现
    这里写图片描述
    双击JavaEE 6.0 Generic Library。OK,项目没有报错了,说明我们所做正确。
    接下来就是移植项目了。

    开始移植项目

    选中原来的项目,选中src包下所有的包。ctrl+c复制
    这里写图片描述
    到我们新建的maven项目下ctrl+v粘贴
    这里写图片描述
    报错不要紧。
    因为项目中有一部分是junit测试的,我把他移动到src/test/java目录下
    这里写图片描述
    接下来是把配置文件移动过来!就是config目录下的配置文件,移动到新项目的src/main/resources和src/test/resources文件夹下,test和main中都要有,因为测试时候读取的是测试目录下的资源,如果不拷贝一份,测试可能不会通过。下面是旧的工程下的config目录下的资源,选中他们

    这里写图片描述
    下面是拷贝之后的图,记得test里面也要有。
    下面是拷贝之后的图

    到了这里,基本上已经完成了80%了。
    接下来web.xml文件。项目原型。
    不说,看图
    这里写图片描述

    记得不要选META-INF 和WEB-INF
    WEB-INF要选择目录下的lib(如果有) 还有web.xml
    Ctrl+C复制
    到新项目src/main/webapp下粘贴。
    如果WEB-INF下有lib,记得build path
    重点来了,配置pom.xml
    把这一段加入到pom.xml
    记得,拷贝标签里面的到你的pom.xml文件中的标签里面。之所以全部粘出来是怕有些人看不懂

    <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>Electric_mvn</groupId>
        <artifactId>Electric_mvn</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
        <name>Electric_mvn</name>
        <description />
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <!--记得从这里看是拷贝,依赖部分-->
        <dependencies>
            <!-- spring 3.0.2需要的jar包 -->
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>3.0.2.RELEASE</version>
            </dependency>
            <!-- Struts 2.3.3需要的jar包 -->
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.3.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-json-plugin</artifactId>
                <version>2.3.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-spring-plugin</artifactId>
                <version>2.3.3</version>
            </dependency>
            <!-- Hibernate核心包,需要的jar包 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>3.5.6-Final</version>
            </dependency>
            <!-- chcache需要的jar包 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-ehcache</artifactId>
                <version>3.6.5.Final</version>
            </dependency>
            <dependency>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
                <version>1.5.0</version>
            </dependency>
            <!-- JPA -->
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.0-api</artifactId>
                <version>1.0.1.Final</version>
            </dependency>
            <!-- Servlet & Jsp需要的jar包 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.0</version>
                <scope>provided</scope>
            </dependency>
            <!-- log4j需要的jar包 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.2</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
            <!-- C3P0需要的jar包 -->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
            <!-- mysql需要的jar包 -->
            <dependency>
    
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
            <!-- junit需要的jar包 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <!--拷贝到这里为止-->
        <!--下面这些是MyEclipse自动生成的,我们不管-->
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <version>3.0</version>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

    下面这个是保存后的,可以看到,错误都没有了。
    这样就大功告成了。
    这里写图片描述
    不过,往往新手到这里还是不行的。
    还是报错!我在这里就折腾了很久。报错原因是没有更新索引。

    错误处理

    MyEclipse工具栏点击Windows->Preferences->MyEclipse->Maven4MyEclipse
    这里写图片描述
    首先点击Installations->Add(如果之前已经配置过了,可以跳过)
    ->选择Mave的所在目录,就是安装目录。
    搞定之后,选择User setting点击Browser,到你的maven仓库。如果没有配置的话,默认是在C:\Users\Administrator.m2下的setting.xml,选中它。MyEclipse会自动更新目录。如果你在目录下找不到,你可以试着
    C:\Users\用户名.m2这样子找。一个一个找。如果你配置了自定义仓库位置。但是又忘记仓库的所在位置。可以打开maven的安装目录下conf/settings.xml文件查看。
    打开后你将会看到。
    这里写图片描述
    划线部分是仓库位置,如果没有配置的话,是没有的。注释掉那一部分就说明了默认仓库的位置。
    好啦,回到MyEclipse,选择好了仓库下的settings.xml文件 后
    这里写图片描述
    在这里可能有人会有疑问,maven安装目录在conf/中有了settings.xml为什么要选择仓库的?全局配置不是更好吗。其实不然。你一个机子上难保只有一个仓库,所以,对于多仓库,需要不同配置。只有这样做才能够满足。
    回到MyEclipse,点击Update Settings。接下来就是等。漫长的等待。
    其实这里也有解决方案。我们知道,maven的中央仓库是在外国的服务器上的。在天朝,访问外国的服务器肯定慢了。
    所以我们要把中央仓库配置为国内的maven.oschina.net这个。这样速度提高的不止10倍啊。
    打开settings.xml文件。找到mirrors标签。在里面这样子配置。

      <mirrors>
         <!--这里配置的是中央库的地址,这里不是用官方库,因为官方库速度慢-->
        <mirror>
            <id>nexus-osc</id>
            <mirrorOf>*</mirrorOf>
            <name>Nexus osc</name>
            <url>http://maven.oschina.net/content/groups/public/</url>
        </mirror>
      </mirrors>

    还有就是profile标签中也要配置。这里是配置补丁的位置

    <profiles>
        <profile>
            <id>jdk-1.4</id>
    
            <activation>
                <jdk>1.4</jdk>
            </activation>
    
            <repositories>
                <repository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>http://maven.oschina.net/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>local private nexus</name>
                    <url>http://maven.oschina.net/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    
      </profiles>

    大功告成

    展开全文
  • IDEA导入SSH项目的配置

    2020-10-12 10:42:28
    VCS检测SSH项目 导入完成后,选中项目点击按钮配置,按钮在右上角: Modules配置: 下面是配置依赖包 配置web.xml: 注意web.xml的路径,修改成你项目的路径如下: 项目部署: 导入Tomcat : 运行项目,...
  • SSH项目集成redis(缓存示例)

    千次阅读 2019-07-22 17:08:46
    SSH项目集成redis
  • Eclipse导入SSH项目启动Tomcat访问404 问题描述 解决方案 我的SSH项目有webapp文件,需要先按一般步骤导入项目后,在右击项目弹出的Properties->Deployment Assembly通过Add添加进去,启动运行即访问到:...
  • SSH项目向Flex项目整合过程概要

    千次阅读 2012-05-15 23:54:11
    结合上次对SSH项目与Flex项目集成的问题记录,可以了解这两个项目的大体情况。在《Flex项目与SSH项目整合问题记录 》中主要是针对Flex向SSH中进行整合,此文描述的情况为SSH项目向Flex项目整合,此整合过程并不需要...
  • 如何创建一个SSH项目

    千次阅读 热门讨论 2016-07-31 11:04:27
    那么在如何创建一个SSH项目呢?创建项目时需要注意哪些情况呢?下面这篇博客就介绍一下如何创建一个SSH项目。 创建过程 1、创建一个WEB项目  创建一个Web Project,并设置编码格式为UTF-8,创建Source Folder...
  • IDEA导入SSH项目用Tomcat运行

    千次阅读 2019-01-08 17:43:52
    这里用SVN检出的SSH项目: 导入完成后,选中项目点击按钮配置,按钮在右上角: Modules配置: 一个项目中可以有多个子项目,每个子项目相当于一个模块。一般我们项目只是单独的一个,IDEA 默认也是单子...
  • 当导入别人的ssh项目后,启动tomcat,报![在这里插入图片描述](https://img-blog.csdnimg.cn/2019031115571712.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4...
  • ssh项目中在session中保存了user的信息且能获取到,当跳转到其他的action完成一次查询后,session的user信息被自动清空了
  • 开发项目重用是很重要的开发手段,正直开发一个SSH项目,其中有一功能可重用之前的整个Flex项目(通过BlazeDS与java端交互,所需服务和servlet等有spring和springMVC来管控)。其实Flex项目同其他项目整合原理很简单...
  • SSH项目与SSM项目的进入首页的方法

    千次阅读 2018-11-13 21:27:45
    SSH项目中: jsp页面一般都是存放在WEB-INF下面的目录下,这样我们就不能直接访问到这些jsp页面了,保证了页面的安全性。 在struts的管理中,是利用action来实现页面的跳转,进入index.jsp即页面的首页,我们采用...
  • 前段时间 java 企业级开发课程需要做 ssh 的实验,我在将项目导入 eclipse 的时候出现了错误,当时解决了也就没在意,但是最近开始做实验的时候发现很多同学都有这个错误,所以我在此记录一下。如下图所示,导入 SSH...
  • SSH项目上手步骤

    2013-06-18 21:38:49
    20130603001.SSH项目上手步骤 1.配置myEclipse环境,tomcat(不用安装)环境 2.从svn下载项目原码导入 3.进行编译,发布。跑起来。 4.在浏览器上进行访问 访问格式如下:http://ip:port/项目名 ...
  • SSH 项目整合所需要的全部jar 包 转载
  • 基于SSH项目开发过程回顾

    千次阅读 2017-05-03 18:17:04
    ssh项目开发流程: 一、项目开发计划 1、分析项目的模块,生成项目解决方案 2、项目架构设计 分为:表现层→控制层→业务层→Dao层→持久层→db数据库,分别对各层进行设计 框架的搭建遵循从后往前的规则 db...
  • idea环境下使用maven创建ssh项目

    千次阅读 2019-01-26 18:09:30
    idea环境下使用maven创建ssh项目 新建项目 点击create from archetype(使用模板进行创建),由于要构建javaweb项目,所以选择webapp,点击next。 填写相关信息groupId,ArtifactId,点击next. 所谓GroupID是项目...
  • 配置从git上拉取的ssh项目 1.第一步点击file->project Structure 2.第二步,点击project 3.第三步,点击Module,再点击“+”,选择web,然后点击右方"+"。分别点击图2中的红框中的内容,进行选择 4.第四步,选择...
  • SSH项目整合实现Ajax注册用户验证

    千次阅读 2017-06-28 20:02:54
    SSH项目整合实现Ajax注册用户验证 前面我们已经实现了SSH项目整合的注册登录 现在我们在在注册界面加入Ajax验证,在用户输入注册信息时,实现界面提示用户信息是否存在。 项目就不一步一步搭建了,前面的项目可以...
  • Ssh项目添加WebService功能的步骤

    千次阅读 2015-01-20 01:17:03
    Ssh项目添加WebService功能的步骤
  • JavaEE后台开发,MyEclipse创建SSH项目,MyEclipse创建Java web 由maven管理的SSH项目。1、创建SSH项目1、创建web工程 2、勾选maven支持 3、下一步 4、两个都勾选 5、选择maven 6、取消勾选,不选择依赖,因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,584
精华内容 25,033
关键字:

ssh项目