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管理依赖包

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

三、接口规范

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地址

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>webWl</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.guoyasoft.Login</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/vip_login</url-pattern>
    </servlet-mapping>
</web-app>

将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)

<!DOCTYPE html>
<html>
  <head>
    <title>MyHtml.html</title>
    
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <form name="f1" id="f1" action="login" method="get">
      <table>
        <tr>
          <td>Login:</td>
          <td><input type="text" name="login" id="login"></td>
        </tr>
        <tr>
          <td>Password:</td>
          <td><input type="password" name="password" id="password"></td>
        </tr> 
        
        <tr>
          <td>role:</td>
          <td>+
          <input type="radio" name="role" id="role" value="student">student
          <input type="radio" name="role" id="role" value="teacher">teacher
          </td>
        </tr> 
        <tr>
          <td colspan="2"><input type="submit"></td>
        </tr>
      </table>
    </form>
  </body>
</html>

界面地址:

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

    <form name="f1" id="f1" action="login" method="get">

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应用

添加数据库依赖

        <dependency>
            <groupId>ojdbc</groupId>
            <artifactId>ojdbc</artifactId>
            <version>14</version>
        </dependency>

弄清楚用到的表并写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

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>webWl</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.guoyasoft.Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/loginVIP</url-pattern>
  </servlet-mapping>
</web-app>

测试:

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. 可以敲空行,便于查看
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354