javaweb

Servlet,JSP,MVC设计模式

如何写Servlet?

新建web工程 
1.起一个web工程名 ——>2.选J2EE1.4版本

Web工程的目录结构

uploading.4e448015.gif转存失败重新上传取消

如何编写第一个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

  1. Cookie的用法:

uploading.4e448015.gif转存失败重新上传取消

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 文件的时候写的是中文 ,一回车就自动被编码了 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只晓梧桐听雨眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值