java实践:web应用整体串联

自写代码 整合第三发现成代码
Test类的main方法 浏览器
socket客户端 浏览器
tomcat类的http(url) tomcat服务器
url解析类 tomcat服务器
socket服务端 tomcat服务器
解析url封装成request类 servlet包
响应数据封装response类 servlet包
httpservlet父类 servlet包
login业务类 login业务类
web.properties web.xml
有接口规范,没明说 有接口规范,明文规定
string或浏览器地址写报文 界面填参数,浏览器的form表单提交时自动拼接请求报文
  1. web_maven工程
  2. maven项目构建
  3. 接口规范
  4. http协议
  5. web服务器(servlet容器)
  6. html界面
  7. ftp远程上传到服务器
  8. ftp程序上传测试环境
  9. security远程终端
  10. 测试环境换包
  11. 测试环境查看日志

建工程

web_project——>suportMaven——>generate web.xml——>standard Maven Project

使用maven管理依赖包

        
            javax.servlet
            javax.servlet-api
            3.0.1
            provided
        

三、接口规范

login登录接口

请求报文

字段名 字段描述 字段长度 约束 备注
name 姓名 V20 1
password 密码 V8 1
role 角色 V10 1 student和teacher

响应报文

字段名 字段描述 字段长度 约束 备注
resultCode 响应码 F4 1
resultCodeDesc 响应描述 v100 ?

新建login接口类

package com.guoyasoft;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("------------login doGet-----------------");
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("-------------login doGet-----------------");
        super.doPost(req, resp);
    }

}

web.xml把类映射到url地址



    webWl
    
        index.html
        index.htm
        index.jsp
        default.html
        default.htm
        default.jsp
    
    
        login
        com.guoyasoft.Login
    
    
        login
        /login
    
    
        login
        /vip_login
    

将web工程部署到tomcat并启动

浏览器测试

http://127.0.0.1:8081/webWl/login
信息: Starting ProtocolHandler ["http-apr-8081"]
十二月 11, 2017 10:39:42 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
十二月 11, 2017 10:39:42 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 3171 ms
------------login doGet-----------------

服务端按接口规范进行开发

package com.guoyasoft;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String name=req.getParameter("name");
        String age=req.getParameter("age");
        String role=req.getParameter("role");
        System.out.println("------------login doGet-----------------");
        System.out.println(name+","+age+","+role);
        
        String result="resultCode=0000&resultCodeDesc=success";
        resp.getWriter().write(result);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        System.out.println("-------------login doGet-----------------");
        super.doPost(req, resp);
    }

}

客户端按照接口规范调用

http://127.0.0.1:8081/webWl/login?name=guoyasoft&age=1&role=teacher

响应数据

resultCode=0000&resultCodeDesc=success

以界面的方式填写请求数据(get)



  
    MyHtml.html
    
    
    
    
    
    

  
  
  
    
Login:
Password:
role: + student teacher

界面地址:

http://127.0.0.1:8081/webWl/MyHtml.html

提交后浏览器地址:

http://127.0.0.1:8081/webWl/login?login=wuling&password=1234455&role=teacher

提交后浏览器窗口

resultCode=0000&resultCodeDesc=success

get数据都在地址栏,不安全,改成post

界面提交方式改成post

    

servlet接口实现doPost方法

package com.guoyasoft;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String name=req.getParameter("name");
        String age=req.getParameter("age");
        String role=req.getParameter("role");
        System.out.println("------------login doGet-----------------");
        System.out.println(name+","+age+","+role);
        
        String result="resultCode=0000&resultCodeDesc=success";
        resp.getWriter().write(result);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String name=req.getParameter("name");
        String age=req.getParameter("age");
        String role=req.getParameter("role");
        System.out.println("------------login doPost-----------------");
        System.out.println(name+","+age+","+role);
        
        String result="resultCode=0000&resultCodeDesc=success";
        resp.getWriter().write(result);
    }

}

浏览器测试效果:
界面地址

http://127.0.0.1:8081/webWl/MyHtml.html

提交跳转地址

http://127.0.0.1:8081/webWl/login

窗口内容

resultCode=0000&resultCodeDesc=success

四、添加数据库

对比项 plsql java代码
tns+用户 tns文件 url字符串
用户名密码 登录的时候填 简历链接时填
登录客户端 oracleClient+plsql 驱动类(oracle.jdbc.driver.OracleDriver)
建立链接 session 连接类Connection
写SQL SQL窗口 sql字符串
执行SQL 执行按钮 执行类StateMent
返回值 结果窗口 结果类ResultSet

tns:

aliyun_oradb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 120.132.0.117)(PORT = 1521))
   )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME= CCSDB1)
    )
)

java

jdbc:oracle:thin:@120.132.0.117:1521:CCSDB1

数据库实例,就是数据库的库名
一个数据库,可以有很多个实例,就是有很多个库
一个数据库类似一个tomcat服务器,一个实例,相当于一个web应用

添加数据库依赖

        
            ojdbc
            ojdbc
            14
        

弄清楚用到的表并写SQL

select * from tb_student t ;
select * from tb_teacher t ;
select t.student_id,t.student_name,t.sclass from tb_student t where t.student_id='guoyasoft' and t.password=''123456;
select t.teacher_id,t.password from tb_teacher t where t.password='12321' and t.teacher_id='asdasd';

使用jdbc链接数据库并执行SQL

package com.guoyasoft;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            {
        String name=req.getParameter("name");
        String password=req.getParameter("password");
        String role=req.getParameter("role");
        System.out.println(name+","+password+","+role);
        String result="resultCode=9999&resultCodeDesc=error";
        if(name !=null && password!=null && role !=null){
            result="resultCode=0000&resultCodeDesc=success";
            String sql="";
            //1. 写SQL
            if("student".equals(role)){
                sql="select t.student_id id,t.student_name name,t.sclass class from tb_student t where t.student_id='"+name+"' and t.password='"+password+"'";
            }else if("teacher".equals(role)){
                sql="select t.teacher_id id,t.password from tb_teacher t where t.teacher_id='"+name+"' and t.password='"+password+"'";
            }
            System.out.println(sql);
            try{

                //2. 建立数据库连接
                Class.forName("oracle.jdbc.driver.OracleDriver");
                Connection con=DriverManager.getConnection("jdbc:oracle:thin:@120.132.0.117:1521:CCSDB1","shuccs1o","q1w2e3r4t5");
                Statement st=con.createStatement();
                ResultSet rs=st.executeQuery(sql);
                while(rs.next()){
                    String id=rs.getString(1);
                    System.out.println("按照下标取:"+id);
                    id=rs.getString("ID");
                    System.out.println("按照名称取:"+id);
                }
                rs.close();
                st.close();
                con.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        try {
            resp.getWriter().write(result);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }

}


web.xml



  webWl
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
    login
    com.guoyasoft.Login
  
  
    login
    /login
  
  
  
    login
    /loginVIP
  

测试:

http://127.0.0.1:8081/webWl/loginVIP?name=guoyasoft&password=123456&role=teacher

使用maven打包工程

修改pom.xml,打包方式改成war

使用maven命令打包

mavne clean package

使用ftp工具,将war包上传到远处服务器

  1. 本地启动ftp工具
  2. ip(指定远程主机)
  3. 端口(远程主机的ftp程序)
  4. 用户名和密码
  5. 登录后,本地和远程互传
对比项 qq ftp
接发文件 ok ok
查看对方目录结果 不行 ok
在对方的文件系统里面增删改查 不行 ok
非文件的操控 不行 不行

secureFX

远程登录服务器,执行命令(远程桌面)

windows远程桌面

linux远程终端

直接显示远程主机的界面(linux跟cmd很像,只有命令行,windows是远程桌面)
securityCRT

换包要用到的命令

以列表和非列表的方式展现

  1. 进入到webapps、bin、logs文件
    ls:查看目录,以行的模式展现
    ls -l:以列的方式展现
    ls -a:查看所有文件
    ls -al或者ls -la或者ls -a -l

  2. 隐藏文件和非隐藏文件
    windows:右键——>隐藏,查看隐藏文件:组织——>文件夹和管理——>查看——>显示隐藏文件
    linux:以“.”开头就是隐藏文件;查看隐藏文件:ls -a

  3. 区分文件和文件夹
    第一种:粗体是文件夹,正常的是文件
    第二种:ls -l查看,d开头是文件夹,-开头的是文件

.:当前文件件
..:上级文件夹
~:登录的用户根目录(cd什么目录都不加,也是回到用户根目录)
/:整个主机的根目录,类似c:\

路径

  1. 第一种:pwd,查看当前绝对路径
  2. 第二种:命令提示符前面那一串(需要通过环境变量配格式)

环境变量和命令提示符

  1. 光标和光标签的提示信息
  2. 环境变量配置提示符
## 配置文件
用户根目录,也就是登录进去的那个目录
.bash_profile

## 变量名PS1
export PS1="[\u \w]\$"

增删改查

类型 命令 文件 文件夹 示例
删除 rm rm 文件名 rm -rf 文件夹名

可执行文件

操作系统 文件后缀
windwos .exe、.bat
linux .sh

启动tomcat:

./shutdown.sh
./startup.sh

查看日志

## 日志路径
tomcat_home/logs/catalina.out 

## 查看日志

只看后面(只看最新内容)

tail -200f catalina.out

日志查看方式

  1. 自动刷新日志
  2. 可以敲空行,便于查看

你可能感兴趣的:(java实践:web应用整体串联)