Web技术-2 Java Web技术

java Web指的是用Java技术进行基于B/S模式的动态web应用系统的开发。本部分主要学习web服务器搭建、JSP基础语法、使用JDBC和JavaBean操作数据库,Servlet处理请求,第三方控件和分页查询、EL表达式和JSTL标签、过滤器和监听器配置。要学好Java web技术,必须要理解MVC模式。

MVC模式是一种使用模型-视图-控制器设计创建 Web 应用程序的模式。最典型的MVC就是JSP + servlet + JavaBean的模式。Javabean的作用是负责业务逻辑和封装数据,包括 entity层、dao层、service层,其中dao层是数据访问层,负责访问数据库。entity是实体层,负责封装数据,而service层是业务逻辑层, 负责逻辑业务,可以直接调用dao层代码使功能模块化。servlet作用是负责接收请求,调用相应Service方法,决定如何响应,本身不做业务逻辑。jsp页面是由html+java代码编写的,作用就是制作动态可视化页面。

一、java web简介

1、B/S架构 :Web应用程序 采用请求、响应模式进行交互

2、C/S架构 :桌面应用程序   嵌入式程序:安卓、苹果

3、URL:统一资源定位符(协议+主机地址+目标资源地址+参数)

4、动态网页制作:

JSP(JAVA SERVER PAGE):适合大型的,企业级的web应用程序开发

Asp .net:简单易学,但安全性以及跨平台性差

PHP:简单高效,成本低,适合中小型企业web应用开发(lamp:linux+apache+mysql+php )

5、Web服务器

Microsoft:IIS  Apache:Tomcat  Oracle:WebLogic IBM:WebSphere  Nginx

Tomcat服务器:

文件夹:/bin  /conf  /lib(jar文件)   /logs   /temp

/webapps(web应用发布后的文件:WEB-INF .jsp)   /work (由JSP生成的servlet文件)

6、WEB-INF:WEB应用的安全目录,只有服务端可以访问

1、web.xml项目部署文件

2、classes(放.class文件) 3、lib(放.jar文件)

7、把任意名称.jsp作为项目欢迎页,配置方法:在web.xml文件添加如下代码

<welcome-file-list>

<welcome-file>/520.jsp</welcome-file> //默认页:520.jsp

</welcome-file-list>

8、MyEclipse简单配置:

在preference中java目录添加JRES,在myeclipse目录severs目录配置tomcat。

修改JSP中默认使用的字符编码格式为utf-8

9、Myeclipse编写java web程序步骤

1、创建java web项目。生成WebRoot、WEB-INF文件夹

2、编写jsp文件

3、部署和发布web app。点击deploy

4、启动tomcat 7.x服务

5、打开浏览器访问项目文件

10、java web项目目录结构:java源程序src、类库文件、web项目根目录

11、项目虚拟路径:在浏览器打开的项目地址

右键打开项目属性properties、选择myeclipse、选择web标签。

修改web context-root路径、重新部署web app ,启动tomcat服务,实现虚拟路径访问访问

12、修改tomcat服务器默认端口

修改conf/server.xml文件:8080修改为8088、8888等(范围1024~65535)

13、web程序常见错误

404错误—找不到访问的页面或资源(url输入错误;将页面放在web-inf下;外部启动tomcat,未部署项目)

500错误—JSP页面代码错误

页面无法显示—未启动Tomcat

二、jsp基础语法

1、jsp:java sever pages :是一种运行在服务端的java页面。采用HTML语言嵌套java代码实现jsp开发web app

2、jsp页面组成:

指令、表达式、小脚本、声明、注释、静态内容

jsp指令:

page 位于页面顶端 <%@ page language=”java” import=”java.util.*” contentType=”text/html; charset=UTF-8” pageEncoding=”UTF-8”%>

include  外部文件嵌入到jsp文件中,并解析

taglib  自定义并使用新标签

jsp注释:

1、html注释:客户端可见    <!– html注释 –>

2、jsp注释:客户端不可见   <%–jsp注释 –%>

3、jsp脚本注释:客户端不可见<%  //单行注释 /*多行注释*/  %>

jsp脚本:在jsp页面执行的java代码

<% out.println(“大家好”)%>

jsp声明:在jsp页面定义变量或方法

<%! String s=”张三” %> 注意声明的是全局变量

<%! int add(int x,int y){return x+y} %>

jsp表达式:

<%=add(10,5) %> //调用上面的方法,并输出

3、JSP页面生命周期:

用户发出请求(.jsp文件)→如果是第一次请求,通过jsp引擎将jsp文件转换为Servlet,编译生成字节码.并执行jspInit()方法实现初始化→访问字节码文件。若用户不是第一次请求,会直接访问生成的字节码文件,最后执行jspService()方法

jspService()方法:处理客户端请求,每一次请求,jsp引擎都会创建新的线程来处理。请求是多个的,所以涉及到多线程编程,需要注意同步问题

三、JSP内置对象

web容器创建的一组对象,不使用new关键字创建就可以使用的对象,有九大内置对象:

请求对象:request 相应对象:response  输出对象:out  会话对象:session

应用程序对象:application 页面上下文对象:pageContext

页面对象:page  配置对象:config     异常对象:exception

1、web程序的请求响应模式: request\response  客户端发出请求,服务端给予响应

2、缓冲区:是内存的一块区域用来保存临时数据  比如乘米饭的碗

3、out对象:是jspWriter类的实例,是客户端输出内容常用对象

方法: println() 打印字符串  clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常     close()关闭输出流

clearBuffer()清除缓冲区的内容,如果在flush之后调用不会抛出异常  flush()将缓冲区的内容输出到客户端

getBufferSize() 返回缓冲区的字节大小  getRemaining()返回缓冲区还剩余多少可用  isAutoFlush()当缓冲区满时,是自动清空还是抛出异常

4、表单提交方式method:

get(使用get参数出现在URL中,适合提交数据量不大,安全性不高的数据) post(相反,效率没get高。主要用于注册、修改、上传等功能)

5、request对象:是HttpServletRequest类的实例,用来封装客户端的请求信息

方法:

1、String getParameter(); 返回name指定参数的参数值(获取表单提交的数据)

String[] getParameterValues();返回包含name参数的所有值的数组

2、void setAttribute(String,Object)  存储请求的属性 (注意是键值对)

object getAttribute(String name)  返回指定属性的值

3、void setCharacterEncoding() 指定请求的编码方式(解决post提交中文乱码)

String getCharacterEncoding() 返回字符编码的方式

4、getRequestDispatcher(“path”).forward(request,response)用于转发请求

getContentLength()返回请求的文件长度  getRemoteAddr()返回请求客户端的IP地址

getRealPath()请求的真实绝对路径  getContextPath() 请求的上下文路径

getContentType() 得到请求体的MIME类型   getProtocol() 返回请求协议类型及版本号

getServerName()返回接受请求的服务器主机名  getServerPort()返回接受请求的服务器端口号

get请求!URL中文传参出现乱码,需要修改服务器的server.xml文件,在<Connector port=”8080” protocol=”HTTP/1.1” /> 最后添加URIEncoding=”UTF-8”

6、response对象:是HttpServletResponse类的实例。包含了响应客户端请求的有关信息

方法:

setCharacterEncoding() 设置响应的编码方式

getCharacterEncoding() 返回响应所用的编码

setContentType() 设置响应的MIME类型

PrintWriter getWriter() 返回输出流(到客户端)对象

sendRedirect()重新定向客户端的请求

7、请求重定向与请求转发的区别

重定向:客户端行为,reponse.sendRedirect(“path”),是两次请求,前一次请求对象不会被保存,地址栏的URL地址会改变

转发:服务器行为,

request.getRequestDispatcher(“path”).forward(request,response),是一次请求,转发后请求对象会保存,地址栏URL不会改变

8、session对象:是HttpSeesion类的实例,是保存用户会话状态的一种机制

在服务器内存中保存着不同用户的session。 在第一个jsp页面被加载时自动创建seesion,完成会话期管理。

方法:long getCreationTime()返回session创建的时间(ms)

String getId()返回创建session时jsp引擎为它设置的唯一ID号

setAttribute(String name,Object value)使用指定名称将对象绑定到此对话

getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,若无返回null

String[] getValueNames()返回一个包含此session中所有可用属性的数组

int setMaxInactiveInterval() 设置两次请求间隔多长时间此session失效(s)

int getMaxInactiveInterval() 返回两次请求间隔多长时间此session失效(s)

session生命周期就是客户打开浏览器并连接服务器开始,到关闭浏览器离开这个服务器结束。经历session创建,活动,销毁三个阶段

session活动阶段:

属于同一会话的情况:通过超链接打开页面;当前会话页面没有全部关闭,而重新打开新的浏览器窗口访问同一项目资源。

注意:关闭浏览器,重新打开页面,会创建新的session。但是旧的sessionId仍存在服务端,只是再没有客户端携带它然后交付服务端校验

session销毁方式:

1、调用session.invalidate()  session.removeAttribute()

2、Session设置超时方式:tomcat默认超时时间为30min;

使用session.setMaxInactiveInterval();在web.xml配置超时时间

<session-config> <session-timeout>1</session-timeout> </session-config> //1分钟

3、服务器重新启动

9、application对象:是ServletContext类的实例。实现了用户间数据共享,可存放全局变量。存活于服务器的开启和关闭

方法:

setAttribute(String name,Object value)使用指定名称将对象绑定到此对话

getAttribute(String name)返回与此会话中的指定名称绑定在一起的对象,若无返回null

Enumeration getAttributeNames(String name)返回所有可用属性名的枚举

getsServerInfo()返回JSP引擎及版本号

10、page对象:是java.long.Object类的实例,指当前jsp页面本身,相当于类中的this指针

方法:

getClass()返回此Object的类     hashcode()返回此Object的hash码

equals()判断此Object是否与指定的Object对象相等

copy() 把此Object拷贝到指定的Object对象中    clone() 克隆此Object对象

toString()把此Object对象转换为String类对象

notify()唤醒一个等待的线程      notifyAll()唤醒所有等待的线程

wait(int timeout)使一个线程处于等待直到timeout结束或被唤醒

wait()使一个线程处于等待直到被唤醒

11、pageContext对象:相当于页面中所有功能的集大成者,提供了对jsp页面内所有对象及名字空间的方法

方法:

JspWrite getOut()返回当前客户端响应被使用的JspWriter流

HttpSession getSession() 返回当前页中的HttpSession对象

Object getPage() 返回当前页的Object对象

ServletRequest getRequest()返回当前页的ServletRequest对象

ServletResponse getResponse()返回当前页的ServletResponse对象

setAttribute(String name,Object attribute) 设置属性及属性值 getAttribute()返回某属性的属性值

int getAttributeScope()返回某属性的作用范围

forward(String relativeUrlPath)使当前页面转发到另一个页面

include(String relativeUrlPath)在当前位置包含另一个文件

12、config对象:是在一个servlet初始化时,用于JSP引擎向它传递信息(属性和值)

方法:

ServletContext getServletContext()返回含有服务器相关信息的ServletContext对象

String getInitParameter()返回初始化参数的值

Enumeration getInitParameterNames()返回Servlet初始化所有参数的枚举

13、Exception对象:是java.lang.Throwable的对象,当页面运行异常会产生该对象。

如果一个JSP页面要应用此对象,需要把isErrorPage设为true

getMessage()获得异常消息 toString()获得异常的简单描述信息

printStackTrace()显示异常及其栈轨迹

Throwable FillInStackTrace()重写异常的执行栈轨迹

14、cookie(在客户端保存)

添加数据:public void addCookie(Cookie cookie)

获取数据: public Cookie[ ] getCookies()

设置有效期:public void setMaxAge(int expiry)

创建:Cookie cookie = new Cookie(“存储的对象”, 对象的值);

设置存储时间: cookie.setMaxAge(60*60); expiry为0表示删除cookie,-1或不写表示cookie会在当前窗口关闭后失效

添加cookie:  response.addCookie(cookie);(服务器端要求存储)

获取cookie: Cookie [ ] cs=request.getCookies();(客户端获取)

注:中文乱码

先编码:URLEncoder.encode(“要转码的对象,“编码格式”)

再解码:URLDecoder.decode(“要解码的对象,“编码格式”)

15、session与cookie区别:

Session在服务器端保存信息,保存的是Object类型,随会话的结束而销毁数据

一般保存重要的信息。

Cookie在客户端保存用户信息,保存的是String类型,可以长期保存在客户端,一般保存不重要的信息。

四、使用JDBC和JavaBean操作数据库

1、JDBC(JAVA数据库连接技术): 实现java程序对各种数据库的访问。使用java.sql、javax.sql包中的类和接口(JDBC API)。

面向接口的编程:仅能调用接口提供的开放的方法。

优点:不必为不同数据库编写不同程序,实现只需要加载不同数据库驱动即可

原理:JDBC API定义类和接口 DriveManager管理不同的JDBC驱动。JDBC驱动实现各类与接口,负责连接不同类型的数据库。

编写的包:

Dao包:存放接口和类,负责数据库相关事情。

Dao.impl包 : dao接口实现类

entity包:存放实体类,封装所有表数据

Service包: 存放的接口和类,对Dao的方法进行封装和调用,负责与业务逻辑相关的操作。所有service层称业务逻辑层

Service.impl包:service接口实现类

Test包:存放测试类

util包:分页工具类   properties配置文件

2、JavaBean:是一个java类,可以重用。解决代码重复编写,减少代码冗余,功能区分明确,提高代码的可维护性

JavaBean设计原则:公有类、无参的公有的构造方法、属性私有、getter和setter方法

作用:封装业务(dao、service接口实现类);封装数据(entity)

3、JDBC编程步骤

1、Class.forName(driver);加载驱动

2、con=DriverManager.getConnection(url name password)获得数据库连接

3、执行sql  注意Statement 和PreparedStatement的区别

String sql=”select * from news “; stat=connection.createStatement();

rs=stat.executeQuery(sql);

4、处理结果 System.out.println();

5、并释放资源  ?.close();

Statement与PreparedStatement区别:

PreparedStatement—预编译,声明时携带SQL参数,适合多参数请求

SQL语句使用“?”作为数据占位符;使用setXxx()方法设置数据

4、升级Dao层,使用database.properties配置文件存储数据库信息

将相似功能的代码抽取封装成方法,减少代码冗余。将数据库抽取成接口,降低架构耦合性。

方法:编写BaseDao基类、Dao接口及DaoImp实现类。

5、使用Tomcat配置数据源,利用JNDI获取数据源,连接数据库

修改 \apache-tomcat-7.0.69\conf\context.xml配置文件,添加如下

<Resource name=”jdbc/news”

auth=”container” type=”javax.sql.DataSource”

maxActive=”100” maxIdle=”30” maxWait=”10000” username=”root”

password=”123456”  driverClassName=”com.mysql.jdbc.Driver”

url=”jdbc:mysql://127.0.0.1:3306/news”/>

如果oracle,修改username password classname=”oracle.jabc.OracleDriver”

url:”jdbc:oracle:thin:@localhost:1521:news”

连接池:存放连接对象,并管理连接对象,根据请求时对象是否空闲分配连接对象

数据源:由Tomcat容器创建连接对象,统一放到连接池中管理,用来连接数据库,获得连接对象

6、JNDI(java命名和目录接口): 将名字和对象绑定,通过JNDI接口对象的lookup()方法获取创建好的数据源

Context context = new InitialContext();//初始化上下文

DataSource ds=(DataSource) context.lookup(“java:comp/env/jdbc/news”)

connection=ds.getConnection();//获取存放在连接池的数据源并连接数据库

7、通过JavaBean封装数据和传递数据

分层架构思想:mysql—dao—service–jsp

entity层,实体类(News\User\NewsCategory)。

Dao层(BaseDao\NewsDao)包括接口和实现类。

Service层,业务逻辑层(UserService(register))。

8、JSP动作标签

与存取javabean有关的动作标签:

a创建javabean实例,并指定它的名称和作用范围

<jsp:useBean id=”name” class=”package.class” scope=”page”/ >

b设置javabean(对象name)的属性(property)的值

<jsp:setProperty property=”newsDao” name=”service” value=”<%=newsDao>”/>

c <jsp:getProperty>  实现对javabean对象属性的获取

JSP1.2常用的基本动作标签

<jsp:include><jsp:forward><jsp:param>

<jsp:plugin><jsp:params><jsp:fallback>

JSP2.0新增的动作标签

<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text>

<jsp:output><jsp:attribute><jsp:body><jsp:element><jsp:dobody><jsp:invoke>

9、Include指令与动作标签

Include指令 静态包含页面,包含的是实际内容,在编译期页面才被执行

被包含页面内容发生变化,包含页面会重新编译。<%@ include file=”x.jsp” %>

动作标签:include、forward  param

Include: <jsp:include page=”url” flush=”true|false”/>动态包含页面,包含的是页面输出。先执行代码,后将页面包含。被包含页面内容发生变化,包含页面不会重新编译

forward: <jsp:forward page=”url”/>实现页面跳转 等价于服务器内部跳转

param: <jsp:param name=”参数名”value=”参数值”> 常与forward标签一起使用,为表单添加新参数或修改原有参数

<jsp:forward page=”url”>< jsp:param name=”email”value=”admin@126.com”>

</jsp:forward>

五、第三方控件与分页查询

一、掌握commons-fileupload文件上传组件(属于java的)

首先导入commons-fileupload.jar和commons-io-2.4.jar包

1、提交页面(creat页面):

①input type = text 应改为 type = file

②必须是post提交方式

③enctype=”multipart/form-data”告诉服务器这不是普通表单,我要上传文件

2、do add页面:

①设置请求的字符编码UTF-8

②解析请求之前,通过核心组件ServletFileUpload来判断是否为文件上传类型

ServletFileUpload.isMultipartContent(request),返回值是布尔

③选择上传路径,要先判断目标路径是否存在,如果不存在,自动创建

④因为最终要把上传的文件set到数据库,所以要先new 一个 news对象 。上传时间通过news.setCreate(new date())系统创建

⑥判断②中的返回值是true,就处理文件上传

⑦通过newsService调用add方法,将文件保存至数据库。成功或者失败可以选择转发和重定向

3、处理文件上传步骤:

①创建核心类ServletFileUpload,可以解析表单提交的请求,包括上传文件,包括普通文本表单里面的值

②转换请求对象,解析请求

③使用迭代器,取出请求对象FileItem,并遍历

④判断是文本域还是文件域,若是文本域,就获取文本域name的值和文本域value的值

⑤若是文件表单控制,判断文件名是否为空和空串后,就获取文件名并指定位置(全路径/文件名)上传

总结文件上传步骤

①在creat页面(提交页面):

设置三个属性:enctype;type=file;post

②在do add页面(jsp页面)

检查请求类型 :

servletFileUpload.isMultipartContent(request)返回值是布尔

声明对象:

FileItemFactory factory=new DiskFileItemFactory();

ServletFileUpload upload=new ServletFileUpload(factory);

转换请求对象,解析请求

List <FileItem> items=null;

items = upload.parseRequest(request);

保存上传的文件

if(!item.isFormFiled()){

File fullFile = new File (item.getName());

File UploadFile=new File(realPath,fullfile.getName());

item.write(uploadFile);

}

获取普通字段

if(item.isFormFiled()){

fieldName= item.getFieldName();//name

if(fieldname.equals(“title”)){

news.setTitle(item.getString(“utf-8”));//value

}

}

二、使用CKEditor文本编辑器对新闻进行所见即所得的编辑

CKEditor 网页中实现所见即所得的编辑器(属于js的第三方组件)

步骤:

①下载CKEditor

②解压到项目中(放入webroot下就好了)

③在页面中加入CKEditor

④使用CKEditor编辑内容(和word差不多)

⑤提交CKEditor编辑的内容

总结:

在页面中引入ckeditor.js

<script type=”text/javascript” src=”ckeditor/ckeditor.js”></script>

获取绝对路径的方法:request.getContextPath();

在页面中加入textarea,使之成为CKEditor

<textarea  class=”ckeditor”></textarea>

配置config.js配置CKEditor

补充:My97DatePicker为时间插件

三、后台实现列表分页查询(limit)

先编写分页查询sql语句,再编写分页查询方法,将分页查询分步实现

1、后台分页查询步骤:

①确定每页显示的数据数量

②计算显示数据的总数量getTotalCount();

③计算显示的页数PageSupport

总页数=总数量/每页显示的数据数量(不能整除就+1)

④编写分页查询SQL语句 (limit [m,n])

⑤实现分页查询

2、limit(m,n)  m表示起始位置,n表示读n条

m =(pageNo-1)*pageSize     n= pageSize

3、创建分页工具类PageSupport,放入util包中

总数量;pageSize;当前页码;总页数

总结:

①后台编写查询新闻总数量的代码 getTotalCount

②后台编写分页获取新闻列表代码 getPageNewsList

这里的sql语句要特别注意了

string sql=“select * from news_detail

limit[(pageIndex-1)*pageSize,pageSize]”;

③编写分页工具类 PageSupport

封装 总新闻数newsCount、总页数totalPageCount、

每页数pageSize,当前页号 currentPageNo

在设置set/get方法时,

要注意总页数=0也要返回当前页,

当前页数要大于0,页码要大于0,总页数也要大于0

设置总页数(判断是否要+1)

四、掌握jsp分页显示数据

分页显示关键点:

确定当前页

设置首页、上一页(当前页-1)、下一页(当前页+1)、末页的页码(控制异常)

首页与末页的控制

 

六、EL表达式优化页面显示

1、表达式

EL E L 表 达 式 如 {username}

2、操作符“.”或 “[]”

获取对象的属性,如 new.title n e w . t i t l e {new[“title”]}

访问含有特殊字符的变量,如 request[news.title]</p><p>访newsList[0]</p><p></p><p>3</p><p></p><p></p><p>get</p><p>4EL</p><p>JSP</p><p>5EL</p><p>JavaBean r e q u e s t [ “ n e w s . t i t l e ” ] < / p >< p > 访 问 数 组 , 如 n e w s L i s t [ 0 ] < / p >< p > 严 格 区 分 大 小 写 < / p >< p > 3 、 步 骤 : < / p >< p > 将 对 象 放 入 作 用 域 < / p >< p > 按 键 获 取 , 获 取 对 象 属 性 < / p >< p > 会 调 用 g e t 方 法 < / p >< p > 4 、 E L 运 算 符 < / p >< p > 为 了 避 免 J S P 混 淆 运 算 符 和 页 面 关 键 字 , 很 多 运 算 符 都 有 替 代 写 法 < / p >< p > 5 、 E L 功 能 < / p >< p > 取 得 J a v a B e a n 对 象 的 属 性 {news.title}

取得数组、List、Map类型对象的元素 list[0]</p><p>使 l i s t [ 0 ] < / p >< p > 使 用 各 类 运 算 符 对 原 始 数 据 进 行 简 单 处 理 {num1+num2}

屏蔽一些常见的异常 username</p><p> u s e r n a m e < / p >< p > 能 实 现 简 单 的 自 动 类 型 转 换 {news}相当于

(news)request.getAttribute(“news”)

6、EL访问的作用域

七、 JSTL标签

JSP标准标签库,实现JSP页面中的逻辑控制

1、步骤

下载jstl.jar和standard.jar包

将这2个包复制到WEB-INF\lib目录

在JSP页面中添加指令

%@talib uri=”http//java.sun.com/jsp/jstl/core” prefix=”c” %

2、<c:out/>标签

<c:out value=”” default=”” escapeXml=””>

value:需要输出显示的表达式

default:默认输出显示的值(替换 空字符串和null的区别)

escapeXml:是否对输出的内容进行转义(true|false)

3、<c:set>标签</c:set>

<c:set var=”变量名” value=“变量值” scope=“作用域”>

<c:set value=”属性值” target=“对象名” property=“对象的属性名”>

4、<c:remove/>与<c:set>对应

5、<c:forEach/>迭代标签和<c:if>条件标签

<c:forEach   var=“集合中元素名” items=“集合对象”varStatus=“循环的状态”>

<c:if test=“判断的条件” var=“判断的结果”scope=“作用域”>

{status.count}当前行号&nbsp;&nbsp; {status.count}当前行号&nbsp;&nbsp; {status.index}当前元素

</c:if>

</c:forEach>

6、<c:url/>url标签 和<c:param/>参数标签

<c:url value=”url”>

<c:param name=”参数名” value=“参数值”>

</c:param>

</c:url>

7、<c:import/>导入标签

<c:import url=”导入的资源的路径”>

8、<fmt:formatDate/>格式化标签

<fmt:formatDate     value=”date” pattern=”要转换的格式”/>

 

 

八、Servlet、过滤器和监听器

  • servlet介绍

Server+Applet,是一种服务器端的Java应用程序。只有当一个服务器端的程序使用了ServletAPI的时候,这个服务端的程序才能称之为Servlet

MVC ( Model View Control):jsp + servlet + javabean

JSP      负责显示数据  jsp最终会被编译成一个servlet.Java

Servlet   接受请求,调用JavaBean去处理请求,给出响应

JavaBean  封装数据(entity)、业务逻辑(dao\service层)

1、主要Servlet API介绍

(1)javax.servlet.Servlet接口:

所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集

(2)javax.servlet.GenericServlet类(父类)

实现servlet接口,是Servlet的通用版本,是一种与协议无关的Servlet

(3)javax.servlet.http.HttpServlet类(子类)

实现servlet接口,在GenericServlet基础上扩展的基于Http协议的Servlet  主要学习内容

2、如何创建Servlet

创建类实现javax.servlet.Servlet接口

创建类继承javax.servlet.GeneriServlet类

创建类继承javax.servlet.HttpServlet类   调用doGet/doPost方法

3、Servlet中主要方法:

init():  Servlet的初始化方法,仅执行一次

service():处理请求和生成响应(相当于派发)

destroy():在服务器停止并且程序中的Servlet对象不再使用的时候调用,只执行一次。自动调用

ServletRequest:封装客户的请求。作用相当于JSP内置对象request

ServletResponse:创建响应信息,将处理结果返回给客户端。作用相当于JSP内置对象response

ServletConfig:包含了service的初始化参数信息

4、Servlet生命周期

(1)实例化

(2)初始化(调用init方法来实现监听)

(3)处理请求(调用service方法)

(4)销毁(调用destory方法)

→浏览器发送请求

→servlet容器解析请求,创建servlet实例

→实例化后,调用init()方法初始化对象

→调用service()方法处理get/post请求,servlet输出响应信息给容器

→容器返回响应给浏览器

→servlet对象不再使用或者web服务器停止,则调用destory()方法进行销毁

5、部署运行Servlet

(1)修改web.xml(部署描述文件)

添加<servlet> 把Servlet内部名映射到一个Servlet类名

添加<servlet-mapping> 把用户访问的URL映射到Servlet的内部名

注; <servlet-mapping>与<servlet>中的</servlet-name>必须一致

(2)通过URL访问Servlet    注:浏览器访问url都是get请求

步骤:创建一个继承与HttpServelet的类——重写doGet或doPost()方法——在web.xml里配置

6、在servlet中使用jsp的内置对象

HttpServletRequest:getParameter 和getRequestDispatcher

HttpServletRequest:sendRedirect

HttpSession:request.getSession

7、Servlet的作用

负责接收请求,调用相应Service方法,决定如何响应,本身不做业务逻辑。

Javabean负责业务逻辑

8、service方法不需要重写

因为Servlet的service会被自动调用(就像init、destory一样),在HttpServlet中已经有了很好的实现,它会根据请求的方式,调用doGet,doPos方法,也就是说service是用来转向的。如果需要重写service方法,并且根据不同的method调用doPost、doGet等时,就要在末尾加上一句super.service(),那么servlet容器就会把请求交给这个方法来处理。

二、过滤器的使用—处理中文乱码

1、过滤器

是向web应用程序的请求和响应添加功能的web服务组件

过滤器可以统一的集中处理请求和响应

使用过滤器技术实现对请求数据的过滤

2、过滤器的使用步骤

(1)建立实现Filter接口的类(javax.servlet.Filter),实现doFilter方法

(2)实现过滤行为

//设置请求  设置响应

//调用下一个过滤器或web资源 chain.doFilter(req,res)

(3)在web.xml中配置过滤器

url可以是精确匹配、目录匹配 、扩展名匹配和全部匹配

3、过滤器的生命周期

(1)实例化

(2)初始化  init()

(3)过滤   doFilter()

(4)销毁  destory()

4、过滤器的应用场合

(1)对请求和响应进行统一处理

(2)对请求进行日志记录和审核

(3)对数据进行屏蔽和替换

(4)对数据进行加密和解密

三、监听器—统计在线人数

1、监听器:可以接收事件,并完成相关的处理

2、监听器使用步骤

(1)创建类实现HttpSessionBindingListener接口

(2)在valueBound()和valueUnbound()方法中实现用户数量的统计

(3)在web.xml中配置监听器

Session对象要配置监听器,Session对象的属性不用配置监听器

总结:

servlet派发器步骤:

(1)实例化  :继承 httpServlet 实现servlet 借口

(2)初始化  :调用init()方法(只执行一次)

(3)处理请求:调用service()方法来派发,页面上一定是get请求

(4)销毁:   调用destory()方法(只执行一次)

如何在页面上访问Servlet文件

(1)修改web.xml文件,添加<servlet>和<servlet-mapping>

(2)通过url访问

先访问< url-pattern >,再访问<servlet-mapping>下的<servlet-name>,再访问<servlet>下的<servlet-name>,再访问<servlet-class>,最后访问<init-param>(可以给一个value值)

servlet-name 中的名称要一致,<url-pattern>中的路径问题

路径可以是精确匹配;目录匹配/*;扩展名匹配 .xxx

如何在把java代码在页面上输出

首先在doGet请求中得有

HttpServletRequest req ,HttpServletResponse resp

然后调用PrintWriter这个类的getWriter()方法

PrintWriter  out = resq.getWriter();

最后就可以out.print()了,此处的resq,out不是jsp中的内置对象

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供典型应用案例,剖析JSP/Servret技术与Struts 2技术Web开发的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4个综合案例,可以作为案头必备的查询手册 一线开发人员全力打造,分享技术盛宴! 重点内容及特色 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》介绍了Web开发客户端技术的基础知识,包括JavaScript、CSS、AJAX等,这些技术都是Web应用常用的客户端技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax+》讲解了JSP/S rvlet技术的基础知识,并提供了一个综合案例展示其具体应用,它们是Java Web服务端技术的基石,也是学习Java Web开发所要必须掌握的技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》重点讲解了Struts 2、Speing和HIbernate框架的基础知识和高级技术,如Sruts 2的*、类型转换、国际化和标签等,HIbe rna{e的会话、0/R映射和事务管理等,Spring数据库技术与AOP等。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》特别介绍了Struts 2对AjAX的支持,还重点剖析了SSH框架的整合开发,并给出了两个综合案例来展示整合SSH框架开发Web应用。 和已经出版的同类图书相比,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》讲解由浅入深,涵盖更多内容,列举了大量典型实例具有超强的实用性,另外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》各篇独立,适合读者全面学习或对部分内容重点学习。 读者对象 有Java基础,想进一步学习SSH框架整合开发的人员 了解SSH整合开发,想进一步提高开发技术的人员 正在使用SSH整合技术开发项目,想查阅资料的人员 大专院校的学生和老师,以及Java培训班的学员和讲师 需要一本案头必备查询手册的程序员 光盘内容 6小时多媒体体视频讲解 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》所涉及的源代码 布衣暖,菜根香,好书滋味长!清华大学出版社长期以来一直秉承为读者多出好书的宗旨,多年来为读者奉献了大量脍炙人口的精品图书。尤其在计算机图书出版领域更是形成了鲜明特色,所出版的各类计算机图书受到了广大读者的好评。本次出版的“原创经典,程序员典藏”系列图书是清华大学出版社的重点精品计算机图书,旨在帮助读者全面学习各类程序设计语言和开发工具,提高开发水平。同时也为广大程序员提供良好的技术参考,以便作为案头必备的查询手册。 内容提要 -------------------------------------------------------------------------------- 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》通过对SSH的各种技术循序渐进地讲解,使读者尽快掌握开发基于SSH的Web程序的方法。《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring(Ioc容器、装配Java Bean、Jdbc和Hibernate模板、事务管理、Spring AOP等)以及 Hibernate(会话、映射、标准查询API、HQL、事务管理、锁等)。除此之外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》还提供了两个完整的实例来讲解开发SSH的详细步骤和方法。通过对这两个实例的学习,读者可以对SSH开发模式有更透彻地理解和认识。SSH是目前最流行的Java Web开发技术。 《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》适合广大从事Java Web开发工作的技术人员、对SSH开发感兴趣的人员以及大专院校学生阅读,尤其是具有一定的Web开发经验的技术人员。 目录 -------------------------------------------------------------------------------- 第1篇 web开发基础篇 第1章 搭建开发环境 1.1 本书使用的软件和框架的版本 1.2 JDK6的下载与安装 1.3 Eclipse3.4 的下载与安装 1.4 MyEclipse6.5 的下载与安装 1.5 Eclipse:IDEforJavaEEDevelopers的下载与安装 1.6 Tomcat6的下载与安装 1.7 在MyEclipse配置。Tomcat 1.8 在EclipseIDEforJavaEEDevelopers配置Tomcat 1.9 小结 第2章 JavaWeb应用开发基础 2.1 Web技术的发展 2.2 JavaWeb技术 2.2.1 Java.Welb程序的基本组成 2.2.2 JavaWeb程序的目录结构 2.2.3 JavaWeb程序的配置文件 2.3 MVC模式与MvC框架 2.3.1 JSP模型1和JSP模型2 2.3.2 Web应用程序需要的基础服务 2.3.3 MVC模式概述 2.3.4 常用的MvC框架 2.4 小结 第3章 Web开发的客户端技术 3.1 常用的JavaScriptIDE简介 3.1.1 在MyEclipse使用JavaScript 3.1.2 在EclipseIDEforJavaEE使用JavaScript 3.1.3 在NetBeans使用JavaScript 3.1.4 其他的JavaScriptIDE 3.2.1 avaScdpt语法基础 3.2.1 实例:编写第一个JavaScript程序:Greet 3.2.2 变量 3.2.3 原始类型 3.2.4 类型转换 3.2.5 函数与函数调用 3.2.6 类和对象 3.3 JavaScript高级技术 3.3.1 DOM技术概述 3.3.2 获得HTML元素的3种方法 3.3.3 实例:图像自动切换 3.3.4 正则表达式 3.3.5 实例:表格排序 3.4 CSS基础 3.4.1 CSS的基本语法 3.4.2 在Style属性定义样式 3.4.3 在HTML定义样式 3.4.4 在外部文件定义样式 3.4.5 样式的继承 3.5 AJAX.基础 3.5.1 AJAX概述 3.5.2 实例:使用XMLHttpRequest获得Web资源 3.5.3 实例:使用XMLHttpRequest跨域访问Web资源 3.5.4 实例:AJAX的3种交换数据方法 3.6 小结 第4章 Servlet技术 4.1 Servlet的Helloworld程序 4.1.1 实例:在My Eclipse编写Helloworld程序 4.1.2 实例:手工编写:Helloworld程序 4.2 Servlet基础 4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化(init)和销毁(destroy)Servlet 4.2.7 实例:使用PrintWriter输出响应消息 4.2.8 实例:用ServletOutputStream显示图像 4.2.9 实例:使用RequestDispatcher包含Web资源 4.2.10 实例:使用RequestDispatcher转发Web资源 4.3 HttpServletResponse类的其他功能 4.3.1 产生状态响应码 4.3.2 设置响应消息头 4.3.3 实例:验证响应头设置情况 4.4 使用:HttpServletRequest获得请求消息 4.4.1 获取请求行消息 4.4.2 获取网络连接消息 4.4.3 获取请求头消息 4.5 处理Cookie 4.5.1 什么是Cookie 4.5.2 Cookie类的方法 4.5.3 实例:用Cookie读写客户端信息 4.5.4 实例:用Cookie读写复杂数据 4.6 处理Session 4.6.1 什么是Session 4.6.2 HttpSession接口的方法 4.6.3 HttpServletRequest接口的Session方法 4.6.4 实例:通过Cookie跟踪Session 4.6.5 实例:通过重写uRL跟踪Session 4.7 Web开发的文问题 4.7.1 Java的编码原理 4.7.2 实例:解决输出文乱码问题 4.7.3 实例:解决服务端程序读取文请求消息的乱码问题 4.7.4 实例:用AJAX技术发送和接收文信息 4.7.5 实例:在请求消息头和响应消息头转输文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP程序 5.1.2 调试JSP程序 5.1.3 改变JSP的访问路径和扩展名 5.1.4 手动发布JSP程序 5.2 JSP的运行原理 5.2.1 Tomcat如何处理JSP页 5.2.2 分析由JSP生成的Servlet代码 5.3 JSP基本语法 5.3.1 JSP表达式 5.3.2 在JSP嵌入Java代码 5.3.3.JSP声明 5.3.4.JSP表达式语言(EL) 5.3.5 实例:用EL函数替换HTML的特殊字符 5.3.6 JSP页面的注释 5.4 JSP指令 5.4.1 JSP指令简介 5.4.2 page页面指令 5.4.3 include加入指令 5.5.JSP的9个内置对象 5.5.1 out输出对象 5.5.2 pageContext封装对象 5.5.3 其他的JSP内置对象 5.6 JSP标签 5.6.1 插入标签 5.6.2 转发标签 5.6.3 传参标签 5.6.4 创建:Bean标签 5.6.5 设置属性值标签 5.6.6 获取属性值标签 5.7 JSP的标准标签库(JSTL) 5.7.1 如何使用JSTL 5.7.2 条件标签 5.7.3 循环标签 5.8 小结 第6章 用Servlet和JSP实现注册登录系统 第2篇 Struts 2篇 第7章 编写Struts 2的第一个程序 第8章 Struts 2进阶 第9章 Struts 2的* 第10章 Struts 2的类型转换 第11章 Struts 2的输入校验 第12章 文件的上传和下载 第13章 国际化 第14章 Struts 2的标签库 第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新技术 第21章 Hibernate的高级技术 第4篇 Spring篇 第22章 Spring的Helloworld程序 第23章 反向控制(Ioc)与装配JavaBean 第24章 Spring数据库技术 第25章 Spring的其他高级技术 第5篇 综合实例篇 第26章 Struts 2与Hibernate、Spring的整合 第27章 网络硬盘 第28章 论坛系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值