1.Servlet
3.1 什么是Servlet
Servlet是java Web开发的基石,与平台无关的服务组件,他是运行在Servlet容器/Web应用服务器/Tomcat上,他是负责与客户端进行
通信,可以处理客户端的请求 并且做出相应 主要体现在service方法
3.2 servlet的功能:
1. 创建并返回基于客户请求的动态html页面
2. 与数据库进行通信
3.3 如何使用servlet?
1.servlet本身是一组接口 存放在javax.servlet, javax代表后来扩展的,我们需要自定义一个类,并且实现servlet接口 这个类就具备了接受客户端的请求以及做出相应的功能
2.out文件是打包java程序生成的 但是无法访问其中的servlet文件
3.此时需要用到映射才能访问到java文件(myServlet类)
3.4 映射有俩种方式
- 3.4.1 基于XML方式配置 具体操作如下图
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.southwind.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/demo2</url-pattern>
</servlet-mapping>
- 3.4.2 基于注解的方式(推荐)
@WebServlet("/demo2")
public class HelloServlet implements Servlet{
}
3.4.Servlet的生命周期
1.当浏览器访问Servlet的时候,Tomcat会查询当前Serelet的实例化是否存在 如果不存在 则通过反射机制
动态创建对象并且只创建一次 相当于单例
,如果存在对象,直接执行第3步。
2.调用init方法完成初始化操作
3.调用service方法完成业务逻辑操作 调用n次
4.关闭Tomcat是 会调用destory
方法 释放资源 也只调用一次 卸载对象
1.servletConfig也是一个接口 该接口是用来描述Servlet的基本信息的.(局部的)
2.一个Servlet对应一个servletConfig 一个java程序对应一个ServletContext.(全局的)
1. servletConfig.getServletName() 返回Servlet的名称 全类名(带有包名的类名)
2. servletConfig.getInitParameter(String key) 获取init参数的值(web.xml文件里面配置的值);
3. ServletContext = servletConfig.getServletContext;//上下文,是整个Servlet的管理者
ServletContext.getContextPath();//当前程序的在Tomcat的路径
3.5.Servlet的层级
servlet --->GenericServlet--->HtttpServlet
servlet
:不区分请求方式
GenericServlet
实现了servlet接口 同事他的子类屏蔽了不常用的方法 子类只需要重写service方法即可
HtttpServlet
区分请求方式 继承GenericServlet 根据请求类型进行分发的 继承HtttpServlet只需要实现getpost俩个方法即可
HTTP请求类型有很多种
GET 读取
POST 保存
PUT 修改
DELETE 删除
2.JSP
1.本质
JSP就是一个Servlet
JSP主要负责与用户进行交互的 将最终的界面呈现给用户 html+js+css+java的混合文件。
1.Servlet一般负责与客户端做通信 当客户端发送请求请求一个.jsp的时候, tomcat会将该请求交给JSP引擎处理, 每一个JSP页面被访问的时候,JSP引擎会把.jsp文件生成一个servler文件 再由Web容器来调用servlet就可以了
2.JSP文件转变成reponse.getWriter().write("<!DOCATYPE html>")这种类型的代码交给客户端识别,
2.reponse.getWriter().write("<!DOCATYPE html>")这种方式就是Servlet返回客户端的信息的方式
JSP表达式:把java对象直接输出到HTML页面中
<%!
申明 Java 方法
%>
<%=Java变量%>
<%!
public String test(){
return "Hello world";
}
%>
<%
String str = test();
%>
<%=str%>
2.JSP内置对象(9个)
1.request
表示一次请求 HttpServletRequest
2.response
表示一次响应 HttpServletReponse
3.pagecontext
页面上下文 可以获取页面信息 Pagecontent
4.session
表示一次会话,客户端访问服务端整个过程叫做一次会话,用来保存用户信息 HttpSession
5.application
表示当前Web应用 全局对象 保存所有用户的共享信息 ServletContext
6.config
当前JSP对应的Servlet的servletConfig对象 获取当前servlet的信息
7.out
向浏览器输出数据 jspWritter
8.page
当前JSP对应的servlet对象 Servlet
9.exception
表示JSP页面发生的异常 Exception
2.1为啥内置对象
可以在.jsp文件里面被调用
主要因为.jsp里面的内容会被映射到servlet的service方法 ,service方法里面创建了这个9个对象 所以在.jsp里面调内置对象来自于servlet的service方法里。
2.2request常用方法
1.String getParaneter(String key) 获取客户端传来的参数
2.void setAttribute(String key,Object value) 通过键值对保存数据 其实也是保存在request的Attribute里 用于服务端不同servlet之间的传递 需要用到请求转发 会把request转发出去
3.Object getAttribute(String key) 通过key取出value
4.RequestDispacher getRequestDispachher(String path) 返回对象的forward的方法用于请求转发
5.getParameterValues(“name”) 获取多个同名参数数组 针对这种接口 http://localhost:80?name = ddd&name = erw & name = dsdsa
6.void setCharacterEncoding(String code) 指定每个请求的编码
404 找不到资源
400 请求类型不匹配
500 java程序抛出异常
2.3reponse常用方法
sendRedirect(String path)重定向 页面之间的跳转
转发和重定向的区别
转发是将同一个请求传给下一个页面 重定向是创建一个新的请求传给下一个页面
request.setAttribute("name","qihongwang");
//请求转发 地址栏不变 页面变化
request.getRequestDispatcher("target.jsp").forward(request,response);
//重定向 地址栏会发生改变 页面变化
response.sendRedirect("target.jsp");
页面传值必须用到转发 不能用重定向
//如图模拟登录逻辑页面



//不能调用super方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);此处不能调用 不然会报错
req.setAttribute("username","username");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
//源码
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String protocol = req.getProtocol();
String msg = lStrings.getString("http.method_post_not_supported");
if (protocol.endsWith("1.1")) {
resp.sendError(405, msg);
} else {
resp.sendError(400, msg);
}
}
3.内置对象的作用域
- page作用域对应的内置对象是pageContext
- request作用对应的内置对象是request
- session作用域对应的内置对象是session
- application作用域对应的内置对象是application
这四个对象都有setAttribute();
page<request<session<application
1.page作用域只在当前页面有效 也就是在当前jsp里有效
2.request作用域在一次请求内有效 所以必须保证是同一个request
3.session作用域在一次会话内有效 一次会话可以包含多个请求
4.application作用域对应整个web应用 只要服务端不重启保存的值一直存在
网友评论