初识servlet
继承Servlet并且实现所有方法
- init(ServletConfig servletConfig)
初始化 servlet 并且只在初始化的时候执行一次 - service(ServletRequest servletRequest, ServletResponse servletResponse)
当应用程序运行时,每次刷新,都会执行 - destroy()
服务器关闭时执行 - web.xml的配置:
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>plus.mahua.servlet.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>demo1</url-pattern>
</servlet-mapping>
servlet 方法
-1. 两种参数设置
-
使用init里面的cogfig配置参数(这是servlet参数,局部参数):
- xml中设置参数:
String name = servletConfig.getInitParameter("name");
System.out.println("name:" + name);
Enumeration<String> enumeration = servletConfig.getInitParameterNames();
while (enumeration.hasMoreElements()){
String key = enumeration.nextElement();
String value = servletConfig.getInitParameter("key");
System.out.println(key+" = "+value);
}
- 配置 ServletContext参数(全局参数)
<context-param>
<param-name>username</param-name>
<param-value>123456</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
- 在 init 中获取
ServletContext servletContext = servletConfig.getServletContext();
String username = servletContext.getInitParameter("username");
Enumeration<String> enumeration = servletContext.getInitParameterNames();
####-2. 获取文件在web服务器的绝对路径
- 在web目录下创建一个文件 a.txt
- servletContext.getRealPath(“a.txt”) 获取
- 注意:这是服务器的绝对路径,不是自己创建的路径
####-3. 获取web服务器的容器名
String servletName = servletConfig.getServletName();
Servlet 与 http
-1.获取页面数据
- POST 与 GET 就不赘述
- 1.jsp 代码
<form method="post" action="/JavaWeb_war_exploded/servletDemo2">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
爱好:<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="乒乓球">乒乓球
<input type="checkbox" name="hobby" value="羽毛球">羽毛球
<br>
<input type="submit" value="submit">
</form>
- 2.servlet代码
//获取指定属性值
String password = servletRequest.getParameter("password");
System.out.println("password = "+password);
//获取所以属性名
Enumeration<String> hobby = servletRequest.getParameterNames();
//获取 map 键值对
Map<String, String[]> parameterMap = servletRequest.getParameterMap();
for (Map.Entry entry: parameterMap.entrySet()){
System.out.println(entry.getKey()+" = "+entry.getValue());
}
servletResponse.getWriter().println("success");
综合小案例:使用ServletContext的参数进行登录校验,成功返回 你好+username,失败返回 账号或密码错误
- ServletContext 中的属性
<context-param>
<param-name>username</param-name>
<param-value>mahua</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
- servlet 代码
ServletContext servletContext = servletRequest.getServletContext();
String myusername = servletContext.getInitParameter("username");
String mypassword = servletContext.getInitParameter("password");
String username = servletRequest.getParameter("username");
String password = servletRequest.getParameter("password");
if (password.equals(mypassword) && username.equals(myusername)){
servletResponse.getWriter().println("欢迎:"+username);
}else {
servletResponse.getWriter().println("账号或者密码错误");
}
HttpServlet:
- HttpServlet 继承 GenericServlet
GenericServlet :
- GenericServlet 实现了Servlet 的接口
- 简化 Servlet 的操作,将不用的方法去除(destroy)
HttpServlet :
- 主要将service方法重写并且强转为 HttpServlet
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException var6) {
throw new ServletException("non-HTTP request or response");
}
this.service(request, response);
}
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
long lastModified;
if (method.equals("GET")) {
lastModified = this.getLastModified(req);
if (lastModified == -1L) {
this.doGet(req, resp);
} else {
long ifModifiedSince = req.getDateHeader("If-Modified-Since");
if (ifModifiedSince < lastModified) {
this.maybeSetLastModified(resp, lastModified);
this.doGet(req, resp);
} else {
resp.setStatus(304);
}
}
} else if (method.equals("HEAD")) {
lastModified = this.getLastModified(req);
this.maybeSetLastModified(resp, lastModified);
this.doHead(req, resp);
} else if (method.equals("POST")) {
this.doPost(req, resp);
} else if (method.equals("PUT")) {
this.doPut(req, resp);
} else if (method.equals("DELETE")) {
this.doDelete(req, resp);
} else if (method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if (method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[]{method};
errMsg = MessageFormat.format(errMsg, errArgs);
resp.sendError(501, errMsg);
}
}