Servlet
- Serlvet
- 创建一个Serlvet接口的实现类
Public class HellowServlet implements Servlet
- 在web.xml文件中配置和映射这个Servlet
<!-- 配置和映射Serlvet -->
<servlet>
//servlet 注册的名字
<servlet-name>HelloServlet</servlet-name>
//servlet的全类名
<servlet-class>firstWeb.HelloServlet</servlet-class>
//指定servlet被创建的时机
<servlet-on-stratup>1</servlet-on-stratup>
</servlet>
<servlet-mapping》
<servlet-name>HelloServlet</servlet-name>
//代表当前web应用的根目录
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- Servlet容器:运行servlet、jsp、filter、等的软件环境
- 可以来创建Servlet,并调用servlet的相关生命周期方法
- servlet生命周期的方法
- 构造器,创建Servlet容器对象
- Init方法 :只被调用一次,在创建好实例后被调用。用于初始化当前Servlet
- Service: 被多次调用,每次请求都会调用这个方法,实际用于响应请求
- Destory:只被调用一次,在当前Servlet所在的web应用被卸载时被调用
- 关于 servlet-mapping
- 同一个servlet可以用多个servlet-mapping来映射
- 在servlet映射的URL中也可以使用*通配符,但是只能有两种固定的格式,一种格式事“*。扩展名”,另一种格式事以正斜杠“/”开头并以“/*”结尾
- servletConfig:封装了Servlet的配置信息,并可以获取ServletContext对象
- 配置servlet的初始值,且节点必须在load-on-startup的前面
<!-- 配置Servlet的初始参数 -->
<init-param>
<!-- 参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
- 获取初始化参数:
>getInitParameter(String name):获取指定参数名的初始化参数
>getInitParameterNames();获取参数名组成的Enumeration对象
//获得初始化参数的两种方法
String user = servletConfig.getInitParameter("user");
System.out.println("user:" + user);
Enumeration<String> names = servletConfig.getInitParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = servletConfig.getInitParameter(name);
System.out.println("--:" + name + "--:" + value);
}
- ServletContext
- 可以由ServletConfig获取
- 该对象代表Web应用:可以认为ServletContext是当前Web应用的一个大管家。可以从中获取到当前WEB应用的各个方面的信息
> 获取web应用参数
<!-- 配置当前WEb应用的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
>获取当前WEb应用的某一个文件在服务器上的绝对路径
getRealPath(String path)
>获取当前WEb应用的名称
getContextPath()
>获取当前WEb应用某一个文件对应的输入流
getResourceAsStream(String path):path的/相当于当前WEb应用的根目录
try {
ClassLoader cl = getClass().getClassLoader();
InputStream is = cl.getResourceAsStream("jdbc.properties");
System.out.println("1." + is);
} catch (Exception e) {
e.printStackTrace();
}
try {
InputStream is2 = sc.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
System.out.println("2." + is2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- get请求和Post请求
1)get请求传递参数
>在浏览器地址栏中输入某个URL地址或单机某个超链接时,一定是get请求
>如果网页中的<form>表单元素的method属性被设置成”get”时也时Get请求
>使用get请求方式给WEB服务器传递参数的格式是:http://localhost:8080/firstWeb/LoginServlet?user=213&password=321
>使用get方式传送的数据量一般限制在1KB一下
- 使用post方式传递参数
>post请求方式主要用于向WEb服务器端程序提交FROM表单中的数据,<form>表单元素的method属性被设置成”post”
>post方式将各个表格中的元素及其数据作为HTTP消息的实体内容发送给WEB服务器。传送数据量要大很多
- 如何在Servlet中获取请求信息
1)servlet 中的service()方法用于应答请求:因为每次请求都会调用这个方法
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
}
ServletRequest:封装了请求信息,可以从中获取任何请求信息
ServletResponse :封装了响应信息。如果想给用户什么响应,具体可以使用该接口的方法实现
这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时实现
- servletRequest:
>获取请求参数
String getParameter(String name):根据请求参数的名字,返回请求参数的值
String [] getParameterValues(String name):根据请求参数的名字,返回请求参数对应的字符串数组
Map getParameterMap();返回请求参数的键值对: key:参数名 value[]:参数对应的字符串数组
// 获取请求的信息
System.out.println("user:" + user + " " + "password: " + password);
String[] interestring = request.getParameterValues("interesting");
for (String interest : interestring) {
System.out.println("interesting:" + interest);
}
// 用Enumeration数组来获取请求的信息
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = request.getParameter(name);
System.out.println(name + ":" + value);
}
// 用Map获取请求的信息
java.util.Map<String, String[]> map = request.getParameterMap();
for (Entry<String, String[]> entry : map.entrySet()) {
System.out.println("**" + entry.getKey() + ":" + Arrays.asList(entry.getValue()));
}
>获取请求的servlet的映射路径
// 获取请求的URl
String url = hsr.getRequestURI();
System.out.println(url); // /firstWeb/LoginServlet
>获取请求的方式
String method = hsr.getMethod();
System.out.println(method);
// 获取get请求的,请求参数的那个字符串,即?后的那个字符串
String msg = hsr.getQueryString(); System.out.println(msg);//user=213&password=123&interesting=reading&interesting=party&Submit=%E6%8F%90%E4%BA
3)ServletResponse:封装了响应信息,如果想给用户什么响应,具体可以使用该接口实现
<getWriter():返回PrintWriter对象,该对象调用print()方法,可以直接把数据发送到客户端浏览器上
<setContentType("application/msword"):设置响应给浏览器的文件格式
<sendRedirect(String location):请求重新定位(次方法在HTTPServletResponse中定义的)
- GenericServlet:
- 是一个Servlet。是Servlet接口和ServletConfig接口的实现类,但是是一个抽象类,其中的service方法为抽象方法
- 如果Servlet程序,直接继承GenericServlet会使开发更简洁
1