51CTO下载-韩顺平.2011最新j2ee视频教程.细说servlet课件
韩顺平.2011最新j2ee视频教程.jdbc 之 mysql
◆mysql 介绍(1)mysql数据库是瑞典AB 开发(2)mysql->sun->oracle(3)mysql数据库的特点1.开源2.免费3.跨平台(windows / linux /unix /苹果)4.处理并发性(13000个)/安全/稳定5.该数据库轻(对资源要求不高.) 安装文件37.7m ,而且对cpu / 内存要求不高.◆安装和配置1.一般说,一台机器装一个mysql.2.安装和配置过程见mysql安装图解◆mysql 使用1.可以使用window dos 登录到mysql数据库.基本语法在dos 下输入mysql –u 用户名-p密码特别说明: -p 后面的密码不要有空格/ 使用该命令的时候,需要配置一下环境变量.2.mysql数据库也提供图形化界面来登录mysql数据库演示:3.如何在mysql中创建数据库基本语法create database 数据库名•创建一个名称为mydb1的数据库。
create database mydb1; 【sql】•创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8•创建一个使用utf-8字符集,并带校对规则的mydb3数据库create database mydb3 character set utf8 collate utf8_general_ci;◆mysql的一些常用指令①如何查看,创建数据库的指令:show create databse 数据库名;②显示数据库指令show databases;③查看创建数据库的指令show create database 数据名;④删除数据库:drop database 数据库名⑤如何指定使用某个数据库use 数据库名;⑥如何备份和恢复数据库.mysqldump –u 用户名–p密码数据名> 存放路径该指令,需要在dos控制台下直接执行恢复数据库:1.创建一个数据库mydb2 ,但是这个数据库目前是空.e 数据名3.在mysql 控制台下使用source 备份文件路径◆创建表基本语法案例 :创建一张用户表create table users (id int ,name varchar(64),pwd varchar(64),birthday date)◆mysql数据类型(重点)①数值型:1. bit(m) m默认为1 最大64案例create table test1 (id bit(1)); ---//这里显示乱码?2. tinyint [unsigned] 如果是有符号则表示-128 到127 ,如果是无符号0-255案例create table test3(num tinyint) -- -128 到127create table test4(num tinyint unsigned)0 --- 2554.smallintsamllint 是两个字节表示的.带符号是负的2的15次方到2的15次方-1 ,无符号2的16方-1其它的数值类型,见下图即可6.floatFLOAT[(M,D)] [UNSIGNED] 是定长m :表示有效位d: 表示小数点有几位案例:create table test5( num float);create table test6(num float(5,1));7. double其用法和float 类似,只是表示的范围更大,也是定长8. numeric(m,d)用于表示小数,或者整数create table test7 (num numeric); //这样其实就是可以存放整数.create table test8 (num numeric(5,2));//这样就可以表示有效为5,小数点有两位的数②字串类型一览图:常用的有(1)char(m)m 范围是0-255, 定长.char(20) 如果你存放‘abc’字串,实际在表‘abc ’;案例:create table test11 (name char(20));☞小技巧:mysql 自带的client 默认支持utf8 码,所有我们在添加中文的时候,需要设置让client支持gbk* show variables like ‘char%’; //显示关于字符的设置参数* set character_set_client=gbk; //可以存中文* set character_set_results=gbk; //可以看中文(2)varchar(m)m 表示大小,范围0-65535,变长varchar(20) 如果你存放‘abc’字串,实际在表‘abc’;案例省略...建议: 如果表的某列长度固定,比如产品编号..学号. .. 而且在255内,我们应当使用char ,如果长度不能取得,或者长度大于255 小于65535 则使用varchar(3)text该类型,可以表示更大的字串.③日期类型(1)date日期(年-月-日)create table test12(birthday date);对于date 只保存年-月-日(2)datetime日期时间类型create table test13(hiredate datetime);(3)timestamp邮戳:该类型可以保存年-月-日: 时:分:秒它和datetime 最大的区别是,当你update 某条记录的时候,该列值,最自动更新create table test14 (name varchar(64) , sal float, hiredate1 timestamp, hiredate2 datetime);建议: 如果不知道该不该用timestamp ,就不要用.创建表综合案例create table emp(id int,name varchar(64),sex char(2),birthday date,Entry_date date,job varchar(32),salary float,resume text)修改表结构案例:•在上面员工表的基本上增加一个image列。
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1 | 4451992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java dvevlopment kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
全套Servlet培训教程
如果发生初始化错误,致使Servlet不能处理客户端请求,则抛出 UnavailableException 请勿调用System.exit()方法
ServletConfig对象向Servlet提供其初始化参数信息,这些参数与其 他任何请求都不关联。 ServletConfig对象还有对ServletContext对象的引用,Servlet可以使 用此对象调查其环境。
IT教育成就人生
索迪教育
简介-2
Applet是以Java语言开发的程序,它运行在 客户端机器的浏览器上,这些Applet不连接 到服务器。在很多情况下需要访问服务器上 的数据,而这无法通过Applet实现。为了访 问数据和执行服务器端的请求处理,必须使 用另一个称为Servlet的应用程序。Servlet是 以Java编程语言开发的服务器端程序,它运 行在Web服务器中,由于Servlet在服务器内 运行,所以这些程序可用于扩展Web服务器 的功能。
IT教育成就人生
索迪教育
6.1.2 Servlet生命周期-4
处理客户端的请求
Servlet接受客户端的调用时,它将收到两个对象:
ServletRequest,用于封装客户端至服务器的通信。 ServletResponse,用于封装Servlet返回至客户端的通信。
HttpServlet接受客户端的调用时,与普通Servlet相似,它们 是:
HttpServletRequest HttpServletResponse
HttpServlet能够并发地为多个客户端服务。在Servlet初始化 之后,在调用init()方法时, Servlet容器收到的任何请求都 将被转发至Servlet的service()方法。根据正在接收的HTTP请 求类型, HttpServlet类的service()方法可在细分为doGet()、 doPost()、doDelete()、doOptions()、doPut()和doTrace()方 法。其中, doGet()和doPost()是两个常用于处理服务器的请 求并生成响应的方法。
韩顺平 hibernate 第3讲
<property name="hbm2ddl.auto">create</property> hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop。 在sessionFactory 建立的时候自动检查数据库表结构,或者将数据库schema的DDL导到数据库中, 使用create-drop时,在显示关闭 sessionFactory时,将drop掉数据库的schema, create顾名思义,每次都会根据映射文件创建新表. update是数据库中表已经存在了,如果配置文件改变了(增加了一个属性,相当于再数据库中加了一个字 段)那么update会自动在数据库中加上这个字段, validate相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致
hibernate从入门到精通
主讲 韩顺平
主讲:韩顺平 email:hanshunping@
hibernate从入门到精通
主讲 韩顺平
HQL和Criteria
HQL(Hibernate Query Language)-官方推荐
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类 和属性其他部分不区分大小写);HQL中查的是对象而不是表,并且支持多态;HQL 主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); from Person from User user where =:name from User user where =:name and user.birthday < :birthday
韩顺平 2011版 spring视频教程 PPT详述
二、装配Bean
2.1 容纳你的bean
• 2.1.2 使用应用上下文(续)
三种经常用到的实现: 1.ClassPathXmlApplicationContext:从类路径中加载。 2.FileSystemXmlApplicationContext:从文件系统加载。 3.XmlWebApplicationContext:从web系统中加载。
二、装配Bean
2.2 基本装配 2.2.3 通过set方法注入依赖(续) 装配集合 若bean的属性是集合类型,按如下处理: 装配List和数组: <property name="barlist"> <list> <value>bar1</value> <ref bean="bar2"/> </list> </property>
()方法传递bean的ID。 4.若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()
方法传入工厂自身。 5.若BeanPostProcessor(bean后置处理器)和bean关联,则它们的
postProcessBeforeInitialization()方法被调用。 [过滤器举例理解] 6.若bean指定了od方法、,它将被调用。 7.最后,若有BeanPostProcessor和bean关联,则它们的
容器关闭 调用DisposableBean的 destory()方法
调用定制的销毁方法
二、装配Bean
2.1 容纳你的bean
Bean在Spring Bean工厂中的生命周期
• 2.1.3 bean的生命周期(续)
韩顺平servlet笔记2完整版
out.println("name ="+val); session 为什么有? 问题 1: 如何实现在不同的页面,可以去查看信息(比如说购物车),同时还要实现不同的用 户看到的信息是自己. session 工作原理图
session 的生命周期是 30 分钟
session 小结:
① session 是存在服务器的内存中 ② 一个用户浏览器,独享一个 session 域对象 ③ session 中的属性的默认生命周期是 30min ,你可以通过 web.xml 来修改 ④ 3 种 session 生命周期的设置 (1)一个地方是 tomcat/conf/web.xml
③ cookie 存放中文,怎么处理 存放: String val=.URLEncoder.encode("顺平","utf-8");
Cookie cookie=new Cookie("name",val); 取出: String val=.URLDecoder.decode(cookie.getValue(), "utf-8");
mycookie.setMaxAge(7*3600*24);//保存一周
response.addCookie(mycookie);
b=true;
break;
第二章_Servlet_使用入门(北大青鸟J2EE_JSP完美课件)
14
演示:新建工程 演示:新建工程
ACCP V4.0
新建Web模块
要使用 Jbuilder 创建一个 Servlet,首先创建一个 Web 模 块,然后使用该 Web 模块开发 Servlet
单击 “OK” 进入新建 单击 “OK” 进入新建 Web 模块向导 Web 模块向导
15
演示:新建 演示:新建Web Welic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); response.setCharacterEncoding("GB2312"); public void userInterface(HttpServletResponse response)throws PrintWriter out = response.getWriter(); IOException try { { String username = request.getParameter("username"); PrintWriter out=response.getWriter(); String password = request.getParameter("password"); out.println("<html>"); if (username.equals("") || password.equals("")){ out.println("<head><title>loginservlet</title></head>"); userInterface(response); out.println("<body bgcolor=\"#ffffff\">"); } out.println("<h1 align=center>欢迎第一次使用Servlet</h1>"); else{ out.println("<form method=post action=/ServletModule/loginservlet"); out.println("<b>"+username + "</b> 欢迎第一次使用Servlet<br/>"); out.println("<br/>"); out.println("<b>今天的日期是:</b>" + new Date()); }out.println("用户名:<input type='text' name='username'><br/>"); } out.println("密码:<input type='password' name='password'><br/>"); out.println("<input catch(Exception e){ type=submit value='提交'><br/>"); out.println("</form>"); userInterface(response); out.println("</body>"); } out.println("</html>"); out.close(); } } } 演示:示例 演示:示例2 2
韩顺平java从入门到精通视频教程(全讲)学习笔记整理(齐全)
java平台1、J2SE java开发平台标准版2、J2EE java开发平台企业版java程序需要在虚拟机上才可以运行,换言之只要有虚拟机的系统都可以运行java程序。
不同系统上要安装对应的虚拟机才可以运行java程序开发步骤1、编写源文件 (.java)2、编译源文件为类文件(.class)可用J2SE或J2EE编译3、在虚拟机上运行注释//单行注释/* */多行注释java内容介绍java编程可以分成三个方向:1、java se (j2se)桌面开发 java中的基础中的基础2、java ee (j2ee)web开发3、java me (j2me)手机开发java se课程介绍java面向对象编程(基础)java图开界面开发java数据库编程java文件io流编程java网络编程java多线程编程java ee基础1java面向对象编程--数据库编程-->java sejava 基础2html--css--javascript-->div+cssjava ee中级部分Servlet--Jsp-->mvc模式java ee高级部分Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架java之父gosling1990 sun启动绿色计划1| 4511992 创建oak语言-->java1994 gosling参加硅谷大会演示java功能,震惊世界1995 sun正式发布java第一个版本,目前最新是jdk7.0java开发工具记事本、(jcreator、jbuilder退出舞台了)、netbean、eclipse如何选择开发工具先选择记事本,对java有一定了解后再使用eclipse高级开发工具为什么呢?1、更深刻的理解java技术,培养代码感2、有利于公司面试java语言的特点1、java语言是简单的2、java语言是面向对象的3、java语言是跨平台(操作系统)的[即一次编译,到处运行]4、java是高性能的java第一个程序hello.java运行java程序要安装和配置jdkjdk是什么?1、jdk全称java development kit中文java开发工具包2、jdk是sun公司开发的3、jdk包括jre(java runtime envirnment)java运行环境、一堆java工具和java基础的类库(类共3600左右,常用类在150个左右)4、可以在下载**开发安装jdk,用户执行需要安装jre配置JDK添加环境变量即可windows下配置jdk在计算机属性--高级设置--环境变量--添加PATH将JDK所在路径指定即可。
韩顺平java从入门到精通笔记整理1
韩顺平java从入门到精通笔记整理1 2011年5月5日星期四第0讲开山篇1. Java se J2se 桌面Java ee J2ee 网络Java me J2me 手机2. SQL server Mysql Oracle3.学习软件编程的注意事项1.高效愉快学习2.先建立一个整体框架然后细节3.用什么再学习什么4.先知道how,再知道why5.软件编程是一门“做中学”学科,做了才会6.适当囫囵吞枣7.琢磨别人怎么做,不是我认为这么做第1讲内容介绍.项目演示.原理剖析1. 课程包括:java面向对象编程,java图形界面,java数据库编程,java文件i/o流,java网络编程,java的多线程2. Java历史:1990 sun 启动绿色计划1992 创建 oak语言—> java1994 gosling 参加硅谷大会演示java功能震惊世界1995 sun 正式发布java第一个版本,目前最新的是jdk7.03. java开发工具:记事本,jcreator,jbuilder,netbean,eclipse4. jdk包括:jre(java运行环境)java的工具:编译器javac.exe解释执行器java.exejava的类库:3600多个,常用的150多个5. 第一个程序://作者:阿贵//功能:显示“HelloWorld”//日期:2011.5.5//public:表示类是公共的,一个文件中只有一个public类//class:表示这个是一个类//HelloWorld:类名(公共类的类名,必须和文件名一样)public class HelloWorld{//一个主函数,程序的入口public static void main (String args[]){//执行语句System.out.println("helloWorld!");}}6. Java源程序(.java文件)——>java字节码文件(.class文件)——>由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)——>字节码文件(.class)就会在java虚拟机中执行第2讲变量.数据类型1. 在java里面int占4个字节,long占8个字节2. Java基本数据类型:整数:(byte一个字节:-128---127 int四个字节:-2147483648---+2147483647short两个字节:-32768---+32767 long八个字节: )小数(浮点): float double布尔:boolean字符:char(两个字节,可以存放汉字, char test1 ='中';)引申到字符串(类)3. 在java中对char进行运算的时候,直接是当做ASCII码对应的整数4. 数据不能从高精度到低精度的转换 Byte<short<int<long<float<doublefloat a=3.4;是过不去的,在java中小数默认是double(双精度)的应该写成是float a=3.4f;不过可以强制转换:int a=(int)1.2; int b=(int)1.95. int a=1;int b=a+1.2; a先是往高精度转换,然后赋给b,就报错改成int a=1;doubleb=a+1.2; 或者 int a=1;float b=a+1.2f; 就解决了。
韩顺平.2011最新j2ee视频教程.jdbc笔记1
jdbc 详解+学生选课项目jdbc 介绍jdbc 是sun 公司定义的一套访问数据库的规范( 接口+ 类),主要是放在java.sql 包javax.sql 包. 原理图:做jdbc开发的几个前提1.import java.sql.* 有时import javax.sql.*;2.把jar 包导入到你的java项目昨天还是用jdbc 写了一个简单java程序,完成添加一条记录到oracle 数据库中.Connection接口面试题: 什么时候,需要把setAtuoCommit设为false?答:当有多个dml 同时执行,将其看做一个整体提交,则使用事务管理,则需要把setAutoCommit 设为false;具体使用方法:package cn.sp.test;import java.sql.*;import oracle.jdbc.driver.OracleDriver;public class TestJdbc {//使用jdbc去操作oracle 数据库public static void main(String[] args) {// TODO Auto-generated method stubConnection ct=null;Statement statement=null;try {//1加载驱动Class.forName("oracle.jdbc.driver.OracleDriver");//DriverManager.registerDriver(new OracleDriver());//2得到连接ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orclhsp", "scott", "tiger");//把事务设为不自动提交ct.setAutoCommit(false);//3.创建sql对象(Statement / PreparedStatement /CallableStatement)statement=ct.createStatement();//4.通过statement向数据库发出sql 指令./* int n=statement.executeUpdate("insert into user1 values(user1_seq.nextval,'顺平','123'," +"'shunping@',sysdate,30)"); //executeupdate 执行dml(update/insert/delete)*///需求: 对emp表进行操作: 把SMITH 的sal -10 给KING sal+10statement.executeUpdate("update emp set sal=sal-10 where ename='SMITH'");int i=9/0;statement.executeUpdate("update emp set sal=sal+10 where ename='KING'");//提交所有事务mit();} catch (Exception e) {e.printStackTrace();//如果sql 语句中任何语句错误,则可以整体回滚.try {ct.rollback();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// TODO: handle exception}finally{//关闭资源[先开后闭];if(statement!=null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}statement=null;//使用垃圾回收.}if(ct!=null){try {ct.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}ct=null;}}}}ResultSet 的说明在默认情况下,我们的rs结果集,只能向前移动,这样rs 结果就不能复用,如果希望复用,则可以这样做://通过java 来查询所有的雇员.//假设我们希望rs结果,可以滚动(可以向前,亦可向后)ResultSet 的可选项有:resultSetType - 结果集类型,它是 ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE_SCROLL_SENSITIVE 之一resultSetConcurrency - 并发类型;它是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE 之一statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_READ_ONLY);rs=statement.executeQuery("select * from emp");//循环取出while(rs.next()){System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));}//如果我们希望,重新使用rsrs.beforeFirst();System.out.println("*********************");while(rs.next()){System.out.println(rs.getInt("empno")+" 名字"+rs.getString("ename"));}◆orace 表的数据类型和java 程序(jdbc) 的对应关系sql server 表的数据类型和java程序对应图..mysql 表的数据类和java 程序对应图...◆及时关闭资源!!!if(rs!=null){try {rs.close();} catch (Exception e) {// TODO: handle exception}rs=null;}//关闭资源[先开后闭];if(statement!=null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}statement=null;//使用垃圾回收.}if(ct!=null){try {ct.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}ct=null;}细节:(1)尽量晚创建,早释放(2)关闭资源的代码,一定放在finallySqlHelper类的编写在进行jdbc 程序编写的时候,因为对数据库操作很多,所有都会把对数据库的各种操作,封装到一个类(SqlHelper/DBUtil),我们一起编写(1)如果访问数据库很频繁,则我们的Connection 、PreparedStatement,ResultSet.. 就不要搞成static。
韩顺平j2ee视频实战教程servlet课件
Servlet的工作原理
1
请求接收
Servlet容器接收HTTP请求并将请求发送给对应的Servlet。
2
处理请求
Servlet根据请求参数和路径执行逻辑,生成动态内容。
3
生成响应
Servlet将动态内容打包成HTTP响应,并将其发送回客户端浏览器。
Servlet的生命周期
1
处理请求
2
Servlet处理HTTP请求并生成响应,
Servlet可以通过继承和接 口实现自定义功能,并与 其他Java框架集成。
性能
Servlet运行在服务器端, 可以直接操作底层资源, 提供高效的数据处理和访 问。
Servlet的应用场景
电子商务
Servlet可用于处理订单、用户 登录和购物车等核心功能。
身份验证
Servlet可用于验证用户身份和 实现安全访问控制。
数据推送
Servlet可根据用户请求实时推 送天气、股票等数据。
Servlet vs JSP
1 Servlet
适合复杂的控制逻辑和前端交互,易于与HTML 和CSS集成。
学习J2EE的价值
J2EE是企业级Java开发的核心技术栈,掌握J2EE将帮助你构建可靠、可扩 展和高性能的企业应用。
韩顺平j2ee视频实战教程 servlet课件
本教程将带你深入学习Java Servlet的实践应用,从基础到高级层面,全面掌 握Servlet的开发技巧和最佳实践。
什么是Servlet?
Servlet是Java编写的服务器端程序,用于处理HTTP请求和生成HTTP响应。它是构建动态Web应用的 重要组成部分。
可与其他组件进行交互。
3
最新韩顺平__jsp和selverlt原完整版课件_笔记
◆背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有一个演变过程]zip粘贴到word设置◆回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->网页设计xmlserlvet+jsp ->java web开发[使用java技术做web开发]◆java ee 体系的介绍◆servlet项目演示◆web 开发介绍①静态页面(html)②动态页面1.用户可以输入数据,和页面交互(注册,购物,发帖子,付款...)2.不同时间打开页面,内容是变化.3.目前比较流行的左动态页面的技术( servlet/jsp , php , , asp, cgi )◆动态网页技术的比较(了解)◆bs 和cs的比较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是干什么的?模拟一个web服务器MyWebServer.javaimport java.io.*;import .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=ss.accept();//提示一句话System.out.println("在9999 上等待连接...");OutputStream os=s.getOutputStream();BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html"));String buf="";while((buf=br.readLine())!=null){os.write(buf.getBytes());}//关闭流br.close();os.close();s.close();}}◆通过tomcat来讲解BS结构◆安装tomcat服务器(1)解压即可(2)配置①在环境变量中添加JA V A_HOME= 指向你的jdk的主目录(并不是bin文件目录)②在不配置JA V AHOME的前提下启动tomcat 在startup.bat的第25行中添加set JA V A_HOME=JKD路劲(3)启动tomcat服务器到tomcat 主目录下bin/startup.bat(4)验证是否安装成功http://localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口)◆tomcat安装后问题解决(1)tomcat无法正常启动的原因分析1.JA V A_HOME 配置错误,或者没有配置2.如果你的机器已经占有了8080 端口,则无法启动,解决方法(1) 你可以8080 先关闭netstat –annetstat –anb 来查看谁占用该8080(2) 主动改变tomcat的端口.到conf/server.xml 文件中修改<Connector connectionTimeout="20000" port="8088"(去修给config->server.xml的端口号)protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外一个页面.去修改工具->管理加载项,把默认的导航给禁用即可.(4) 在访问tomcat时候,一定保证tomcat 服务器是启动◆tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件-->server.xml: 该文件用于配置和server 相关的信息, 比如tomcat启动端口后,配置Host, 配置Context 即web应用-->web.xml : 该文件配置与web应用(web应用就相当于是一个web站点)-->tomcat-users.xml: 该文件用户配置tomcat 的用户密码和权限lib目录: 该目录放置运行tomcat 运行需要的jar包logs目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps目录: 该目录下,放置我们的web应用(web 站点), 比如:建立web1 目录下面放置我们的html 文件jsp 文件..图片... 则web1就被当做一个web应用管理起来(☞特别说明tomcat 6.0 以后支持tomcat 5 版本还有别的设置)work: 工作目录: 该目录用于存放jsp被访问后生成的对应的server文件和.class文件如何去访问一个web 应用的某个文件◆首页面设置及目录规范结构现在我们要求:把hello.html文件设置成该web应用的首页,则需要把web应用的目录格式做的更加规范:①在web文件夹下配置WEB-INF文件夹②在web.xml 文件中添加配置的代码:<welcome-file-list><welcome-file>hello1.html</welcome-file></welcome-file-list>③通过http://localhost:8088/web1来访问hello1.htmlweb-inf目录下的classes目录将来是存放class文件lib 目录将来时存放jar文件web.xml 配置当前这个web应用的信息.◆tomcat如何去管理虚拟目录需求: 当我们把web 应用放到webapps目录,tomcat会自动管理,如果我们希望tomcat 可以管理其它目录下的web应用?->虚拟目录配置我在d 盘有一个web应用.◆虚拟目录配置步骤:①找到server.xml文件②编辑host节点添加Context path在server.xml中添加:<Context path="/myweb2" docBase="d:\web2"/>myweb2:是访问时输入的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:hello2.html实际访问时输入的地址:http://localhost:8088/myweb2/hello2.html绝对路径:从根分区找某个文件相对路径:从该文件位置去找另一个文件③需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)◆context 的几个属性的说明path:docbase:reloadable;如果设为ture ,表示tomcat 会自动更新web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为ture ,则自动解压,否则不自动解压.①:打war包cd:d/web2 然后jar –cvf web2.war *②:浏览打好的war包Deploy发布后会在webapps中自动生存改文件◆配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用http://localhost:8080/web应用/资源名的方式去访问网站,实际上使用类似或者的方式去访问网站,这个又是怎么实现的呢?看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host文件添加127.0.0.1 (2) 在tomcat 的server.xml文件添加主机名<Host name="" appBase="d:\web3”><Context path="/" docBase="d:\web3" /></Host>(3) 在d:\web3 加入了一个/WEB-INF/web.xml 把hello2.html设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效◆tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/server.xml 文件<Engine name="Catalina" defaultHost="主机名">◆为什么需要servlet技术?比如需求:我们希望用户可以贴,用户还可以回复 ....这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了servlet技术供程序员使用.◆servlet的介绍①servlet 其实就是java程序(java类)②该java 程序(java 类)要遵循servlet开发规范③serlvet是运行在服务端④serlvet 功能强大,几乎可以完成网站的所有功能⑤是学习jsp基础◆tomcat 和servlet 在网络中的位置servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel面试题: 请简述servlet的生命周期(工作流程)答:标准版本:①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。
韩顺平 j2ee视频实战教程jsp第1讲 课件 笔记
java ee ; j2ee视频教程- jsp第1讲作者: 韩顺平(一)jsp第1讲1 java EE核心十三种技术介绍2 java EE程序员修炼成精的法门(卖油翁的故事)3 jsp版本的用户管理系统演示4 jsp的概述(基本语法)5 jsp的运行原理(还是hello.jsp)6 jsp版的计算器6.1 jsp中如何使用js(javascript)和css技术..(二)java EE核心十三种技术介绍Java ee是一个开发的平台,它包括的技术很多,主要包括十三种技术.在开发时选择地进行使用,并不是要把所有的技术就去找工作。
只会几种技术就可以从事javaee的开发,正好比如说中国的十八般武艺,最好是什么都会~基础是java servlet jsp !!!基础要像大象一样扎实!不要想水中芦苇,没有跟!(三)java EE程序员修炼成精十三种技术规范:1、Jdbc2、java命名与目录接口(jndi)很少用了3、企业java Bean (Enterprise Java Bean EJB 3.0 以前的版本也要回!因为之前的开发用之前的版本,现在要维护!)4、jsp(本课程讲)5、servlet (之前讲过了)6、corba(很少用,但日本人喜欢用!)7、java的事物体系(JTA)/java事务服务(JTS)现在很少用8、javaMail(要回)和javaBeans激活架构(JAF )9、java信使服务(JMS)短信那边用10扩展标记语言(XML很重要!相当有用)11、Struts + hibernate + Spring (SSH)很重要!卖油翁的故事:我亦无他唯手熟尔!原文:陈康肃公尧咨善射,当世无双,公亦以此自矜。
尝射于家圃,有卖油翁释担而立,睨之,久而不去。
见其发矢十中八九,但微颔之。
康肃问曰:“汝亦知射乎?吾射不亦精乎?”翁曰:“无他,但手熟尔。
”康肃忿然曰:“尔安敢轻吾射!”翁曰:“以我酌油知之。
韩顺平视频讲解全 -setvlet代码
package zonghe2;import java.sql.Connection;import java.sql.DriverManager;//从数据库得到链接public class ConnDB{private Connection ct=null;public Connection getConn(){try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");ct=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=h_servlet", "sa","myledayong");}catch (Exception e){e.printStackTrace();}return ct;}}package zonghe2;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 DelUserCL extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{try{resp.setContentType("text/html;charset=gbk");//调用userbeancl的删除用户的方法UserBeanCL ubc=new UserBeanCL();//接收从wel.java中传递的idString id=req.getParameter("userId");if(ubc.delUser(id)==true){//删除成功resp.sendRedirect("OK");}else{//删除失败resp.sendRedirect("Error");}}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;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 Error extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{try{//解决中文乱码resp.setContentType("text/html;charset=gbk");PrintWriter pw=resp.getWriter();//返回登录界面pw.println("<html>");pw.println("<body bgcolor=#CED3FF>");pw.println("<img src=image/3.gif><hr><center>");pw.println("<h1>操作失败</h1>");pw.println("</center><hr><img src=image/4.gif>");pw.println("</body>");pw.println("</html>");}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;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 Login extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{//业务逻辑(在dopost中写也可以)try{//解决中文乱码resp.setContentType("text/html;charset=gbk");PrintWriter pw=resp.getWriter();//返回登录界面pw.println("<html>");pw.println("<body bgcolor=#CED3FF>");pw.println("<img src=image/3.gif><hr><center>");//得到error信息String info=req.getParameter("info");if(info!=null){pw.println("<h1>用户名或密码错误!</h1><br>");}pw.println("<h1>登录界面</h1>");pw.println("<form action=LoginChuLi mothod=post>");pw.println("用户名:<input type=text name=username><br>");pw.println("密码:<input type=password name=passwd><br>");pw.println("<input type=checkbox name=keep value=2>两周内不能在登录<br>");pw.println("<input type=submit value=login><br>");pw.println("</form>");pw.println("</center><hr><img src=image/4.gif>");pw.println("</body>");pw.println("</html>");}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;import java.io.IOException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//用户验证servletpublic class LoginChuLi extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{Connection ct=null;Statement sm=null;ResultSet rs=null;//业务逻辑(在dopost 中写也可以)try{//接收用户名和密码String u=req.getParameter("username");String p=req.getParameter("passwd");//调用userbeanclUserBeanCL ubc=new UserBeanCL();if(ubc.checkUser(u,p)){String keep=req.getParameter("keep");if(keep!=null){//将用户名和密码保存的客户端(cookie),创建cookieCookie name=new Cookie("myname",u);Cookie pass=new Cookie("mypasswd",p);//设置时间name.setMaxAge(14*24*3600);pass.setMaxAge(14*24*3600);//回写到客户端resp.addCookie(name);resp.addCookie(pass);}// 将用户名和密码放入到session中HttpSession hs=req.getSession(true);hs.setMaxInactiveInterval(60);hs.setAttribute("uname",u);resp.sendRedirect("Main");}else{//说明用户名不存在resp.sendRedirect("Login");}}catch (Exception e){e.printStackTrace();}finally{try{if(rs!=null){rs.close();}if(sm!=null){sm.close();}if(ct!=null){ct.close();}}catch (Exception e){e.printStackTrace();}}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;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 Main extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{//业务逻辑(在dopost中写也可以)try{//解决中文乱码resp.setContentType("text/html;charset=gbk");PrintWriter pw=resp.getWriter();//返回登录界面pw.println("<html>");pw.println("<body bgcolor=#CED3FF>");pw.println("<img src=image/3.gif><hr><center>");pw.println("<h1>主界面</h1>");pw.println("<a href=Wel>管理用户</a><br>");pw.println("<a href=???>添加用户</a><br>");pw.println("<a href=???>查找用户</a><br>");pw.println("<a href=???>安全退出</a><br>");pw.println("</center><hr><img src=image/4.gif>");pw.println("</body>");pw.println("</html>");}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;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 OK extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{try{//解决中文乱码resp.setContentType("text/html;charset=gbk");PrintWriter pw=resp.getWriter();//返回登录界面pw.println("<html>");pw.println("<body bgcolor=#CED3FF>");pw.println("<img src=image/3.gif><hr><center>");pw.println("<h1>恭喜操作成功</h1>");pw.println("<a href=Main>返回主界面</a> <a href=Wel>继续删除用户</a>");pw.println("</center><hr><img src=image/4.gif>");pw.println("</body>");pw.println("</html>");}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{this.doGet(req, resp);}}package zonghe2;//这是一个userbean<-------->users 映射//他的一个对象<-------->users表的一个记录对应public class UserBean{private int userId;private String username;private String passwd;private String email;private int grade;public int getUserId(){return userId;}public void setUserId(int userId){erId = userId;}public String getUsername(){return username;}public void setUsername(String username){ername = username;}public String getPasswd(){return passwd;}public void setPasswd(String passwd){this.passwd = passwd;}public String getEmail(){return email;}public void setEmail(String email){this.email = email;}public int getGrade(){return grade;}public void setGrade(int grade){this.grade = grade;}}package zonghe2;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;//这是一个处理类(处理users表)操作userbeanpublic class UserBeanCL{private Connection ct=null;private PreparedStatement ps=null;private ResultSet rs=null;private int pageCount=0;//共有几页(计算)//删除用户public boolean delUser(String id){boolean b=false;try{ConnDB cd=new ConnDB();ct=cd.getConn();String sql="delete from users where userId='"+id+"'";ps=ct.prepareStatement(sql);int num=ps.executeUpdate();if(num==1){//删除成功b=true;}}catch (Exception e){e.printStackTrace();}finally{this.close1();}return b;}//返回pagecountpublic int getPageCount(){return this.pageCount;}//分页显示结果public ArrayList getResultByPage(int pageNow,int pageSize) throws Exception{ArrayList al=new ArrayList();try{int rowCount=0;//共有几条记录(查表)//得到rowCountConnDB cd=new ConnDB();ct=cd.getConn();ps=ct.prepareStatement("select count(*) from users");rs=ps.executeQuery();if(rs.next()){rowCount=rs.getInt(1);}//计算pageCountif(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{pageCount=rowCount/pageSize+1;}ps=ct.prepareStatement("select top "+pageSize +" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");rs=ps.executeQuery();while(rs.next()){//将rs中的每一条记录封装到userbean中UserBean ub=new UserBean();ub.setUserId(rs.getInt(1));ub.setUsername(rs.getString(2));ub.setPasswd(rs.getString(3));ub.setEmail(rs.getString(4));ub.setGrade(rs.getInt(5));//将ub放入到集合al.add(ub);}}catch (Exception e){e.printStackTrace();}finally{this.close1();}return al;}//验证用户public boolean checkUser(String u,String p){boolean b=false;try{//得到连接ConnDB cd=new ConnDB();ct=cd.getConn();ps=ct.prepareStatement("select top 1 passwd from users where username=?");ps.setString(1,u);rs=ps.executeQuery();if(rs.next()){String dbPasswd=rs.getString(1);if(dbPasswd.equals(p)){b=true;}}}catch (Exception e){e.printStackTrace();}finally{this.close1();}return b;}//关闭资源public void close1(){try{if(rs!=null){rs.close();rs=null;}if(ps!=null){ps.close();ps=null;}if(ct!=null){ct.close();ct=null;}}catch (Exception e){e.printStackTrace();}}}package zonghe2;import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class Wel extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{System.out.println("dsk");Connection ct=null;PreparedStatement ps=null;ResultSet rs=null;//解决中文乱码问题resp.setCharacterEncoding("gbk");PrintWriter pw=resp.getWriter();try{//从session中得到用户名HttpSession hs=req.getSession(true);String myName=(String)hs.getAttribute("uname");String name="";String passwd="";if(myName==null){//如果session中没有用户信息,在看看有没有cookie//从客户端得到所有的cookie信息Cookie [] allCookies=req.getCookies();int i=0;if(allCookies!=null){for(i=0;i<allCookies.length;i++){//依次取出Cookie temp=allCookies[i];if(temp.getName().equals("myname")){//得到cookie的值name=temp.getValue();}else if(temp.getName().equals("mypasswd")){//得到cookie的值passwd=temp.getValue();}}if(!name.equals("")&&!passwd.equals("")){//到loginchuli去验证resp.sendRedirect("LoginChuLi?username="+name+"&passwd="+passwd);return;}}//返回登录界面resp.sendRedirect("Login?info=error1");return;}pw.println("<html>");pw.println("<body bgcolor=#CED3FF>");pw.println("<img src=image/3.gif> 欢迎您:"+myName+"<img src=image/11.gif><hr><center>");pw.println("<h1>管理用户</h1>");pw.println("<br><a href=Login>返回重新登录</a><br><br>");pw.println("<html>");//=====================分页的功能===============================int pageSize=3;// 一页显示几条记录int pageNow=1;//希望显示第几页//动态接收pagenowString sPagenow=req.getParameter("pageNowok");if(sPagenow!=null){pageNow=Integer.parseInt(sPagenow);}//调用userbeanclUserBeanCL ubc=new UserBeanCL();ArrayList al=ubc.getResultByPage(pageNow,pageSize);pw.println("<table border=1>");pw.println("<trbgcolor=pink><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th><th>修改用户</th><th>删除用户</th></tr>");//定义一个颜色数组String [] mycol={"silver","pink"};for(int i=0;i<al.size();i++){UserBean ub=(UserBean)al.get(i);pw.println("<tr bgcolor="+mycol[i%2]+">");pw.println("<td>"+ub.getUserId()+"</td>");pw.println("<td>"+ub.getUsername()+"</td>");pw.println("<td>"+ub.getPasswd()+"</td>");pw.println("<td>"+ub.getEmail()+"</td>");pw.println("<td>"+ub.getGrade()+"</td>");pw.println("<td><a href=???>修改用户</a></td>");pw.println("<td><a href=DelUserCL?userId="+ub.getUserId()+" onclick=\"return window.confirm('确认删除')\">删除用户</a></td>");pw.println("</tr>");}pw.println("</table>");//上一页if(pageNow!=1){pw.println("<a href=Wel?pageNowok="+1+">第一页</a>");pw.println("<a href=Wel?pageNowok="+(pageNow-1)+">上一页</a>");}for(int i=pageNow;i<=pageNow+4;i++){pw.println("<a href=Wel?pageNowok="+i+">"+i+"</a>");}int pageCount=ubc.getPageCount();if(pageNow!=pageCount){pw.println("<a href=Wel?pageNowok="+(pageNow+1)+">下一页</a>");pw.println("<a href=Wel?pageNowok="+pageCount+">尾页</a>");pw.println("<form action=Wel>");pw.println("<input type=text name=pageNowok>");pw.println("<input type=submit value=go>");pw.println("</form>");}pw.println("</center><hr><img src=image/4.gif>");pw.println("</body>");}catch (Exception e){e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{this.doGet(req, resp);}}。
第5章 Servlet技术PPT教学课件
<servlet-name>loginServlet</servlet-name>
<servlet-class>servlet.loginServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
产生变化,则这个内存中的实例就会被销毁并在下一次被请求时重新
被创建。所以servlet修改后不需要重启tomcat。
容器只为每个servlet创建一个单独的实例,容器并不会每接到
一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分
202配0/12给/12 到来的请求。
7
实例化servlet并不都是在容器启动时,要根据参数web.xml里 <servlet>标签对里load-on-startup参数,
本章将着重介绍Servlet的工作原理、常用的Servlet API以及如何通过MyEclipse快速开发Servlet程序。
2020/12/12
3
5.1.1 Servlet容器
Servlet容器(Tomcat),其作用是负责处理客户请求,当客 户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并 把Servlet的执行结果返回给客户
2020/12/12
8
5.1 Servlet API 几个常用的接口和类(结合taoff_p118Servlet1.zip讲解):
1.javax.servlet.http.HttpServlet
该接口是Servlet API的核心类,我们自定义的Servlet都是该 类的子类 (1)int方法
《Servlet会话跟踪》PPT课件
与Servlet有关的四大作用域
application作用域:该作用域中数据的存储由ServletContext实例来完 成,application作用域中包含来自多个不同客户端的session会话作用域 数据;其作用域中数据生命周期的结束点与整个web应用工程同步
作业
创建test数据库与student表,student表中有学生的登录帐户和 密码两个字段
学生在登录html界面上输入用户名和密码点击登录,服务端接收 到请求之后在数据库中查找登录帐户和密码,如果没有找到则跳 转到登录失败的html页面,如果登录成功则在Session中保存当 前登录学生的信息,并跳转到main.html页面中去
B、setAttribute(String attr,Object object):将一个键值对推入Session作用 域中保存起来,以便在同一个会话的其它请求中获取
C、getAttribute(String attr):根据键名从Session作用域中取出对应的值 D、removeAttribute(String attr):删除Session作用域中参数键名标识的键值
在main.html页面中点击一个超链接,服务端判断当前请求的用 户是否已经登录,如果没有登录则跳转到登录页面,如果已经登 录则显示出当前学生的所有信息
感谢下 载
感谢下 载
session作用域:该作用域中数据的存储由HttpSession实例来成,session 作用域中包含来自多次请求-响应的request作用域数据,其作用域中数据 生命周期的结束点取决于设置的最大空闲会话时间和用户浏览器的关闭