单词
●Request —请求
●Response —响应、回应
●Config —配置
●Context —上下文,环境
●Attribute —属性
●Encoding —字符编码
●Parameter —参数
●Dispatcher —分派员、调度员
Servlet简介
什么是Servlet
什么是Servlet
Servlet是在服务器.上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。
●Servlet是Java语言提供的用于开发动态网站的编程技术,厲于JavaEE的组成部分
●Servlet是用于开发服务器端程序的Java技术,该技术可以用于处理用户请求,为用户返回动态网站内容,Servlet程序由Web服务器负责加载执行,是独立于平台与协议的Java动态网站开发技术。
●Servlet是JavaEE规范的一部分
狭义上讲Servlet仅仅用于指代javax. servlet. Servlet接口或者它的子类型,如javax. servlet. http. HttpServlet等。
广义上讲Servlet不仅仅包含Servlet接口和它的子类型,也包含了Servlet规范中所有的接口API,如ServletRequest、 ServletResponse接口等。
●Servlet接口
Servlet接口定义在javax. servlet包下,该接口定义三个核心抽象方法:
void init(ServletConfig config) ---Servlet对象创建时调用该方法进行初始化。
void service (ServletRequest req ,ServletResponse resp) ---用于处理用户请求。
void destroy() ---Servlet对象被销毁时调用该方法执行销毁前操作。
HttpServlet
HttpServlet
●该抽象类定义在javax. servlet. http包下
●Servlet API提供该抽象类的目的是: 便于开发人员能够快速开发适用于HTTP协议、处理HTTP请求的自定义Servlet。
●一般情况下,如果开发时自定义Servlet被用来处理HTTP请求, 那么建议让自定义Servlet继承HttpServlet类。
●HttpServlet类实现了Servlet接口
-java. lang.Object
–javax. serMet GenericSerlet
—javax. serMlet.http. HttpSerMet
HttpServlet为提供七个核心方法用于处理不同方式的HTTP请求
常用的有4个,POST(增加)、DELETE(删除)、PUT(修改)、GET(查询)。
总结
Servlet接口:
- init() :初始化servlet对象
- destroy():用于销毁servlet对象
- web服务器负责创建和销毁servlet对象用的。
- service(ServletReqeust req, ServletResponse res):处理用户请求和响应服务器的。
HttpServlet类:
- 抽象类:实现了Servlet接口
- 主要用于处理用户发送的请求,响应服务器端对客户端的数据发送。
- 提供七个核心方法用于处理不同方式的HTTP请求:
Get()
Post()
delete()
put()
header()
trace()
options()
第一个Servlet程序
Servlet页面中文乱码问题
第一个Servlet程序
创建Servlet程序有两个方法:
一、
采用注解的方法:
- 一般情况下处理HTTP请求的自定义Servlet都继承HttpServlet类,重写对应的doXxx()方法即可,一般只重写doGet和doPost方法
目录:
创建动态的Web项目:
- 创建一个动态的Web项目
勾选web.xml配置文件选项
- 在src中创建servlet
这里添加了Get和Post
/**
* 自定义Servlet类
*/
@WebServlet("/hello.do") // 这是自定义servlet的注解:指定该自定义servlet的URL路径
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 构造器
*/
public HelloServlet() {
super();
}
/**
* doGet方法,用于接收用户发送的get请求:<from method="get"> 默认是get请求
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* doPost方法,用户接受用户发送的post请求:<from method="post">
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- 将servlet添加到Tomcat服务器中运行或直接在eclipse中右键类运行
运行成功
这里打印的就是doGet方法的字段也可以自己添加自己想要输入的字段
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath()).append("java");
}
如果要添加中文需添加:setCharacterEncoding(“UTF-8”);
二、
采用web.xml配置文件的方法:
servlet需要在web.xml中配置servlet,注意的是配置servlet和@WebServlet()注解是冲突的,两者不能共存。
步骤在以上的基础上添加
在web.xml中添加如下配置:
<servlet>
<!-- 类名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 类所在的路径 -->
<servlet-class>com.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 类名 -->
<servlet-name>HelloServlet</servlet-name>
<!-- 访问的网址 -->
<url-pattern>/word.do</url-pattern>
</servlet-mapping>
运行流程是,输入url后服务器寻找匹配的mapping的name,然后寻找匹配的servlet的name,然后再寻找类路径执行class。
请求对象和响应对象
请求对象HttpServletRequest
HttpServletRequest的API
HttpServletRequest
主要用于处理用户的请求信息。
实例化: web服务 器替我们完成的HttpServletRequest对象的实例化操作。
它是作为doGet获取doPost方法的参数从客户传到服务器端。
- HttpServletRequest的常用方法
常用方法:
setCharacterEncoding(“UTF-8”);设置字符编码,一般放在最上方
getParameter(“username”); 获取参数的值
getContextPath() :获取项目名称
getRequestURL():获取客户请求的完整的URL路径
getRemoteAddr():获取客户端请求的IP地址
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
// 测试HttpServletRequest常用的方法
String context = request.getContextPath();// 获取项目名称
String ip = request.getRemoteAddr();// 获取访问客户端的ip地址
String host = request.getRemoteHost();// 获取客户端的主机名称
String url = request.getRequestURL().toString();// 获取完整的URL名称
String name = request.getParameter("name");// 获取用户输入的参数的值
// 通过response对象把获取到的数据打印到浏览器页面上
PrintWriter out = response.getWriter();
out.println(context);
out.println(ip);
out.println(host);
out.println(url);
out.println(name);
}
响应对象HttpServletResponse
主要用于处理服务器的响应信息。
web服务器完成了对象的实例化操作。
主要方法:
setCharacterEncoding(“UTF-8”);设 置字符编码集,放在方法的最上面。
getWriter() :返回一个PrintWriter对象。
PrintWriter out = response.getWriter();
PrintWriter对象的方法:
print():把信 息打印到页面上,不带换行。
println() :把信息打印输出到页面上。
append() : 把信息打印输出到页面上。
get和post提交方式的区别
1.get是显式提交,参数和参数值在浏览器的地址栏中能够看见,它的最大长度是256个字符。
2. post是隐式提交,参数和参数值是看不到的,提交的参数个数和长度没有限制。
request和response对象的页面跳转
- request和response对象的页面跳转:
除了在servlet里面打印页面显示信息之外,也可以直接跳转到html页面上,也可转发到指定的servlet。 - 页面跳转的方法:
- servlet的请求转发方法:
request对象的getRequestDispatcher("* .html") . forward(request,response);方法
不但可以将请求转发到指定的页面,也可以转发到指定的servlet中。
可以携带参数
2. servlet的重定向方法:
response对象的sendRedirect("*.html");方法。
servlet请求转发和重定向
用途:
1.需要指定参数的时候,使用请求转发。
2.不需要指定参数,或者直接跳转到页面的时候,使用重定向。
用户名或密码错误,直接跳转到登录页面,进行重新登录。
Servlet生命周期
●Servlet的生命周期由Servlet容器(JavaWeb服务器)控制
打开浏览器输入http请求—Web容器(tomcat)收到并解析找到对应的Servlet—Servlet实例化—调用对应的方法doGet或doPost进行对请求的处理(比如判断用户名或密码是否正确)—将处理的结果Web容器(tomcat)响应到客户端
-
Servlet生命周期的各个阶段
Servlet生命周期的各个阶段,不同阶段Servlet容器会调用Servlet对象的不同方法.
实例化—Servlet容器创建Servlet的实例
初始化—该容器调用init()方法
服务—如果请求Servlet,则容器调用service()方法(doGet和doPost也是service()方法的二次封装)
销毁—销毁实例(关闭服务器)之前调用destroy()方法
ServletContext对象(应用上下文)
-
运行在JavaWeb服务器上的每一个web应用程序都有一个与之对应的Servlet上下文(Servlet运行环境),这个Servlet上下文通过
javax.servlet.ServletContext来表示 -
JavaWeb服务器提供商提供了对ServletContext接口的实现
-
JavaWeb服务器启动时,它会分别为每一个发布在当前服务器上web应用程序创建一个对应的ServletContext对象
-
ServletContext对象中包含它所关联的web应用程序的根路径
-
因为每一个JavaWeb应用程序在运行时都会有一个唯一与之关联的ServletContext对象,那么在开发时,某个JavaWeb应用程序中所有Servlet和JSP共享的信息可以放置在这个web应用程序对应的ServletContext对象中,如当前Web应用程序在线访问人数。
-
获取当前web应用程序所关联ServletContext对象的方式:
通过Servlet对象(this)的getServletContext()方法:
通过请求对象(this)的getServletContext()方法
通过ServletContext对象的getContext (Stringuri)方法获取其他web应用程序所关联的ServletContext对象
ServletContext中常用方法的使用
RUI和RUL是区别
方法名 | 方法描述 |
---|---|
void setAttribute(String name,Obiectobi) | 设置共享属性 |
Object getAttribute(String name) | 读取共享属性 |
void remove Attribute(String name) | 移除共享属性 |
ServletContext getContext(String uri) | 获取指定uri的上下文对象 |
String getContextPath() | 返回web程序的上下文路径 |
String getlnitParameter(String param) | 获取上下文初始化参数 |
String getRealPath(String path) | 返回资源在服务器上的真实路径 |
ReauestDispatcher getRequestDispatcher(Stringpath) | 返回一个包装了路径信息的Dispatcher对象 |