《Java web应用》板书

20200303

一、基础知识介绍

  Web应用程序:就是在浏览器里运行的程序,网站也可认为是一个小型web应用程序。

  软件架构:

    B/S(Browser/Server)模式:浏览器/服务器模式,web应用程序就属于B/S模式。

    C/S(Client/Server)模式:客户机/服务器模式,比如:QQ。

二、搭建Java web的开发环境

  1、安装JDK,JDK就是JAVA的开发工具包。

  2、安装Tomcat,web服务器软件,主要用于网站的发布。PHP的常用的web服务器软件是Apache,微软的web服务器软件是IIS。

  3、安装eclipse,集成开发环境(IDE)。

  4、在eclipse中新建web项目

    操作:"File"->"New"->"Dynamic web project"

    项目的结构介绍:

      Java Resource:放java程序的目录,其中src里存放自己写的java程序

      build:主要放java程序编译后class文件。

      WebContent:站点根目录,主要存放前端的资源和jsp文件。

   5、新建一个jsp页面

     jsp页面的组成:html代码和java程序片组成。

     在jsp页面嵌入java代码的三种方式:

      Java程序片:<%  %>

      Java表达式:<%=  %>

      Java成员变量:<%!   %>

        java成员变量的生命周期为Tomcat的运行周期,就像Java类的静态变量一样,可被多个该类的对象所共享。

 三、jsp页面常见的内置对象

  out,request,response,cookie,session,application

  所谓内置对象就是直接在页面中使用,不需要通过类来创建的对象。

  1、out

    out对象主要向浏览器输出内容,它的主要方法是print(),println(),write()

  2、request

    请求对象,主要用来封装客户端的请求,包括客户端的操作系统、浏览器、URL和发送数据。

    常用的方法:

      request.setCharacterEncoding("UTF-8")  //设置请求对象的字符编码,防止中文乱码

      request.getParameter("参数名")  //获得请求里的某个参数的值

      request.getParameterValues("参数名")  //获得某个参数的多个值,返回的是一个字符串数组。 

    前端知识补充:

    表单的中常用的控件

      表单:<form method="请求方式" action="处理请求的服务器端地址">

        请求方式:

          GET:发送的数据是附在URL后面,在地址栏输入地址或点链接都是GET请求。

          POST:通常表单提交的请求最好是POST

      文本框:<input type="text"  >

        id:给浏览器用的,name:是给服务器的

      密码框:<input type="password"  >

      提交按钮:<input type="submit" >

      重置按纽:<input type="reset" >

      单选按纽:<input type="radio">

      复选框:<input type="checkbox">

      下拉列表:

        <select name="...">

          <option value="值1">值1</option>

          ...

        </select>

    3、response

      响应对象,是由服务器对用户请求作出的响应。

      常用方法:

        response.sendRedirect("地址")  //重定向到某个页面

          例:response.redirect("login.jsp");  //跳转到login.jsp页面

        response.setHeader("页面文件头的属性名","页面文件头的属性值")  

          例:response.setHeader("refresh","3;url=loginSuccess.jsp");  //3秒后跳转login.jsp页面

        response.setContentType("响应内容打开的应用程序类型");

          例:response.setContentType("application/msword");  //用本地的word打开响应内容

    4、Session

      会话,是指客户端与服务器的一次会话,它的生命周期从用户访问网站开始直到离开网站。服务器为每一个访问用户创建session对象,每个用户的session对象互不相同。 

      常用方法:

        session.setAttribute("键名",键值)  //键值的类型是Object类型

        session.getAttribute("键名")  //获得session对象里面指定键名的键值,该方法返回类型为Object

        session.removeAttribute("键名")  ///从session对象里移除指定的元素

        session.invalidate()  //让session失效,一般在用户退出的时候使用 

        session的生存期限取决于下面几个因素:

        1)用户是否关闭浏览器  2)是否调用了invalidate()方法  3)是否达到最长的"发呆"时间

    5、application

      应用程序对象,web服务器启动后就会产生application对象,直到web服务器关闭,在此期间application对象可被所有的用户所共享。

      常用方法:

        application.setAttribute("键名",键值)

        application.getAttribute("键名")

        application.removeAttribute("键名")

      application和session的区别:

        session跨页面共享数据,但每个用户的session数据各不相同,属于用户级的。

        application跨页面、跨用户共享数据,属于应用程序级的。

    6、Cookie类

       //强调一下,cookie不是jsp内置对象,只是它是web常用的技术,所以也放在这一块写了。

      cookie是在客户端保存一些文本信息,例如在保存用户的用户名和密码,以便下次访问这个网站时,直接从本地硬盘读取相应的信息,封装在请求对象里,服务器可从请求对象里获得cookie信息。

      常用操作:

        (1)创建一个Cookie对象

          Cookie  c1=new Cookie("键名","键值");  //只能存储文本型数据

        (2)获取cookie对象的键和值

          cookie对象.getName()  //获得 cookie对象的键名

          cookie对象.getValue()  //获得cookie对象的键值

        (3)获取某个cookie对象

          请求对象里有多个cookie对象,如何来获得指定的cookie对象?

          //比如找键名为"username"的Cookie对象的值。     

String userNameValue="";
Cookie[] cookies=request.getCookies();//获取请求对象里的所有Cookie对象
for(Cookie c:cookies){
    if(c.getName().equals("username")){
        userNameValue=c.getValue();
        break;
    }
}
//userNameValue就是键名为username的Cookie对象的值

四、JavaBean

  Java类的一个实例,通常是实体类的一个对象,实体类一般是专门用来存储数据的,一般要用公开的getter()和setter()方法。一般对应数据库中的一张表。业务类一般用来处理业务逻辑的。

  1、JSP的动作标记

  (1)usebean

    格式:<jsp:usebean id="bean的名字" class="bean的类名" scope="范围" ></jsp:usebean>

    功能:如果在指定的范围(隐含对象:request,session,application)内,没有对象,JSP就会创建一个bean,如果有的话,就取这个对象。

  (2)getProperty

    格式:<jsp:getProperty name="bean的名字" property="属性名" />

     功能:取bean的属性

  (3)setProperty

    格式:<jsp:setProperty name="bean的名字" property="属性名" value="属性值" />

  练习一:

  1、新建一个产品类Product(实体类)

  2、新建一个产品服务类ProductService(业务类)

    添加一个方法getProducts(),获得所有产品

  3、新建jsp页面ProductList.jsp,呈现所有产品。

   练习二:利用session技术实现添加产品功能

  1、设计一个添加产品的表单ProductForm.jsp

  2、接收并处理输入的产品数据的页面AddProduct.jsp

  3、修改并完善数据展示页面ProductList.jsp

  JSP的指令标记

  <%@ page import ...%>  //页面指令

  <%@ taglib prefix="c" ...%>  //jstl标签库指令

  <%@ include file="" %>  //包含指令

五、 Servlet

  概念:它就是Java程序,设计目的是开发动态web资源。

  sevrlet是接口,HttpServlet实现Servlet接口的类,我们写的Servlet程序是继承HttpServlet,需要重写两个方法,一个doGet();另一个doPost();

创建Servlet程序

  helloWorld(camel命名法)

  HelloWorld(pascal命名法)

  ASP

  JSP(Java Server Page)

Servlet最常用的是作控制器(Controller),接收请求,调用业务类的方法处理数据,发送数据到视图(JSP)。

  MVC

  M:Modal(模型)

  V:View(视图)

  C:Controller(控制器),Servelt

六、EL和JSTL

  EL(表达式语言)

  可以在jsp页面直接使用隐含对象(pageContext,request,session,application)

  格式:${表达式}

  例如:${product.name}

  JSTL:JSP  Standard Tag Libray(JSP标准标签库)

  html标签:<div>

  jsp标签:<jsp useBean...>

  jstl标签:<c:forEach ...>

  使用jstl

   (1)下载jstl的jar包,复制到WEB-INFO目录下。

   (2)在使用jstl的jsp页面中,加入指令标记引入核心库,

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    引用jstl的目的是为了团队协作开发,前后端分离。

  0407练习一:

  设计一个添加产品表单,表单数据提交给Servlet程序处理后,将数据发送给jsp页面并显示。

  1.设计一个添加产品的表单ProductForm.html

  2.新建一个Servlet程序AddProductServlet1.java

  3.新建视图ProductView.jsp页面展示Servlet传过来的数据

七、Java访问MySQL数据库 

  MySQL适合中小型项目,Oracle适合中大型应用程序。

  Java使用mysql

  (1)下载mysql的驱动

  (2)访问mysql数据库

(一)使用MySQL CLI访问mysql数据库

  c:/>mysql -u <用户名> -p<密码>

  常见的命令:
  mysql>show databases;   //显示所有的数据库

  mysql>use <数据库>  //使用数据库

  mysql>show tables;  //显示当前库下的所有表

  mysql>desc <表名>  //查看表结构

   

  mysql>create database  <数据库名>  //创建数据库

  mysql>create  table  <表名>(<列的定义>,...)

  

  例:

  create table product(
    id int auto_increment primary key,  //auto_increment是自动编号

    name varchar(255),  //产品名称

    price  float,  //产品价格

    image varchar(255)  //产品图片

    );

(二)Java连接MySQL

  1、java连接MySQL8.x数据库

  驱动下载: mysql-connector-java-8.0.16.jar

//1.加载mysql数据连接驱动
Class.forName("com.mysql.cj.jdbc.Driver");    //8.0

//2.连接数据库            
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop?useSSL=false&serverTimezone=UTC", "root", "root");
//说明:8.0一定要带上参数serverTimezone=UTC

  2、Java连接MySQL5.x数据库

  驱动下载:mysql-connector-java-5.1.39-bin.jar

//1.加载mysql数据库的驱动
Class.forName("com.mysql.jdbc.Driver");

//2.连接数据库
Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");

  3、Java连接MySQL8.0数据库,但驱动是5.x

  驱动下载:mysql-connector-java-5.1.39-bin.jar

  (1)修改mysql8.0的加密规则

  进入windows命令行窗口,在dos提示符下输入:mysql -u root -proot

  出现mysql命令提示符"mysql>",再输入以下命令:

mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;   -- 密码永不过期
mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';  --改成5.x加密规则
mysql>FLUSH PRIVILEGES;  --刷新权限
mysql>alter user 'root'@'localhost' identified by 'root';  --最终修改root用户的密码

  说明:

    8.x和5.x的区别是加密规则不同:

    5.X版本是:default_authentication_plugin=mysql_native_password

    8.x版本就是:default_authentication_plugin=caching_sha2_password

   (2)Java连接MySQL的主要代码

//1.加载mysql数据库的驱动
Class.forName("com.mysql.jdbc.Driver");

//2.连接数据库
Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/eshop","root","root");

   

  Java读取MySQL数据库中的数据的步骤:

  1、建立数据库连接Connection

  2、通过Connection对象创建语句对象Statement

  3、由Statement对象执行查询,获得结果集ResultSet

  4、对结果集进行遍历。

  

  Java对数据库进行写入操作步骤:

  1、建立数据库连接Connection

  2、通过Connection对象创建语句对象Statement或预编译的语句对象PrepareStatement

  3、执行语句对象Statement或预编译的语句对象PrepareStatement

  

  练习一:访问NBA所有的球队

  1、建立球队的数据模型(实体类)Team

  2、建立业务逻辑类TeamService

  3、建立控制转发的Servlet类GetTeamsServlet

  4、建立视图TeamList.jsp

  study数据库在腾讯云上的连接信息:

    数据库地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study

    用户名:student

    密码:student

  

  练习二:访问NBA所有的球员

  1、建立球员的数据模型(实体类)Player

  2、建立业务逻辑类PlayerService

  3、建立控制转发的Servlet类GetPlayersServlet

  4、建立视图PlayerList.jsp

  study数据库在腾讯云上的连接信息:

    数据库地址:jdbc:mysql://sh-cdb-qego3b2a.sql.tencentcdb.com:61551/study

    用户名:student

    密码:student

  

原文地址:https://www.cnblogs.com/beast-king/p/12401251.html