前端页面的使用步骤
开发流程:
创建表
创建项目
标准的JavaWeb项目,根(webapp)/WEB-INF(不能通过浏览器直接访问)/classes(存放项目编译之后的文件)/lib(第三方的jar包)/web.xml(对当前项目做配置)
部署项目
把项目交给Tomcat服务器管理
创建实体类
注意属性和表中字段的映射
完成持久层的开发
MyBatis: 配置(主配置文件 / 映射文件----编写sql)
完成业务层的开发
完成表现层的开发
请求分发
封装参数
共享数据
页面跳转
取值显示
登录的流程:
代码示例
LoginServlet
EmployeeServiceImpl
EmployeeDAOImpl
EmployeeMapper
用户注销代码示例
jsp页面设计
servlet
为了提升用户体验,在用户登录的时候可以选择记住账号信息,在指定之间范围内可以不用再重新填写账户信息,所以选择使用Cookie来实现。
jsp页面设计
Servlet
文件上传:将用户本地磁盘中的文件保存到服务器中的磁盘上
实现步骤
创建一个表单
method:必须为post,get方式对请求参数有大小的限制(4KB左右)
enctype:表单中数据的编码方式
application/x-www-form-urlencoded:默认值,使用urlencode对数据做编码在提交到服务器
multipart/form-data:数据不做任何的编码处理,以二进制进行传输,文件上传必须使用
在表单中添加文件上传控件
在服务器端接收数据共享数据
在服务端可以直接获取到一个输入流的数据
使用的步骤
导jar包
commons-fileupload-1.2.2.jar commons-io-1.4.jar
实现
参考:commons-fileupload-1.2.2/site/using.html文件完成文件上传。意识:如果是第一个使用工具,建议直接拷贝实例代码,保证第一个程序成功的执行
解析请求
在上传组件中,将每个表单元素的数据封装在一个个的FileItem对象中
从FileItem对象中获取到对应的数据
如果用户的文件名称相同,那么后面的文件会将前面的覆盖
**解决方案:**在保存到磁盘之前,我们将文件名称重新命名(使用UUID来生成一个随机的文件名称),保证保存在服务器的文件名称不重复
用户必须传指定类型的文件,如果没有按照要求上传,将对应的错误信息告知用户
在上传文件的时候,如果文件过大,会造成服务器的压力。
如果上传文件大于文件大小的约束会报出异常
我们只需要把对应类型的异常捕获。共享错误信息,跳转到表单所在的页面,把错误信息给用户。
文件下载:将服务器中的资源下载保存到客户机中
实现步骤:
将资源存放在服务器的磁盘中
在页面中提供下载的超链接供用户来下载
上面下载功能已经实现,但是文件放在WEB-INF外面,文件不安全,用户只需要拿到下载的超链接都能够下载但是在实际开发中,我们的文件通常需要用户有一定的权限才能下载所以,文件应该放在WEB-INF下。
处理中文件名称的问题
IE:URLEncoder.encode(fileName, “utf-8”)
非 IE:new String (fileName.getBytes(“utf-8”), “iso-8859-1”);
是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。
如果用户看不清验证码的图片,我们可以提供一个点击图片,切换图片的功能,用js实现
为图片绑定一个点击事件
在点击之后,执行修改图片的src属性值的操作
在路径后面加一个new Date().getTime():JS代码获取时间戳,原因:浏览器的缓存,浏览器会将get方式请求的结果缓存到本地磁盘中,在后面如果再请求相同的资源的时候,就不再发送新的请求,而是直接使用缓存中的结果,所以要欺骗浏览器,我们请求的资源不是同一个资源(实际是同一个)。
Filter 技术是servlet 2.3 [1] 新增加的功能。
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。
Filter和 servlet一样也是一个Web组件,所以开发流程和Servlet一致,开发步骤:
定义类,实现javax.servlet.Filter接口
覆写其中的3个方法
将Filter交给Tomcat来管理(xml/注解)
<filter>
<filter-name>filter-name>
<filter-class>filter-class>
filter>
<filter-mapping>
<filter-name>filter-name>
<url-pattern>url-pattern>
filter-mapping>
Servlet中的url-pattern的作用:为当前Servlet起一个资源名称,外界通过该名字找到对应的Servlet对象而Filter中的url-pattern的作用: 指定对哪些资源做过滤
Filter从创建到销毁的整个过程
对象的创建
在启动服务器的时候创建所有的Filter对象
init方法的执行
在启动服务器的时候调用Filter对象中的init方法
doFilter方法的执行
每次请求对应的资源的时候都会执行
destroy方法的执行
正常关闭服务器的时候,执行销毁操作,非正常关闭不会执行
执行顺序:创建对象(一次)—>init方法(一次)—>doFilter方法(多次)—>destroy方法(一次/0)
多个过滤器按照一定的顺序,排列起来。在开发中可以有多个Filter,这多个Filter组合在一起都形成一个Filter链。
程序中,存在多个过滤器的时候,过滤器的先后执行顺序由在web.xml中:配置的的先后顺序来决定。注解配置时则是由Filter的名称的字母来决定先后顺序。
web中的监听器就是对类事物的行为做监听,如果用户触发了这些事件,那么会立即执行相应的操作。web中是对作用域和作用域属性值的监听。
作用域:
ServletRequestListener:request
HttpSessionListener:session
ServletContextListener:application
作用域属性:
ServletRequestAttributeListener
HttpSessionAttributeListener
ServletContextAttributeListener
开发监听器的步骤: