目录
cookies处理与session跟踪 都是对数据(request.getParameter("name");)进行处理(临时保存request.getParamerter("name");)
创建(为从表单中转递过来的数据创建cookies)
设置(为cookies失效时间)
添加(在response头中添加)
Servlet | Struts2 | Spring MVC |
1.简介 |
1.简介 | 1.简介 |
2.架构 | 2.架构 | 2.架构 |
3.环境设置 | 3.环境设置 | 3.环境设置 |
4.运行流程 | 4.运行流程 | 4.运行流程 |
5.入门:表单实例 配置文件: |
5.入门:表单实例 配置文件: web.xml文件 struts.xml映射文件 |
5.入门:表单实例 配置文件 web.xml文件 springmvc.xml映射文件 |
关于请求数据保存方法 | 值栈 | ModelAndMap |
6.servlet对象 | 6.Actions动作 接受表单数据 |
6.Controller控制器 接受表单数据 |
7.Servlet客户端HTTP请求 | ||
8.Servlet服务器HTTP响应 | ||
9.HTTP协议 | ||
10.Servlet网页重定向(redirect)和跳转(forward) | ||
11.Servlet编写过滤器(实现接口Filter) | 支持拦截器 |
过滤器Filter:中文问题 |
12.Servlet编写监听器 | ||
13.Servlet异常处理 | 异常处理 | 异常处理 |
14.Servlet Cookies处理 | ||
15.Servlet Session跟踪 | ||
16.Servlet数据库访问 | ||
17.Servlet 国际化 | 本地化/国际化(i18n) | 本地化/国际化(i18n) |
18.Servlet文件上传 | 文件上传 | 上传文件 |
类型转换 | SpringMVC中使用REST风格的url |
|
主题和模板 | SpringMVC与前台json数据交互,并应用ajax | |
注解 | 注解 |
Servlet容器:运行Servlet、jsp、filter等的软件环境,Tomcat服务器就是一个Servlet容器。
Servlet容器负责Servlet和客户的通信以及调用servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet、Servlet容器和Web服务器三者之间的关系:
1.介绍
Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。
2.Servlet 架构
下图显示了 Servlet 在 Web 应用程序中的位置。
3.Servlet 任务
Servlet 执行以下主要任务:
4.工作模式:
5.Servlet 包
Java Servlet 是运行在带有支持 Java Servlet 规范的解释器的 web 服务器上的 Java 类。
Servlet 可以使用 javax.servlet 和 javax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。
这些类实现 Java Servlet 和 JSP 规范。
Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。在安装 Servlet 包并把它们添加到您的计算机上的 Classpath 类路径中之后,就可以通过 JDK 的 Java 编译器或任何其他编译器来编译 Servlet。
运行在Servlet容器中。
以下方法都是由Servlet容器负责调用。
public LoginServlet(){
System.out.println("LoginServlet 构造方法 被调用");
}
Servlet 实例
Servlet 是服务 HTTP 请求并实现 javax.servlet.Servlet 接口的 Java 类。Web 应用程序开发人员通常编写 Servlet 来扩展 javax.servlet.http.HttpServlet,并实现 Servlet 接口的抽象类专门用来处理 HTTP 请求。
项目结构如图:
详细步骤:
//导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//扩展 HttpServlet 类
public class HelloWorld extends HttpServlet{
private String message;
public void init() {
//执行必须的初始化
message="hello world";
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("" + message + "
");
}
public void destroy(){
// 什么也不做
}
}
HelloWorld
test.HelloWorld
HelloWorld
/HelloWorld
上面的条目要被创建在 web.xml 文件中的
项目结构如图:
详细步骤:
//导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//扩展 HttpServlet 类
public class HelloWorld extends HttpServlet{
private String message;
public void init() {
//执行必须的初始化
message="hello world";
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
// 设置响应内容类型
response.setContentType("text/html");
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("" + message + "
");
}
public void destroy(){
// 什么也不做
}
}
HelloWorld
test.HelloWorld
HelloWorld
/HelloWorld
说明:
1.servlet容器响应客户请求的过程
2.load-on-startup参数:配置在servlet节点中
load-on-startup:可以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建,若为0或正数,则在当前web应用被Servlet容器加载时创建实例,且数字越小越早被创建。
helloServlet
<--Servlet的全类名-->
com.atguigu.HelloServlet
2
>
3.Servlet的注册与运行
4.servlet映射的细节
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public String getServletInfo();
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
public void destroy();
}
封装了Servlet的配置信息,并且可以获取ServletContext对象
1.getInitParameter(String name):获取当前servlet指定参数名的初始化信息
HelloWorld
test.HelloWorld
name
aaa
HelloWorld
/HelloWorld
//扩展 HttpServlet 类
public class HelloWorld extends HttpServlet{
ServletConfig sc;
private String message;
public void init(ServletConfig servletConfig) {
//执行必须的初始化
sc=servletConfig;
message="hello world";
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
// 设置响应内容类型
response.setContentType("text/html");
//1.获取参数信息
String name=sc.getInitParameter("name");
System.out.print(name);
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("" + message + "
");
}
public void destroy(){
// 什么也不做
}
}
2.getInitParameterNames():获取参数名组成的Enumeration对象
//扩展 HttpServlet 类
public class HelloWorld extends HttpServlet{
ServletConfig sc;
private String message;
public void init(ServletConfig servletConfig) {
//执行必须的初始化
sc=servletConfig;
message="hello world";
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
// 设置响应内容类型
response.setContentType("text/html");
//1.获取指定参数名的初始化信息
String name1=sc.getInitParameter("name");
System.out.println(name1);
//2.获取参数名组成的Enumeration对象
Enumeration names=sc.getInitParameterNames();
while(names.hasMoreElements()) {
String name2=names.nextElement();
String value=sc.getInitParameter(name2);
System.out.println("name:"+name2);
System.out.println("value:"+value);
}
// 实际的逻辑是在这里
PrintWriter out = response.getWriter();
out.println("" + message + "
");
}
public void destroy(){
// 什么也不做
}
}
3.serlvetName():获取当前运行的servlet名称 ,代码
//3.获取当前运行的Servlet名称
String servletName=sc.getServletName();
System.out.println(servletName);
1.可以由ServletConfig获取,代码
ServletContext servletContext=servletConfig.getServletContext();
2.该对象代表当前WEB应用
3.功能:
(1)获取当前WEB应用的初始化参数
配置WEB应用的初始化参数
HelloWorld
test.HelloWorld
name
aaa
driver
com.mysql.Driver.mysql
HelloWorld
/HelloWorld
方法:和ServletConfig方法一样
getInitParameter
getInitParameterNames
代码:
//1.获取ServletContent
ServletContext servletContext=sc.getServletContext();
//2.获取WEB初始化参数
String driver=context1.getInitParameter("driver");
System.out.println("driver:"+driver);
Enumeration name2=arg0.getInitParameterNames();
while(name2.hasMoreElements()) {
String name=name2.nextElement();
System.out.println("-->"+ name);
}
(2)获取当前WEB应用的名称
方法:
getContextPath()
代码:
//1.获取ServletContent
ServletContext servletContext=sc.getServletContext();
//2.ServletContext接口方法
System.out.println(servletContext.getInitParameter("driver"));
System.out.println(servletContext.getContextPath());
//打印结果
/helloServlet
(3)获取当前web应用的某个文件在服务器上的绝对目录,而不是部署前的物理路径
方法:
getRealPath(String Path)
代码:
//1.获取ServletContent
ServletContext servletContext=sc.getServletContext();
//2.ServletContext接口方法
System.out.println(servletContext.getRealPath("hello.jsp"));
//打印结果
F:\tools\eclipse\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\helloServlet\hello.jsp
(4)获取当前WEB应用的某一个文件对应的出入流
getResourceAsStream(String path):path的/为当前WEB的根目录
代码:
ServletContext context4=arg0.getServletContext();
InputStream is2=context4.getResourceAsStream("/WEB-INF/classes/jdbc.propertise");
System.out.println("2."+ is2);
(5)和attribute相关的几个方法
1.实现Servlet接口,重写Service()方法
public class Test extends HttpServlet{
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request=(HttpServletRequest) req;
response=(HttpServletResponse) res;
}catch(ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
}
}
2.继承HttpServlet抽象类,重写service()方法和对应的doXxx()方法
public class Test extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
//1.获取请求方式
String method=request.getMethod();
//2.根据请求方式调用对应的方法
if("GET".equalsIgnoreCase(method)) {
doGet(request,response);
}else if("POST".equalsIgnoreCase(method)){
doPost(request,response);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//
}
}
1.如何在Servlet中获取请求信息
Servlet的service()方法用于应答请求:因为每次请求都会调用service()方法
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
ServletRequest:封装了请求信息,可以从中获取到任何的请求信息。
ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现
这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法是传入。
ServletRequest:封装了请求信息,可以从中获取到任何的请求信息。
1.获取请求参数:
例:
//http://localhost:8080/Login/HelloForm?first_name=ZARA&last_name=ALI
request.getParameter("first_name");//ZARA
request.getParameter("last_name");//ALI
2.获取请求的方式:
//http://localhost:8080/Login/HelloForm?first_name=ZARA&last_name=ALI
String method=request.getMethod();
System.out.println(method);
打印结果为:get
3.若是一个get请求,获取请求参数对应的那个字符串,即?后的那个字符串。(网址输入框中的字符串)
//http://localhost:8080/Login/HelloForm?first_name=ZARA&last_name=ALI
代码:
HttpServletRequest httpServletRequest=(HttpServletRequest) request;
String queryString=httpServletRequest.getQueryString();
System.out.println(queryString);
打印结果 first_name=ZARA&last_name=ALI
4.获取请求的Servlet的URL、ServerName(主机名)、ServerPart(端口)、URI(映射路径)、
5.和attribute相关的几个方法
在Listener监听器会使用到request.attribute()方法。
request中getParameter和getAttribute的区别