准备
servlet
一. 简介
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。
二.引入
1.服务器如何保存并返回一个网页?
-静态网页
-- 无论谁看其内容都一样
-- 服务器直接存储HTMl,直接返回HTML
-动态网页
-- 不同的人看到的内容有差异
-- 服务器保存一个组件,动态给每个用户动态生产网页
-- 在Java语言中这个组件就是Servlet
-- 组件:满足规范的对象
2.Servlet的特点
-- 是服务器端的组件
-- 满足sun的规范
-- 可以动态拼接资源(HTML/IMG等)
-- 术语:处理HTTP协议
三.servlet和jsp的区别与联系
1.区别
①jsp经编译后就变成了Servlet.
(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
②jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
③Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
2.联系
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑
Servlet更多的是类似于一个Controller,用来做控制。
3.总结
①不同之处在哪?
Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容
JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内容
②各自的特点
Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差
JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的
③JSP是在HTML代码里写JAVA代码,框架是HTML;而Servlet是在JAVA代码中写HTML代码,本身是个JAVA类。
四.框架
servlet框架由两个Java包组成:javax.servlet和javax.servlet.http
在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.
在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.
JSP
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头,以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
XML
XML 指可扩展标记语言。
XML 被设计用来传输和存储数据。
XML 很重要,也很容易学习。
Filter(过滤器)
一.作用
过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。
1.在请求到达Servlet/JSP之前,过滤器截获请求。
2.在响应送给客户端之前,过滤器截获响应。
多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射<filter-mapping>的顺序决定。最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息。
二.场景应用
拦截不合理的请求,过滤不应该的响应。当访问服务器资源时,把请求拦截下来,完成一些特殊功能。
1、登录验证:密码或账号不对就不让你过去;
2、权限检查:检查你有没有这个权限,没有就一边去;
3、事务管理:看看你的事务中是否有不该有的东西;
4、统一编码处理:编码必须与上头是一样的,不然就过滤;
5、敏感字符:xxx,xxxx等。
三.使用
1.在Web应用中使用过滤器需要实现javax.servlet.Filter接口,实现Filter接口中所定义的方法
2.在web.xml中部署过滤器。
public class MyFilter implements Filter {
public void init(FilterConfig fc) {
//过滤器初始化代码
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
//在这里可以对客户端请求进行检查
//沿过滤器链将请求传递到下一个过滤器。
chain.doFilter(request, response);
//在这里可以对响应进行处理
}
public void destroy( ) {
//过滤器被销毁时执行的代码
}
}
四.Filter接口
1.public void init(FilterConfig config)
web容器调用本方法,说明过滤器正被加载到web容器中去。容器只有在实例化过滤器时才会调用该方法一次。容器为这个方法传递一个FilterConfig对象,其中包含与Filter相关的配置信息
2.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
每当请求和响应经过过滤器链时,容器都要调用一次该方法。需要注意的是过滤器的一个实例可以同时服务于多个请求,特别需要注意线程同步问题,尽量不用或少用实例变量。 在过滤器的doFilter()方法实现中,任何出现在FilterChain的doFilter方法之前地方,request是可用的;在doFilter()方法之后response是可用的。
3.public void destroy()
容器调用destroy()方法指出将从服务中删除该过滤器。如果过滤器使用了其他资源,需要在这个方法中释放这些资源。
4. 关于chain.doFilter(request,response)
它的作用是将请求转发给过滤器链上下一个对象。这里的下一个指的是下一个filter,如果没有filter那就是你请求的资源。 一般filter都是一个链,web.xml 里面配置了几个就有几个。一个一个的连在一起 : request -> filter1 -> filter2 ->filter3 -> .... -> request resource
HttpServlet
一.功能
HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中,大大简化了HttpServlet解析请求数据的工作量。HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。
二、创建HttpServlet的步骤——“四部曲”
1)扩展HttpServlet抽象类;
2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;
3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。
三.方法重写
1.getParameter与getAttribute两者的区别
①request.setAttribute("xiaoxi", "欢迎用户"+name);//向request域中放置信息 ( 键值对的形式) 名字为xiaoxi 内容为"欢迎用户"+name
②request.getAttribute("xiaoxi");//得到request域中放置名字为xiaoxi的信息
③request.getParameter("name");//得到request域的参数信息(得到jsp页面传过来的参数)
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 。
getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型
2.转发与重定向的区别
①重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。
②重定向是在客户端发挥作用,通过新的地址实现页面转向。
③重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
④转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据。
⑤转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。
⑥转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。
步骤
一.项目配置
一定要将Tomcat导入工件!!!
一. 在filter下新建一个EncodingFilter用来解决中文字符集乱码
二. 到web.xml下进行对EncodingFilter相应的配置
三. 在connect下新建一个DBconn类用来处理对数据库的连接操作
四.数据库连接完成后开始项目代码的书写,基本流程:
1.创建实体类
2.创建与数据库相关的操作:增删改查
3.创建具体功能,例如登录注册查看等(都是建立在数据库操作的技术上的)
4.创建servlet以实现从某个页面接参,调用具体功能处理参数,将处理完的参数放入数据库或转发到其他需要这个数据的页面
知识点
一. @Override
是伪代码,表示重写。(当然不写@Override也可以),不过写上有如下好处:
①可以当注释用,方便阅读;
②编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
二.throw Exception
在调用别人的程序方法,且别人的方法上声明了可能有异常时,调用的地方须有两种处理方式中的一种(不然会提示语法错误):
①也做异常声明-- throw Exception,对异常不处理,收到异常我也向外抛
此时如果没有别的地方接收这个异常,那么异常被jvm接收,然后调用jvm默认的异常处理机制,中止程序
②对异常进行 try—catch 预处理
三.printStackTrace()
在命令行打印异常信息在程序中出错的位置及原因