Java Web程序设计的学习

属于B/S结构、服务器软件:Apache Tomcat、

Web 项目 目录结构:

1.src目录:存放Java源文件

2.WebRoot目录:

           存在两个子目录:

           META-INF目录        

           WEB-INF目录:(lib目录:存放驱动程序)、(web.xml文件:非常重要,不能删除)

3.其它目录(需要额外创建,例如Image目录、jsp文件)

Tomact启动验证:http://localhost:8080

部署:我这里不选择Tomcat 6.x  因为我的这个tomact太久没用了,之前不知道是不是删了什么东西,最后导致如果,就是你把你的项目部署在这个服务器上的话,它是不存在的,见下图:

点击这个查看目录是否存在,如果不存在,说明这个部署是失败的。

什么原因我也不太清楚。反正如果使用Myelicpse Tomcat去部署,你会发现,你的那个目录是存在的,所以使用上面那个来做项目。先把疑问留在这里。继续往下学习。

第一章  HTML基础

一个HTML基本上是由标签和属性构成。属性写在标签里面。

基本结构:

<html>

<head>        </head>

<body>         </body>

</html>

标签是可以嵌套的。空格:&nbsp;

疯狂记忆标签:

标题标签:<h n>   </h n>    n取值1~6.代表6个级别

<br>  换行标签(少见的单标签,一般标签都有</>,这种是双标签)

<p align="left">  </p>   这才是一个完整的标签。(标签+属性)

以下全部为单标签:

hr   、br

img它常用src属性。

以下全部为双标签,就只单写英文了,不写其它东西,方便记忆。

h   、 p  

font   、  2<sup>5 </sup>  、 <sub>

<ul> 内含<li>   、   <ol>  内含<li> 

表格标签:<table>   、 <caption>   、 <tr>  、 <th>   、  <td>

链接:a

form:<input>  背下来它的type属性值。<textarea>、<select>包含<option>、

框架:<frameset cols或rows> 、 <frame src>

以下为一些通用的标签属性:

align:对齐方式,属性值有”center、left、right“

size:宽度

width:长度,默认为页面长,可以使用百分制表示页面长度的多少。

color:颜色。#FF0000  这是三种颜色(红绿蓝)分量的组合。每个分量取值:00~FF。

bgcolor:背景颜色

border:边框宽度

width:宽度

height:高度

应用举例:

制作一个登录、注册页面。详细见书本p42上机习题。

代码分析:

<frameset rows="">    //这个是框架不能放在body标签内部,要把body删除

<a href="" target="name ">     //a链接,不是src。

//!!这个注意,target会在frame框架里面选择一个name显示。

<frame src=""    scrolling="auto">     //跳转链接,注意和前面的区分

<select>  <option>文字      //下拉列表,option的外面就是下列列表的里面描述

<input type="button"  value=" ">  //value表示按钮的内容,注意和前面一个区分。

第二章 JavaScript基础  (java脚本)

JavaScript 是一种跨平台、面向对象的脚本语言,用于使网页具有交互性(例如,具有复杂的动画、可点击的按钮、弹出菜单等)。它包含一组标准对象,如 Array、Date 和 Math,以及一组核心语言元素,如运算符、控制结构和语句。核心 JavaScript 可以通过添加额外的对象来扩展,以实现各种目的。

JavaScript 最初是为了“让网页变得活跃”而创建的。这种语言中的程序称为脚本。它们可以直接写在网页的 HTML 中,并在页面加载时自动运行。脚本以纯文本形式提供和执行,不需要特殊准备或编译即可运行。

和java用法一样。也有不同点:

1.变量的声明:var          //弱变量,会根据赋值的类型改变而改变。

2,函数(方法)的定义:function 函数名(参数列表){   return 值; }

        //建议:都是先定义,再去使用这个函数。

(在java中函数的使用都是,先创建对象,然后通过对象.方法(函数)的方式使用它。)

JavaScript内置对象:

这里主要学习四个:

1.Window:

2.document

3.history

4.location

Window的计时器功能记一下:timer = window.setTimeout("需要运行的函数","时间ms")

document可以实现在网页上输出,最常用writeln()函数。

document对象能访问文档中的元素。例如得到文本的账号、密码。

训练:请写一个登录账号的document的脚本,当账号和密码为空时,弹出消息。

代码分析:

document.表单名.账号(密码)名.value;   ///通过这种方式获取文本信息。

函数定义的方式相当于java中的void类型,所以返回写:return;

在调用这个函数的最后要写提交表单。不然就没有提交表单信息了!!!(因为在html代码里面,点击事件用的是script的函数。)

document.loginForm.submit();   //!!注意是submit()方法,不能少括号。

location对象最常用的方式是:定时跳转   比如:欢迎登录,三秒后转到首页。

用法:windows.setTimeout("toIndex","3000");

function toIndex(){

     window.location.href = "   "

}

主要部分:JSP编程

第三章:JSP基本语法

JavaServer Pages (JSP) 是一种技术,它允许开发人员使用 HTML、XML 和 Java 代码的组合来创建动态网页。JSP 页面在 Web 服务器上执行,生成的输出发送到客户端的 Web 浏览器。

JSP 是 Java 企业版(Java EE)的一部分,用于构建支持动态内容的 Web 应用程序。JSP 文件本质上是带有一些额外语法的 .html 文件,有两个小的初始差异:.html 后缀被替换为 .jsp(它被认为是 .jsp 文件类型),并且在 .html 标记元素的顶部添加了以下标记:<%@ page contentType=\"text/html;charset=UTF-8\" language=\"java\" %>。
 

它的优点是:在客户端(网页开发工具)看不到源代码。凡是以<%  内容 %>,在客户端都看不到内容。

JSP表达式:< % = 变量/返回值/表达式 % >     (这种表达式,一次只能出现单行。一般用的还是JSP程序段

作用是将里面的内容所运算的结果传输到客户端。

凡是没有加<% % >都被称为HTML代码。

JSP声明:<%  ! % >

<%   !  String str="欢迎!" %>

JSP有关的URL传值:

String str = request.getParameter("number");   //这个能获取URL的参数。必须要加"".!

int number = Integer.parseInt(str);   //传输的参数是字符串,必须进行强转换。

代码分析:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> //就因为在这里多了一个"导致错误。无语!!!,但是它是到运行的时候才给我抛出异常,先记住一下这个异常:

<a href="index.jsp?number=<%= number %>">toindex</a>    //记一下这种方式,<% %>表达式可以作用在字符串里面。

JSP指令:

<% @  指令类别  属性=”属性值“       %>

前面的:<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>   

在程序的第一段就是指令。

指令类别有三种,这里我们只介绍两种:page和include.

page指令是用的最多的。

它可以导入包:page import=" "

可以设定字符集:page  pageEncoding=" "

可以设定MIME类型和字符编码(其实用途和上面那个设定字符集一样。):

contentType = " text/html ;  charset= gb2312  "     //注意区别,只有一个” “。

JSP动作:

<jsp: 动作名 属性=”属性值“> </jsp:动作名>      //注意区分前面。

第四章:表单开发

以用例举例来说明:书本P97,第五题。

代码分析:

1.<script type="text/javascript">  类型里面:

//误区:account="" 这个字符串里面不能有空格
        if (account == "") {
            alert("账号不能为空");
            return;
        }

2.<form>里面。

<!--误区:这个type只能是button,不能是submit类型。因为它现在还没有进行提交。要判断之后才可以-->
            <input type="button" οnclick="fun()" value="登录">

3.<form action=   method= >  里面的<input >

 <!--误区:可以使用隐藏表单来接收上一个jsp的账号 -->
            <input type="hidden" name="account" value="<%=account%>">

4.  <% %>表达式里面。

<% 
       //在需要获得中文的那个页面输入此行。所以main.jsp不需要转换。
       request.setCharacterEncoding("gb2312");

完整代码:login.jsp  提交给  main.jsp   提交给  show.jsp

第五章 JSP访问数据库

JDBC(Java Database Connectivity)是一个用于连接和执行数据库查询的API。JDBC可以与任何数据库一起使用,只要提供了适当的驱动程序。

java.sql包提供了用于访问和处理数据的API,通常存储在关系数据库中。这个API包括一个框架,可以动态安装不同的驱动程序以访问不同的数据源。

使用JDBC连接和操作数据库的步骤:(在JAVA学习第四步讲过一点)

1.手动添加JDBC驱动程序。

2.注册JDBC驱动:Class.forName();

3.建立数据库连接:Connection con = DriverManager.getConnection(url,user,password);

4.使用java.sql包的接口(类Statement)去运行SQL语句: 

           Statement stat = con.createStatement();

            stat.executeQuery(sql语句);    //查询方法

          通过创建ResultSet对象来获取结果:ResultSet rs = sql.executeQuery();

5.关闭数据库连接。stat.close;     co.close;

(第一步手动添加不记,我们在写代码的时候,牢记四步走。)

注意一下在jsp程序里面和在Java程序里面的使用流程是一样的。但是Java程序里面多了很多个try ---catch语句。
 

疯狂记忆SQL语句(前面Java学习里面学过了一遍):以t_student为例。

查询操作(稍微复杂了一些):select 字段 from 表名 where 条件(可以用like ‘%%’匹配)

                      select stuno,stuname from t_student where stusex = '男'; 

更新操作:update 表 set 字段 = 新值 where <条件子句>

                      update t_student set stusex = ‘女’ where stuno = '001';

添加操作:insert into 表(字段列表) values (对应的具体的记录)

                      insert into t_student(stuno,stuname,stusex)  values('006','dada','男');

删除操作:delete from 表名 where 条件

                     delete from t_student where stuno='005';

注意区分一些细节的地方。

通配符的使用,其实就是PreparedStatement的使用:

基本上都使用在添加操作:

更换前面第三步的方法:PreparedStatement ps = con.PreparedStatement(sql语句);

ps.setString(1,stuno);    //设置第一个问号的值。

事务的介绍:

三步走:1.使用setAutoCommit(boolean b)方法关闭自动提交模式

2.用commit()方法处理事务

3.用rollback()方法处理事务失败。

应用举例:书本P111。处理登录事件。

代码分析:

第一个误区:

。一直报错没有找到驱动程序,但是,后面我使用以前成功的例子发现是可以运行的。那就是驱动程序无误。可能错误在连接那里,或者我没有保存,也有可能是格式问题(都是我的猜想。)最后我通过复制粘贴了这两句并保存,结果就没有出现问题。

Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(

第二、三个误区:

//误区:以为只能使用while才能提取信息。其实使用if语句也可以遍历获得那些数据。
            if (!rs.next())
                out.print("不存在账号");
            else {
                String paswd = rs.getString("password");
                //误区:不能使用paswd==password ,字符串相等这里的方法注意一下,不能用==。
                if (paswd.equals(password))
                    out.print("登录成功");
                else
                    out.print("登录失败");
            }

第三个误区:

一开始,我的尝试是想把登录成功的代码全部都写进login界面,放入JavaScript程序段里面,但是出现问题。可能是可以的,但是,我没想出来。所以最后还是用了两个界面来完成这个问题。

第六章:JSP内置对象

内置对象是指在JSP页面中内置的不需要定义就可以在网页中直接使用的对象。

这本书只介绍九种内置对象。

JSP中一共预先定义了9个内置对象,分别为:**request**、**response**、**session**、**application**、**out**、**pagecontext**、**config**、**page** 和 **exception**。这些对象在客户端和服务器端交互的过程中分别完成不同的功能。

- **request对象**: 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据
- **response对象**: response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
- **session对象**: session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。
- **application对象**: application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。
- **out对象**: out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
- **pageContext对象**: pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象
- **config对象**: config 对象的主要作用是取得服务器的配置信息。
- **page对象**: page 对象代表JSP本身,只有在JSP页面内才是合法的。
- **exception对象**: exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。

1.out对象:out.print()

2.request对象:request.getParameter()

HTTP Status 的错误:

404     //Not Found ,无法找到指定位置的资源

500     //Internal Server Error ,服务器遇到无法预料的情况,不能完成客户的请求。

3.response对象:重定向

response.sendRedirect(目标页面路径,可以是外部网站这种);

对比于JSP动作指令:<jsp::forward page="只能是同一Web应用程序内部的资源" > </jsp:forward>

4.Cookie操作:

页面传指的方式前面介绍了:URL传指、隐藏表单。现在加一个Cookie操作。因为URL传指会被看见数据。Cookie和表单一样,也可以解决这个问题。但是实质还是不够安全。

代码分析:

//误区:原来验证账号可以在sql的判断语句进行,这样就减少了大量的代码量!
            String sql = "select * from login where account='"+account+" ' ";

//误区:rs.next()必不能少,这个是游标的关键,哪怕只有一行,也不能少这个。
            if (rs.next()) {

5.session对象(单独做一个段)

常用session对象开发购物车。

它对应的类(接口)是javax.servlet.http.HttpSession

API接口类型:

添加方法:session.setAttribute(String name,Object obj);

读取方法:session.getAttribute(String name);

移除方法:session.removeAttribute(String name);

全部清除方法:session.invalidate();

应用举例:添加购物车,两个或者一个页面,实现添加商品,删除商品。书本P137第一题。

代码分析:

第一个问题:表单的问题,一开始我的想法是新建一个数据库,用数据库里的内容来显示,但现在的只是储备量有点低,到后面就有点复杂,就放弃了。然后下面这种html的基础请记一下。

原先尝试的:这里的booname、price是通过数据库连接获得的。

 标准答案:

<table>
            <tr>
            <th>历史图书</th>
            <th>图书价格</th>
            </tr>
            <tr>
            <td>近代史</td>
            <td>价格23元</td>
            <td><a href="buy.jsp?a=近代史 价格23元">购买</a></td>
            <td><a href="del.jsp?a=近代史 价格23元">删除</a></td>
            </tr>

第二个问题:

  //这个很重要,每一次都需要用它检测是否获取到books的数据
      ArrayList<String> books = (ArrayList<String>)session.getAttribute("books");

第三个问题:(三个点)

//误区:每一次跳转到这个jsp内,都会调用一次这个方法。所以必须把这个初始化创建空间放在一个条件里。
      if(books == null){
         //误区:初始化books不能放在这里面,因为外面的条件也用到了books.那么就需要一个得到它。
          books = new ArrayList<String>();
         session.setAttribute("books",books);
      }else{
         //误区:我也不知道为什么要使用iso-8859-1。在前面表单里面明明说的是gb2312才是中文支持的。
         book = new String(book.getBytes("iso-8859-1"));
         books.add(book);
      }

第四个问题:

 //误区,以为获得books是String的方式,注意了,它是一个ArrayList类型
      ArrayList<String> books = (ArrayList<String>)session.getAttribute("books");

第五个问题:

String book = request.getParameter("a");
       //误区:请记住这种用法,转换为中文形式
       book = new String(book.getBytes("ISO-8859-1"));

//误区:注意后面括号的是一个字符串,需要加双引号,否则会报错。
       ArrayList<String> books = (ArrayList<String>)session.getAttribute("books");

第六个问题:

 //误区:注意删除指定的书本,可以加个if语句去判断。这个方法记一下。(要注意它们的编码方式要相同才会得到相等噢)
            if(book.equals(a)){
            //误区:一是没有加break,那么它会一直循环直到结束。二是删除,只删掉了books里的集合,但是session里面的并没有删除。
              books.remove(i);
              session.setAttribute("books",books);
              out.print("已经删除此本书");
              flag=true;
              break;
            }
            //误区:因为是在一个循环里面,如果你加了这个语句,那么它只会从头开始顺序删除,就无法进行遍历。所以不能使用else。
            //else{
              //out.print("购物车里没有这本书,无法进行删除操作");

6.application对象(单独做一个段)

跳过,书本P134.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值