<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置servlet的别名,同时在servlet-class配置项中添加servlet类的完全限定名 包名+类名-->
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.hailu.MyServlet</servlet-class>
</servlet>
<!--配置servlet跟请求的映射关系-->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>second</servlet-name>
<servlet-class>com.hailu.MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>second</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.hailu.ServletLife</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>life</servlet-name>
<url-pattern>/life</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MethodServlet</servlet-name>
<servlet-class>com.hailu.MethodServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MethodServlet</servlet-name>
<url-pattern>/method</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>request</servlet-name>
<servlet-class>com.hailu.RequestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>request</servlet-name>
<url-pattern>/request</url-pattern>
</servlet-mapping>
</web-app>
package com.hailu;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Servlet类中可以有service方法,
* 用来接受get或者post请求
* 如果service和doGet或者doPost同时存在,那么默认会调用service方法
* 如果同时又server,doGet和doPost方法,在service方法的实现中调用了super.service()会根据请求的方式跳转到doGet或者doPost
* doget方法:
* 用来接受get请求
* doPost方法:
* 用来接受post请求
*
* 总结:
* 在编写servlet类的时候,不需要重新实现service方法,只需要重写doGet和doPost方法即可,用来接受post或者get请求
*
*/
public class MethodServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是post");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(10/0);
System.out.println("我是get");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我是service");
super.service(req, resp);
}
}
package com.hailu;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/**
* HttpServletRequest用来存放客户端请求的参数
* 请求行
* 请求头
* 请求体
*
*
*/
public class RequestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post请求");
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get请求");
//获取请求行数据
//获取请求中的请求方式
String method = request.getMethod();
System.out.println(method);
//获取请求的完整地址
StringBuffer url = request.getRequestURL();
System.out.println(url);
//获取请求中的资源路径
String uri = request.getRequestURI();
System.out.println(uri);
//获取请求中的协议
String schema = request.getScheme();
System.out.println(schema);
//获取请求头数据
//根据key获取value的值
String userAgent = request.getHeader("User-Agent");
System.out.println(userAgent);
//获取请求头信息中的所有key的枚举对象
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
String key = headerNames.nextElement();
String value = request.getHeader(key);
// System.out.println(headerNames.nextElement());
System.out.println(key+":"+value);
}
//获取用户请求数据
//无论请求方式是post还是get,获取用户数据的方式不变
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String fav = request.getParameter("fav");
System.out.println(name+":"+pwd+":"+fav);
//获取用户数据中的所有key
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
System.out.println(parameterNames.nextElement());
}
//获取相同key的多个数据值,例如checkbox
String[] parameterValues = request.getParameterValues("fav");
for (String str:parameterValues) {
System.out.println("fav:"+str);
}
//其他常用方法
//获取远程客户端的地址
String remoteAddress = request.getRemoteAddr();
//获取远程客户端的主机名称
String remoteHost = request.getRemoteHost();
//获取远程客户端的端口号
int remotePort = request.getRemotePort();
System.out.println(remoteAddress+":"+remoteHost+":"+remotePort);
String localAddr = request.getLocalAddr();
String localName = request.getLocalName();
System.out.println(localAddr+":"+localName);
}
}
package com.hailu;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
*
* response:表示服务端返回数据的响应对象
* 响应头:
* 响应行:
* 响应体:
*
*
*
*/
public class ResponseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("this is post");
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("this is get");
//设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,会把value的值覆盖
response.setHeader("hehe","haha");
response.setHeader("hehe","heihei");
//设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,不会覆盖值
response.addHeader("beijing","shanghai");
response.addHeader("beijing","guangzhou");
//服务端返回的对象数据要按照一定的格式要求进行渲染,只有是html格式才会识别标签
// response.setHeader("Content-Type","text/html");
response.setHeader("Content-Type","text/plain");
// response.setContentType("text/html");
//设置响应状态码
// response.sendError(404,"not found");
response.getWriter().write("<b>java is easy</b>");
}
}
package com.hailu;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "ServletLife")
public class ServletLife extends HttpServlet {
/**
* 完成servlet对象的初始化工作
* 在servlet接受到第一次请求的时候创建对象
* 生命周期:从第一次接受请求开始到服务器关系之后销毁
* 当在web.xml文件中配置了<load-on-startup>1</load-on-startup>,在开启tomcat的时候就会创建servlet对象,中间的数值表示优先级的意思
* @throws ServletException
*/
@Override
public void init() throws ServletException {
System.out.println("init");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("servlet life");
System.out.println("learn servlet life");
System.out.println(req.getParameter("name"));
}
@Override
public void destroy() {
System.out.println("我被销毁了");
}
}
package com.hailu;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 处理乱码问题的方式
* 1、get请求
* 1、获取字符串之后使用new String(name.getBytes("iso-8859-1"),"utf-8")
* 2、设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI=true的属性
* 3、在server.xml中添加URIEncoding="utf-8"
* 2、post请求
* 1、request.setCharacterEncoing("utf-8")
* 3、response响应编码
* response.setCharacterEncoding("gbk");
*
*
*
*
*/
public class CharsetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
System.out.println("post");
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
System.out.println(name);
response.setCharacterEncoding("gbk");
response.getWriter().write("欢迎你!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
System.out.println("get");
//设置请求的编码格式
// request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
// System.out.println(new String(name.getBytes("iso-8859-1"),"utf-8"));
System.out.println(name);
}
}