Servlet的生命周期
构造器 : 当第一次访问Servlet时,会被调用,且只被调用一次
init():在调用构造器之后立即就被调用,且只被调用一次
service():是受理请求的方法,可以被多次调用
destory():是销毁方法,当web应用在服务器上卸载时被调用
Servet
- Servet初始化配置
①. 2.5中需要在web.xml中进行配置
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- 注册一个Servlet到Tomcat -->
<servlet>
<!-- 注册的名字,任意起 -->
<servlet-name>hello</servlet-name>
<!-- 要注册的serlvet全限定名 -->
<servlet-class>com.neuedu.servlet.HelloServlet</servlet-class>
</servlet>
<!-- Servlet 映射 -->
<servlet-mapping>
<!-- 注册的名字-->
<servlet-name>hello</servlet-name>
<!-- hello对应的servlet的映射路径 -->
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>
load-on-startup
可以指定Servlet被创建的时机
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.neusoft.javaweb.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
在加载完Servlet后直接就创建了Servlet实例,并进行了初始化,在此期间我们并没有提出请求。
如果配置了多个Servlet, load-on-startup的值越小越先启动(包括0,负数不会被启动,还是需要发出请求才创建实例并初始化);
- 3.0 还可以简单的在Servlet中通过注释进行通配
@WebServlet(
urlPatterns="/LoginSerlet",
initParams= {
@WebInitParam(name="pasword",value="666")
}
)
或者
@WebServlet("/LoginSerlet")
Servlet映射细节
在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:
一种格式是“* .扩展名”
<servlet-mapping>
<servlet-name>AnyName</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
另一种格式是以正斜杠(/)开头并以“/ * ”结尾。
<servlet-mapping>
<servlet-name>AnyName</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
注意:既带 / 又带 * 的,又带扩展名的,是不合法的(例如:/*.do)
全局初始化参数web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<context-param>
<param-name>username</param-name>
<param-value>mike</param-value>
</context-param>
</web-app>
-
POST和GET请求
Get 请求是将请求参数拼接在请求URL路径的后面,以?隔开,以key=value的方式传递 ,多个参数xxxx?key1=value1&key2=value2...
Get 是不安全的,因为在传输过程,数据被放在请求的URL 中;Post 的 所有操作对用户来说都是不可见的;
Get 传输的数据量小,这主要是因为受URL 长度限制(1K);而Post 可以传输大量的数据,所以在上传文件只能使用Post;
- Servet中
destroy()在销毁是运行
init() 是初始化方法
service() 是运行方法 - 直接建Servet包时,他会自动继承HttpServlet类,其中重写的方法中request是处理请求的量,response是处理响应的量
- Servet中的几个方法
请求时支持中文
request.setCharacterEncoding("utf-8");
响应时支持中文
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
获取请求参数
request.getParameter();
获取全局初始化参数
getServletContext().getInitParameter();
获取当前Servlet初始化参数
getServletConfig().getInitParameter();
在页面打印,如果在print()输入HTTP语法会自动识别
response.getWriter().print();
获取复选框请求参数
String hobby[] = request.getParameterValues("hobby");
在servlet获取项目根目录
request.getContextPath();
在jsp获取项目根目录
${ pageContext.request.contextPath } -
请求转发和请求重定向
它们都能实现资源跳转
①请求转发只有一次请求,重定向有两次
②请求转发不能看见最终申请资源的URL,而重定向可以
③请求转发只能转发站内资源‘,重定向可以请求站外资源
请求转发的方法:
request.getRequestDispatcher("/login_success.jsp").forward(request, response);
不需要写根目录
请求重定向的方法
response.sendRedirect("login_success.jsp");
需要写根目录