Servlet,JSP,MVC设计模式:
如何写Servlet?
新建web工程
1.起一个web工程名 ——>2.选J2EE1.4版本
Web工程的目录结构
如何编写第一个servlet?
需求:服务器向客户端输出 Hello,Servlet!!!
导包总共分三步
1.导包 ——>2.继承HttpServlet 抽象类 重写doGet() 和doPost(); ——>3.在web.xml配置Servlet
如何运行第一个Servlet?
运行普通的java程序,需要JRE就可以了,运行jsp/servlet程序,需要web服务器.
常用的Web服务器
1.tomcat (apache 开源 免费) 准确的说叫JSP/Servlet容器
2.jboss(开源 红帽)
1.部署
(1)手工部署---(2)使用MyEclipse工具部署---(3)使用idea工具部署
2.启动tomcat
(1)使用MyEclipse工具---(2)在控制台下使用s tartup.bat命令---(3)使用idea工具
3.访问
在浏览器中输入---服务器的ip地址:端口号/Web应用程序名/页面名或Servlet名
如何调错?
经常出现的错误之404—-页面没找到
页面没找到或请求的Servlet不存在
经常出现的错误之500—-服务器内部错误
自己写的Servlet代码错误,具体错误看报错描述,看自己写的代码的第一行
tomcat的两种服务器模式
1.running模式(运行模式)---2.debug模式(调试模式)
服务器给客户端写的时候乱码
编码和解码方式不一致
编码: 把看的懂得明文转换成看不懂的密文.
解码: 把看不懂的密文转换成看的懂的明文.
解决方法:
response.setContentType(“text/html;charset=utf-8”);
1.Servlet的现在用途
当做控制器---相当于项目经理---职责: 起控制和调配大局的作用
1.填充数据(接收客户端请求) ---2.调用业务逻辑 (添加商品种类) ---3.转发视图(jsp)
MVC设计模式
一.M Model 模型 ---(1)业务模型 Service+Dao (2)数据模型 VO
二.V View 视图---JSP 向客户端显示信息
三.C Controller 控制器 Servlet---1.填充数据 2.调用业务逻辑 3.转发视图jsp
三层架构
持久层:DAO+VO(实体类) 功能把数据持久化(保存)到数据库
业务层:Service
表现层:Controller + JSP
Servlet多线程安全问题
Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet容器会自动使用线程池等技术来支持系统的运行。
这样,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。所以在用Servlet构建的Web应用时如果不注意线程安全的问题,会使所写的Servlet程序有难以发现的错误。
同步对共享数据的操作
使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段,在本论文中的Servlet可以通过同步块操作来保证线程的安全。
Cookie,Session,JavBean组件技术:
web会话可简单理解为:
用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
有状态会话:
当你首次访问一个Web站点,服务端会给客户端一个cookie,即服务端标记你访问过,当你下一次访问时客户端就会为你携带这个cookie,然后服务端就可以识别出你,这样的过程称为有状态会话
保存会话的两种技术
cookie:客户端技术 (响应,请求)
session:服务器技术,利用这个技术,可以保存用户的会话信息, 我们可以把信息或者数据放在Session中--->常见案例:有的网站登录之后,你下次不用再登录了,第二次访问直接为你自动登录了!
cookie:一般会保存在本地的 用户目录下 appdata;
- Cookie的用法:
Session
服务器会给每一个用户(浏览器)创建一个Seesion对象;
一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
手动注销Session
Session.invalidata();
Web.xml设置自动过期时间
<!-- 设置session默认的失效时间-->
<session-config>
<!--15分钟后session自动失效,以分钟为单位 -->
<session-timeout>15</session-timeout>
</session-config>
不同点:
Cookie对象将信息存放在客户端
Session对象存放在服务器端;
Cookie可以长期保存
Session的生存期仅仅到会话结束,若和数据库配合使用,可以使Session数据长期保持
用户可以看到Cookie文件,并能对Cookie文件进行类似修改、删除的操作,因此Cookie数据的安全性很难得到保障
Session有较好的安全性
JavaBean组件技术
java语言开发的一个可重用组件,分为可视化组件和非可视化组件。
可视化组件:有用户界面,对界面元素进行封装,按钮、文本框等;
非可视化组件:没有用户界面的javaBean,主要用于业务逻辑的封装,提供可重复利用的软件组件;
JSP与JavaBean进行web项目的开发,有以下两个优点:
1、将HTML和java代码分离,方便维护;
2、利用JavaBean的优点,业务逻辑和数据显示分离,将经常使用的代码抽象成一个JavaBean组件,在JSP页面使用时,调用你组件即可。
接下来主要写关于非可视化组件的内容。
JavaBean的编码规则
从编程语言来讲,JavaBean就是符合一定条件的java类的实例。
1、每个属性均有获取和设置的方法。getxxx(),setxxx()。
2、如果属性为boolean类型,对应获取和设置方法为isxxx(),setxxx()。
3、所有属性都是私有成员变量,所有方法都是公有的方法。
4、如果类中定义了含有参数的构造方法,一定要重写无参构造方法。
JavaBean的范围
page范围
使用page范围的JavaBean,只能在创建在它们的页面中才能被访问。当请求响应返回客户端或指向另一资源时,释放该page范围对象的引用。page范围的对象存储在pageContext中。page范围的JavaBean通常用于单一实例的计算或事务。
request范围
request范围的JavaBean在客户端的一次请求中有效。在HTTP中客户端向服务器发送一个请求到服务器返回一个响应,这既是一个request请求过程。在请求过程中,处理的页面并不一定只有一个。
session范围
session范围的JavaBean在客户端与服务器建立连接开始到连接中断的过程中有效,但是当关闭浏览器或超过设置的有效时间时,session范围的JavaBean实例失效。
application范围
application范围的JavaBean一旦建立,除非将其撤销或服务器重新启动,否则JavaBean的实例将一直保存在服务器的内存中。不同的浏览器,不同的客户端,在不同的时间访问这个JavaBean实例都将共享其信息。
EL表达式,JSTL表达式
EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。
在学EL表达式之前我们必须通过<%= %>来取出域中的数据,但这种方式过于繁琐,所以就诞生了EL表达式。
EL取出JSP四大域对象中保存的数据
pageContext域:${pageScope.key};
request域:${requestScope.key};
session域:${sessionScope.key};
application域:${applicationScope.key};
过滤器Filter
Filter 的实现
1、实现自定义的 Filter 需要满足一下条件:
实现 javax.servlet.Filter 接口,实现其 init、doFilter、destroy 三个方法。
实现在web.xml中的配置。
javax.servlet.Filter 接口
Filter 接口有三个方法:这三个方法反应了 Filter 的生命周期。
1.init:只会在 web 程序加载的时候调用,即启动如tomcat等服务器时调用。一般负责加载配置的参数。
2.destroy :web程序卸载的时候调用。一般负责关闭某些容器等。
3.doFilter:每次客户端请求都会调用一次。Filter 的所有工作基本都集中在该方法中进行。
监听器Listener
监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。
按监听的对象划分,可以分为
- ServletContext对象监听器
- HttpSession对象监听器
- ServletRequest对象监听器
按监听的事件划分
- 对象自身的创建和销毁的监听器
- 对象中属性的创建和消除的监听器
- session中的某个对象的状态变化的监听器
示例:用监听器统计网站在线人数
原理:每当有一个访问连接到服务器时,服务器就会创建一个session来管理会话。那么我们就可以通过统计session的数量来获得当前在线人数。
文件的上传下载
国际化
在 Java 中实现国际化主要是借助一个工具类 ResourceBundle ,核心的思想就是 ,对不同的语言环境提供一个不同的资源文件 。所以说先来看看资源文件怎么定义的 。
这里需要注意的是 ,资源文件通常采用键值对的形式 ,并且资源文件中采用的是 properties 格式文件 ,所以文件中的所有字符都必须是 ascll 码 ,不能保存为中文的 ,Java 中提供 了 native2ascll 工具用于将中文转化为 ascll 码 。所以在编写 properties 文件的时候写的是中文 ,一回车就自动被编码了 。