JavaWeb期末总结

时间:2024.3.31

                第一章   Web开发基础知识(简单描述)

   表单()

 表单元素

<FORM method ="[GET|POST] action ="URL">form body</FORM>

             <FORM>元素括起整个表单,并给出一些基本定义。表单仅占用HTML文档的部分空间;实际上,一个HTML文档可以包含几个独立的、完成不同功能的表单。method指定了信息传递给HTTP服务器的方法;action给出与处理提交信息的脚本相关的URL(如“registinfor.asp”,“registinfor.jsp”)。

 表单输入元素

       <INPUT name="text" type="string" size=## value="text" CHECKED>

¨  <INPUT >用来把不同的字段放在表单里,以便用户输入信息。

¨  name属性指定该字段在某个表单中的唯一名称;

¨  可选的value属性给出该标记的默认值。

¨  在提交表单时,向Web服务器呈上以一组用“?”开头并用“&”号分开的一组“名字=值”形式的信息,如http://…/Scriptname?name=me&address=here&time=now

¨  type属性给出所使用<INPUT>标记的样式,“string”可以是:

¨  CHECKBOX(复选框)。

¨  RADIO(单选按钮)

¨  TEXT(单行的文本输入栏)。

¨  IMAGE(图像放在表单里)

¨  SUBMIT(提交按钮)

¨  RESET(清除按钮)

¨  HIDDEN(在表单中保留不供显示的内容)

¨  FILE(上传文件)

            第二章   Servlet开发

  1.什么Servlet

   Servlet是用Java语言编写的运行在服务器端的小应用程序,能够接收Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP(HyperText Transfer Protocol)协议进行工作的。(可以认为Servlet是服务器端的一个动态Java程序,用户通过访问这个程序获取服务器的服务。)

2. Servlet的主要方法

 Servlet是一个Java类,通常会有3类方法,分别是:

init方法,用于初始化。

destroy方法,用于释放资源。

service方法,服务类方法,对用户的请求进行处理,并对用户进行响应,几乎所有处理功能都在这里完成。这类方法可以有多个,最常用的是doGet和doPost方法。

3. Servlet运行原理(生命周期)

n    装载Servlet:这项操作一般是动态执行。有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet,并能够初始化特定的Servlet:

n    创建过程:创建一个Servlet实例 ;

n    初始化过程:调用Servlet的init()方法 ;

n    响应服务:如果容器接收到对此Servlet的请求,那么它调用Servlet的service()方法 ;

n    销毁释放资源:实例被销毁,通过调用Servlet的destroy()方法销毁Servlet 。

2.3 Servlet运行原理

n 1.Servlet的工作过程如下

     ① Servlet容器接收到客户端的请求时,先判断用户所请求的Servlet对象是否存在。如果不存在,则加载Servlet类、创建Servlet对象并实例化,然后调用init方法进行初始化。② 容器创建request和response对象,并且创建一个线程,调用Servlet对象的service方法(间接调用doGet方法或者doPost方法)。

     ③ service方法产生响应,容器将响应发回客户端。

     ④ 容器销毁reqeust和response对象以及相应的线程。

n 注意:

¨  加载Servlet类、创建对象、调用初始化方法init和销毁方法destroy都只有一次。

¨  当Web应用被卸载或者服务器被关闭的时候,系统卸载Servlet,调用destroy方法释放资源。

n 2.Servlet的加载有两种方式:

¨  第一次请求的时候加载。

¨  服务器启动的时候加载。

2.4开发Servlet基本流程  

  开发一个Servlet程序基本包括以下几步:

(1)编写Servlet

1、引入用到的包,需要的导入的包有:javax.servlet.*,javax.servlet.http.*等

2、定义类的基本框架并继承HttpServlet

3、重写成员方法。如果需要对Servlet进行初始化,需要重写init方法。如果需要在卸载Servlet的时候执行一些功能,可以重写destory方法。一般情况下,根据需要完成的功能只需要重写服务类方法即可。服务类方法包括doGet方法和doPost方法等。

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

public void init() throws ServletException {           

        }

//Process the HTTP Get request

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws    ServletException, IOException {

     

      }

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {

        }

}

Servlet中获取参数:隐含对象Request

String request.getParamter(参数名称);

例子:

String userName=“”;

userName=request.getParameter(“username”);

System.out.println(“userName”+userName);

下面是一个具体事例:

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

       public HelloServlet() {

              super();

       }

       public void destroy() {

              super.destroy();

       }

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

       request.setCharacterEncoding("UTF-8");

              response.setContentType("text/html;charset=UTF-8");

              String name=request.getParameter("name");

              PrintWriter out = response.getWriter();

              if(name!=null){

                     out.write("Hello"+name+"!");}

              out.flush();

              out.close();

       }

       public void init() throws ServletException {

              // Put your code here

       }

}

Servletweb.xml(配置文件)

每个Servlet在web.xml中都对应一对<servlet>标签和一对<servlet-mapping>标签。其中:

<servlet>标签用于声明Servlet。其中的子标签又包括:

<servlet-name>用于声明Servlet的名字,是web.xml中内部使用的名字。

<servlet-class>标签:用于声明Servlet所对应的类名。

<servlet-mapping>标签用于进行Servlet映射。其中的子标签又包括:

<servlet-name>标签:表示Servlet的名字,需要和上面<servlet>标签的<servlet-name>子标签中声明的名字保持一致。

<url-pattern>标签:用于配置Servlet的访问地址。

<servlet>

    <servlet-name>HelloServlet</servlet-name>

    <servlet-class>HelloServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>HelloServlet</servlet-name>

    <url-pattern>/servlet/HelloServlet</url-pattern>

  </servlet-mapping>

(4)部署Servlet

n    Servlet编写完成之后,需要部署到服务器才能访问,编译好的文件需要放在Web应用的WEB-INF\classes下面。

n    利用MyEclipse创建的Servlet,成功编译后其.class文件已自动放置到WEB-INF\classes目录下。

第四章   JSP基础语法

3.1 JSP的基本概念

 1、什么是J S P:

Java Server Page

Java的动态网页技术,是Java Web应用开发的界面技术;

JSP是在Servlet技术基础上,为了方便页面开发的简化设计,是将Java逻辑与界面设计分开,开发更方便;

HTML中嵌入Java脚本: HTML语法的 java 扩展,加入新的标签(<%, %>,…);

2、 J S P的特点:

从技术上改进了Servlet技术,Servlet是Java代码和HTML静态代码的混合代码;而JSP是将Java代码嵌入到HTML静态代码中,直观编写简单;

JSP不需要编译(实际上是由服务器自动监测JSP文件的变化,由服务器将其翻译成Java代码后然后再进行编译并再第一次请求时创建一个Servlet实例。正因为如此,第一次访问JSP页面时会后延迟);

JSP以静态代码为主,Java代码为辅 ;功能由强大的Java语言和J2EE平台提供支持

JSP示例(Hello.jsp)

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page import="java.util.*"%>

<HTML>

  <BODY>

  <%

  for ( int i=0; i<2; i++ )

  {

  %>

     你好<br>

  <% 

  }

  %>

  </BODY>

</HTML>

JSP执行过程(复习)

  

3.2 JSP语法

语法概述

¨   JSP原始代码中包含了JSP元素和Template(模板) data两类

¨   Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等,这些数据会直接传送到客户端的浏览器

¨   JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。

jsp例子(hi.jsp)

<html>
<head>
<title>Hi-JSP
实验</title>
</head>
<body> 
<%
String Msg = "This is JSP test."; 
out.print("Hello World!");
%>
<h2><%=Msg%></h2>
</body>
</html>

JSP语法分为三种不同的类型

   编译器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>

   脚本语法(SCRIPTING)

动作语法(ACTION) 例如: <jsp:forward><jsp:getProperty><jsp:include>

1.脚本语法

    脚本语法包括

¨  “HTML注释”:<!— comments -->

   <!-- comment [ <%= expression %> ] -->

<!-- 注释 [<%= 表达式 %> ] -->

这种注释发送到客户端,但不直接显示,在源代码中可以查看到。

¨  隐藏注释”:<%-- comments --%>

  <%-- 注释 --%>

 不发送到客户端。

¨  声明

      <%! declaration; [ declaration; ] ... %>

<%! 声明; [声明; ] ... %>

¨  表达式”  

于在页面上输出信息,语法格式如下:

<%= expression %>

<%= 表达式 %>   

¨  脚本段

    <% code fragment %>

<% 代码 %>

2. 编译器指令

编译器指令包括“包含指令”, “页指令”和“taglib指令”

它们包含在“<%@  %>”卷标里。

两个主要的指令是pageinclude

   include指令:向当前页中插入一个静态文件的内容。

  静态文件是指文件名称不能是变量,并且不能改变

JSP 语法格式如下:

  <%@ include file="relativeURL" %>

 Page”指令用于定义JSP文件中的全局属性。

属性:

1language="java"

声明脚本语言的种类,目前只能用"java"

2.import="{package.class | package.* },..."

  需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。

“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如<jsp:include>

可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Languageimport语句引入得是Java语言中的类),所以此属性就能多用几次。

无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。

3.errorPage="relativeURL"

设置处理异常事件的JSP文件。 

4.isErrorPage="true | false"

 设置此页是否为出错页,如果被设置为true,你就能使用exception对象

3. 动作语法(了解)

动作语法包括

<jsp:forward>

<jsp:include>

<jsp:plugin>

<jsp:getProperty>

<jsp:setProperty>

<jsp:useBean>

3.3  JSP内置对象

JSP 有以下九种内置对象,包括:(主要是四个)

 ·request,请求对象

·response,响应对象

n  ·pageContext,页面上下文对象

·session,会话对象

n  ·application,应用程序对象

·out,输出对象

n  ·config,配置对象

n  ·page,页面对象

·exception,例外对象

   获取参数对象:

n    “request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues(数组,循环使用),通过调用这几个方法来获取请求对象中所包含的参数的值(getAttribute、setAttribute获取数据传递到JSP)

n    “response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。

request对象示例

<html><body>

  <form action="./Hello_req.jsp">

    姓名<input type="text" name="UserName">

   <input type="submit"  value="提交">

  </form>

</body></html>

Hello_req.jsp

 <%@ page contentType="text/html;gb2312" %>

<%@ page import="java.util.*" %>

<HTML>

  <BODY>

    你好,

  <%! String Name;%> 

  <%

    Name=request.getParameter("UserName");

  %>

  <%=Name%>,

  今天是

  <%

    Date today=new Date();

  %>

    <%=today.getDate()%>号,星期<%=today.getDay()%>

  </BODY>

</HTML>

session对象

session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId getValue getValueNamesputValue等。(登录验证)

概要

¨  HTTP是无状态(stateless)协议;

¨  Web Server 对每一个客户端请求都没有历史记忆;

¨  Session用来保存客户端状态信息;

¨  由Web Server 写入;

¨  存于客户端;

¨  客户端的每次访问都把上次的session记录传递给Web Server;

¨  Web Server读取客户端提交的session来获取客户端的状态信息;

session对象示例(Logon_session.html)

<html><body>

  <form action="./Logon_session.jsp">

    姓名<input type="text" name="UserName">

    <input type="submit"  value="提交">

  </form>

</body></html>

<%@page contentType="text/html;gb2312" %>

<%@page import="java.util.*" %>

<HTML>

  <BODY>

  <%

    String Name=request.getParameter("UserName");

    session.setAttribute("LogName", Name);

  %>

  你的名字"<%=Name%>"已经写入session

  <br>

  <a href='./check_session.jsp'>check</a>

  </BODY>

</HTML>

<%@page contentType="text/html;gb2312" %>

<HTML><BODY>

  <%

    String yourName=(String)session.getAttribute("LogName");

    if (yourName= =null)

    {

    %>您还未登录

    <%

    }else

    {

    %>

    "<%=yourName%>"已经登录

    <%

    }

  %>

</BODY></HTML>

Request Session的作用域区别:一次请求(request   多次请求(session

session对象示例

<%@ page contentType="text/html;charset=gb2312"%>

<html>

<head><title>session</title></head>

<body>

<form method="post" action="post.jsp">

请输入您的姓名:

<input type="text" name="username">

<input type="submit" value="submit">

</form >

</body>

</html>

<%@ page contentType="text/html;charset=gb2312"%>

<html>

<head><title>post.jsp</title></head>

<body>

<%@ page language="java" %>

 <%! String name=""; %>

<p>

<% 

       name = request.getParameter("username");

       //将username存入session

       session.setAttribute("username", name); 

%>

您的姓名是:<%=name%>

<p><form method="post" action="post11.jsp">

您最喜欢的娱乐是: 

<input type="text" name="amuse">

<input type="submit" value="submit"> </p>

</form>

</body>

</html>

<%@ page contentType="text/html;charset=gb2312"%>

<html>

       <head><title>post1.jsp</title></head>

<body>

<%@ page language="java"%>

<%! String amuse=""; %>

<%

       amuse=request.getParameter("amuse");

       String user=(String)session.getAttribute("username");

%>

您的姓名是: <%=user%>

您喜欢的娱乐是: <%=amuse%>

</body>

</html>

Out

“out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

3.5  JSP与表单编程

n  客户端同Web服务器之间的协议为http

n  HTTP为超文本传输协议

n  HTPP协议为“请求和响应”协议

n  客户端请求包括:请求行、头、信息体

n  客户端请求的方法

¨  GET、POST、HEAD

n  提交表单的方法: GET、POST

n  服务器接收到请求后,返回HTTP响应

n  每个响应:状态行、头、信息体

n  常见状态

¨  404  所请求的文件不存在

¨  500  服务器程序出错

¨  200 OK  成功

n  信息体用于浏览器显示

HTML表单标记:

n   表单主标记

¨  <form> </form>

n  表单中的标记

¨  <input>

¨  <select> </select>

¨  <option>

¨  <textarea> </textarea>

n  <form>是表单开始标记,</form>结束

n  <%--表单例子,peixun2.15.jsp文件代码--%>

n  <%@ page contentType="text/html;charset=gb2312"%>

n  <html>

n     <head><title>表单</title><head>

n  <body>

n  <form method="POST" action="">

n   <p align="center">用户登录

n  <p align="center">

n  用户名:<input type="text" name="User" size="20">&nbsp;&nbsp;&nbsp;&nbsp;  

n  密码:<input type="password" name="pwd" size="20"><br> <br>

n  </form>

n  </body>

n  </html>

form标记

n    描述表单的特性,语法

<form method="POST" action="“  enctype=“”>

n  method表单传输方法

¨  GET方法将表单信息在URL后传输

¨  POST方法将表单信息作为信息体传输

n  action为表单处理方式,通常为一个URL

n  enctype为编码方式

<input>标记

n    表单中输入信息的区域

n  属性

¨  type   类型

¨  name  名称

¨  id   标识

¨  maxlength  最大字符数

¨  size  输入域宽度

¨  value  域的初始值

¨  button   按钮   用javascript响应

<input>的类型

n    text  文本

n  passwowrd  口令方式

n  checkbox  多选框   name相同(获取参数循环实现)

n  radio  单选按钮    name相同

n  image  图片

n  hidden  隐藏表单  发送数据

n  submit  提交按钮  向服务器提交表单

n  reset  复位按钮  将表单充置为初始状态

n  多行文本域:<textarea>  </textarea>

n  参数

n  COLS:宽度

n  ROWS:高度

n  NAME:名称

<textarea NAME=“Computer” ROWS=6  COLS=64>

       CPU  PIV 1500

       Memory 512M

 </textarea>

下拉框:SELECT

n  定义列表框:<select>  </select>

n  参数

¨  MULTIPLE  可同时选取多行

¨  NAME  名称

¨  SIZE  可见项目数

n  每个项目用option标记

n  属性SELECTED出现在option表示选中

<select  name="area" style="width"50"  size="1">

   <option value="北京"  selected > 北京 </option>

   <option value="天津" > 天津 </option>

   <option value="上海" > 上海 </option>

   <option value="重庆" > 重庆 </option>

</select>

表单提交

n  提交方式:

¨  submit类型按钮提交表单

¨  通过普通按钮的javascript函数

n  传输方法依据<form>中的method

¨  推荐使用POST

n  传输编码依据<form>中的enctype

n  处理方式依据<form>中的action

 <input type="submit" value=" 提交">

<%--表单综合例子,peixun2.16.jsp文件代码--%>

<%@ page contentType="text/html;charset=gb2312"%>

<html>

       <head><title>表单</title><head>

<body>

<form method="POST" action="">

 <p align="center">用户注册

<p align="center">

用户名:<input type="text" name="User" size="20">&nbsp;&nbsp;&nbsp;&nbsp;  

密码:<input type="password" name="pwd" size="20"><br> <br>

<p>你喜欢:

<input type="checkbox" name="sports" value=football> 足球

<input type="checkbox" name="sports" value=bastketball> 篮球

&nbsp;&nbsp;&nbsp;&nbsp;

性别:

<input type="radio" name="sexy" value=male> 男

<input type="radio" name="sexy" value=female> 女 <br><br>

<p>你的计算机</p>

<textarea NAME=“Computer” ROWS=6  COLS=64>

       CPU  PIV 1500

       Memory 512M

 </textarea><br><br>

<p>你计算机的操作系统

<input type="image" name="os" src="images\TURBOLINUX6.GIF">

&nbsp;&nbsp;&nbsp;&nbsp;

你所在地:

<select  name="area" style="width"50"  size="1">

       <option value="北京"  selected > 北京 </option>

       <option value="天津" > 天津 </option>

       <option value="上海" > 上海 </option>

       <option value="重庆" > 重庆 </option>

</select>

<br> <br>

 <input type="submit" value=" 提交">  

 <input type="reset" value="全部重写"></p>  

</form>

</body>

JSP中的汉字编码问题

n    表单处理涉及到客户端和服务器的完整交互过程

n  在客户端和服务器是gb2312,传输用ISO8859_1

n  在服务器端接收到客户端数据时需要转换为gb2312后进行处理,方法

name=new String(name.getBytes("ISO8859_1"), "gb2312");

n  服务器端指示客户端汉字的显示编码

<%@ page contentType="text/html;charset=gb2312"%>

举例:

<%--hanziAction.jsp--%>

<%@page contentType="text/html;

charset=gb2312"%>

<html>

<head>

<title>表单中汉字的处理</title>

</head>

<body>

<%

String name=request.getParameter("name");

name=new String(name.getBytes("ISO8859_1"),

 "gb2312");

     out.println("用户名:" +name+"<br>");

%>

</body>

</html>

使用JDBC编程

1.JDBC基本概念

n     什么是JDBC

¨  JDBC:Java Database Connectivity

¨  一个独立于DBMS的接口,一个通用的SQL数据库存取框架,在各种各样的提供数据库连接模块上提供统一的接口。这使程序员可以面对单一的数据库界面,使数据库无关的Java工具和产品成为可能,使得数据库连接的开发者可以提供各种各样的连接方案

¨  各种数据库系统软件提供相应的驱动程序

¨  Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等等操作。

2. JDBC 编程结构(5个类掌握概念)

n     Driver类:用来与数据库通信的软件.

n  DriverManager类:是JDBC基础,用来管理和卸载JDBC驱动程序.该类有一个getConnection()方法,用于验证JDBC数据源,并返回Connection对象.

n  Connection类:该类的CreateStatement()方法连接JDBC数据源,返回Statement对象.

n  Statement类:将SQL行为封装起来交给数据库引擎,调用该类的execute()等方法,执行SQL语句,返回resultSet对象.

n  ResultSet类:封装了一个由SQL查询返回的结果.该类的getString(),getInt()等方法获得一栏数据的存取,next()方法到下一行.

//连接数据库

Connection con=null;

Statement stmt=null;

String strURL=  " jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";

try{//数据库操作的异常处理

   con=DriverManager.getConnection(strURL,”sa”,”sa”);

   stmt=con.createStatement();

   //增加

   int result=stmt.executeUpdate(“insert into stu(no,name) value(100,’张三’) ”);

   //修改

   result=stmt.executeUpdate(“update stu set name=‘李四’ where no=100”);

   //删除

         result=stmt.executeUpdate(“delete stu where no=100”);

}catch(SQLException e){

    e.printStackTrace();

}finally{

   con.close();     

}

n  当使用Statement的executeQuery方法向数据库发送一条Select查询语句之后,返回一个ResultSet的对象,这个对象是查询结果集对象;

n  ResultSet 其实就是一个二维表(行、列),并且具有列标题和对应的值。对象具有指向其当前数据行的指针。通过ResultSet对象不但可以结果集数据,还可以获取结果集表的列名、数据类型等信息;

n  ResultSet res=stmt.executeQuery(sql);

ResultSet类的主要方法:

n  行指针定位方法

n  public   boolean   next();该方法的作用是将数据库游标向前移动一位,使得下一行成为当前行,当刚刚打开记录集对象时,数据库游标的位置在记录集的最前面,第一次使用next()方法,将会使数据库游标定位到记录集的第一行,第二次使用next()方法,将会使数据库游标定位到记录集的第二行,以此类推。  

n  public   boolean   absolute(int   row);该方法的作用是将记录集中的某一行设定为当前行,亦即将数据库游标移动到指定的行,参数row指定了目标行的行号,这是绝对的行号,由记录集的第一行开始计算,不是相对的行号。 

n  public   boolean   previous();该方法的作用是将数据库游标向后移动一位,使得上一行成为当前行。  

n  public   boolean   first();该方法的作用是将当前行定位到数据库记录集的第一行。  

n  public   boolean   last();该方法的作用刚好和first()方法相反,是将当前行定位到数据库记录集的最后一行。  

n  public   boolean   isFirst();该方法的作用是检查当前行是否记录集的第一行,如果是,返回true,否则,返回false。  

n  public   boolean   isLast();该方法的作用是检查当前行是否记录集的最后一行,如果是,返回true,否则,返回false。 

//连接数据库

Connection con=null; Statement stmt=null;ResultSet res=null;

String strURL=  " jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";

try{//数据库操作的异常处理

   con=DriverManager.getConnection(strURL,”sa”,”sa”);

   stmt=con.createStatement();

    String sql=“select id,userName,age from stu”;

    int id=0,age=0;

         String usename=“”;

   //查询Stu表中数据

   res=stmt.executeQuery(sql);

   while(res.next()){

     id=res.getInt(1);

     username=res.getString(“username”);

     age=res.getInt(“age”);

   }

}catch(SQLException e){

    e.printStackTrace();

}finally{

   res.close();

   stmt.close();

   con.close();   

实例:

<%@ page import="java.sql.*" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

<title>测试JSP中表格显示Stu表中数据</title>

</head>

<body>

<%

//连接数据库

Connection con=null;

Statement stmt=null;

ResultSet res=null;

String strURL=  " jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";

try{//数据库操作的异常处理

   con=DriverManager.getConnection(strURL,”sa”,”sa”);

   stmt=con.createStatement();

   String sql=“select id,userName,age from stu”;

 String username=“”;

 res=stmt.executeQuery(sql);

  %>

  <table width=500 border=1>

      <tr>

              <td width=30>学号</td> <td width=50 >学生姓名</td> <td width=30 >年龄</td>

      </tr>

  <%

   while(res.next()){

      out.println(“<tr><td>”+res.getInt(1)+”</td>”):

  %>

      <td><%= username %></td>

      <td><%= res.getInt(“age”);%>岁</td></tr>

<% }

}catch(SQLException e){    e.printStackTrace();

}finally{

   res.close();   stmt.close();   con.close();    

}%>

</table></body></html>

}

第五章JSP/Servlet深入编程

5.1  Servlet过滤器

  什么是Servlet过滤器(过滤器作用和登录验证的流程)

n  一种特定类型的Servlet,能够拦截请求和响应,可以过滤到客户机和服务器之间交换的数据

n  过滤器介于浏览器和需要过滤的JSP、Servlet之间

n  过滤器能够接受请求响应,然后可以检查请求对象的内容,并根据情况将请求转发给下一个组件,或者中止这次请求并返回给浏览器

n  通过过滤器,对请求提交的数据统一进行编码转换,可以一次性编码解决汉字问题

5.1.2 Servlet过滤器用法

n  建立一个实现Filter接口的类,这个类需要实现3个方法:doFilter,init,destroy

n  在doFilter方法中进行过滤操作,这个方法中包含ServletRequest和ServletResponse两个对象

n  调用FilterChain对象中的doFilter方法,进行请求的传递

n  在web.xml配置文件中,对需要过滤的资源进行设置

使用过滤器解决登录验证– LoginFilter登录过滤程序

public class LoginFilter implements Filter {

  private FilterConfig filterConfig = null;

  public void doFilter(ServletRequest servletRequest,

                       ServletResponse servletresponse,

                       FilterChain chain) throws IOException, ServletException {

    try {

      HttpServletRequest request = (HttpServletRequest) servletRequest;

      HttpServletResponse response = (HttpServletResponse) servletresponse;

      HttpSession session = request.getSession();

     request.setCharacterEncoding("GBK");

      String requestpath = request.getServletPath();

      if (requestpath.equals(“/index.jsp”) {//登录页面

         chain.doFilter(request, response);

      }else if (requestpath.equals(“/main.jsp”) ) {//主页面    

        String loginUser = (String) session.getAttribute(“loginUser”);//获取令牌

        if (loginUser==null){//如果没有登录,则进行用户名密码检验

           String loginName=request.getParameter(“loginName”);

           String password=request.getParameter(“password”);

      if (“admin”.equals(loginUser) && “123456”.equals(password)) {

         session.setAttribute("loginUser“,”admin”);

         chain.doFilter(request, response);

      }else{

         RequestDispatcher dispatcher = application.getRequestDispatcher("/index.jsp");

              if (dispatcher != null){

                dispatcher.forward(request, response);

                return;

              }else{ throw new ServletException("无法创建RequestDispatcher"); }

        }

    }else{//其他页面

       String user = (String) session.getAttribute("loginUser");

       if (user == null) {

              RequestDispatcher dispatcher = application.getRequestDispatcher("/index.jsp");

              if (dispatcher != null){

                dispatcher.forward(request, response);

                return;

              }else{throw new ServletException("无法创建RequestDispatcher"); }

      }else chain.doFilter(request, response);

   }

}

   }

public void init(FilterConfig filterConfig) throws ServletException {

    //设置上下文环境对象

    this.filterConfig=filterConfig;

}

5.2  Servlet监听器

一种特定类型的Servlet,用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

监听器作用:

¨  可以监听客户端的请求、服务端的操作等

¨  通过监听器,可以自动激发一些操作,如监听在线用户数量,当增   加一个HttpSession时,给在线人数加1

¨  可以集中代码实现对于同一个事件的处理

5.6 JSP读取CheckBox的值

n  1、显示页面

<form name="form" action="test.jsp">

<br>

你作为一个计算机专业的学生,毕业以后你可能的发展方向:

<input TYPE="checkbox" name=“job" VALUE="1"> 计算机 <BR>

<input TYPE="checkbox" name="job" VALUE="2"> 卖房子 <BR>

<input TYPE="checkbox" name="job" VALUE="3"> 当公务员 <BR>

<input TYPE="checkbox" name="job" VALUE="4"> 考研究生 <BR>

<input TYPE="checkbox" name="job" VALUE="5"> 出国 <BR>

<br>

<input name="aa" type="submit" value="提交" />

</form>

n 2、读取CheckBox数据

<%

String jobs[] =request.getParameterValues(“job");

for(int i=0;i<jobs.length;i++){

   out.println(job[i]);

}

%>

第六章    Java Web开发框架

¨ 1. Model2(体系结构和模式原理)

Model 2体系结构,是一种把JSP与servlets联合使用来实现动态内容服务的方法。它吸取了两种技术各自的突出优点,用JSP生成表达层的内容,让servlets完成深层次的处理任务。在这里,servlets充当控制者的角色,负责管理对请求的处理,创建JSP页需要使用的bean和对象,同时根据用户的动作决定把那个JSP页传给请求者。特别要注意,在JSP页内没有处理逻辑;它仅负责检索原先由servlets创建的对象或beans,从servlet中提取动态内容插入静态模板。在我看来,这是一种有代表性的方法,它清晰地分离了表达和内容,明确了角色的定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model 2体系结构的好处就越大。 

Model2的工作原理

n   Model2实际上就是引入了MVC设计模式,采用Servlet+JavaBean+JSP进行开发;

n  在Model 2中采用Servlet作为控制器(Controller),负责接收客户端Web浏览器发送来的所有请求,并依据处理的不同结果,转发到对应的JSP页面(Viewer)实现在浏览器客户端的显示;

n  通常在Servlet中只包含了控制逻辑和一些简单的处理逻辑,更加复杂的业务处理逻辑则借助特定的JavaBean具体实现,例如:利用JavaBean实现与数据库的连接,对数据库中的数据信息进行维护和修改等 ;

n  Model 2实现了基于组件的开发。在整个软件开发过程中实现了具体清晰的逻辑划分,能够有效的区分不同的角色,这就更适合大规模系统的开发和管理 。

6.2 MVC设计模式和实现:

M是Model,表示数据模型,主要完成系统的逻辑处理。

V是View,表示用户界面视图,主要完成与用户的交互。

C是Controller,表示控制器,主要建立模型与视图之间的关联。

MVC设计模式有三部分组成:

1.模型是应用对象,没有用户界面;

2.视图表示他在屏幕上的显示,代表流向用户的数据;

3.控制器定义用户界面对用户输入的响应方式,负责把用户动作转成针对Model的操作;Model通过更新View的数据来反映数据的变化。

开发环境:Myeclipe集成的,实现的功能:

          Tomcat:默认端口号:8080

          WEB-INF:  lib 第三方J包  配置文件  Web.xml(javaweb必须有的)

          META-INF :Class (疑问)    

    

更多相关推荐:
java web总结

JavaWeb总结1.JSP运行原理(1)用户通过客户端浏览器向服务器发送请求。(2)JSP文件将JSP引擎编译成Java的class文件,即servlet。(3)将产生的servlet加载到内存执行。(4)S…

JavaWeb总结

UserDaoImpl.javapackagecn.itcast.dao.impl;importorg.apache.commons.dbutils.QueryRunner;importorg.apache.c…

javaweb总结

1javaweb应用的目录结构web程序文件夹WEBINFwebxmlclasses源程序对应的classlib程序用到的第三方库jar2如何用javac来编译程序a需要用到j2ee相关的jar将这些jar放到...

javaWeb总结+小结

JavaWebBS与CS的区别1从安装上来讲BS只需要在服务器端安装即可而CS却需要每一个客户端进行安装2从部署上来说BS只需要服务器能够支持即可而CS却对每一个客户端的电脑提出了要求3从升级维护角度来说BS只...

JavaWeb大总结

day01XML的主要内容1XML的作用2XML语法3DTD的约束4用Java语言编写XML数据解析器JAXPDOM4J5Xpath6Schema约束7Eclipse的基本使用8JUnit单元测试9Debug调...

javaweb学习心得

学习心得在写心得之前总结下中级部分学习的内容,我们的中级部分主要学习了html,css,javacript,xml,dtd/scheam,以及javaee中的jsp,servlet,过滤器,监听器,JSTL,E…

JavaWeb基础与SSH框架知识总结

一、JSP知识:1.用户第一次请求JSP页面时,JSP引擎会转译该JSP文件为Servlet文件(.java),并编译该文件,生成字节码文件(.class)。最后将一个HTML页面发送给客户端。用户再次请求JS…

JavaWeb总结

一XMLExtensibleMarkupLanguage扩展标记语言1作用描述数据存储数据交换数据2格式ltxmlversion10encodingGBKgtltxml声明注释gtltrootgtltrowgt...

JavaWeb总结

一XMLExtensibleMarkupLanguage扩展标记语言1作用描述数据存储数据交换数据2格式ltxmlversion10encodingGBKgtltxml声明注释gtltrootgtltrowgt...

javaweb复习总结全

javaweb第一天1junit测试框架ArrsertassertEqualslongexecptedlongactual测试两个long类型的值execpted与actual是否相等相等返回true否则返回f...

JavaWeb复习总结

B1JSPServlet题目表示资源移动的状态码是选择1项A200B302C400D500A2JSPServlet题目哪一个对象可以用于获得浏览器发送的请求选择1项AHttpServletRequestBHtt...

java web 自学的总结

20xx03122CtrlF查找文件内部2html标签7HTML水平线8lthrgt标签在HTML页面中创建水平线8列表9有序的ltolgtltligtltligtltolgt无序的ltulgt自定义列表dl9...

javaweb总结(23篇)