package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//需要继承HttpServlet类
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我是doGet方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("我是doPost方法");
}
}
- 在web.xml中进行虚拟路径配置
<!--
给LoginServlet类配置一个对象访问的虚拟路径,一个servlet标签对应一个类
-->
<servlet>
<!-- 给类配置别名,方便使用,一般配置为类的名称 -->
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.alan.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<!-- 配置对外访问虚拟路径,就是/LoginServlet -->
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
servlet路径问题
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 路径对应http://localhost:8080/ServletProj/LoginServlet -->
<%
String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()
+request.getServletContext().getContextPath()+"/";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<form align="center"
action="<%=basePath %>LoginServlet" method="post">
<p>
用户名:<input type="text" name="username">
</p>
<p>
密码:<input type="password" name="password">
</p>
<p>
<input type="submit" value="登陆"> <input type="reset"
value="重置">
</p>
</form>
</body>
</html>
Servlet生命周期
-
Servlet生命周期分为三个阶段
1、初始化阶段调用init() 方法
2、响应客户请求阶段调用service()方法
3、终止阶段调用destroy()方法 -
案例
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//下述配置方式等同于在web.xml中配置
@WebServlet("/LifeServlet")
public class LifeServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet的init()方法");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet被请求了");
}
@Override
public void destroy() {
System.out.println("Servlet被销毁了");
}
}
![](https://img.haomeiwen.com/i7560768/6ea0e52ec6e407dc.png)
Servlet请求与响应
- 案例
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//需要继承HttpServlet类
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取表单提交过来的数据,先设置编码格式。只对post方式有效
request.setCharacterEncoding("utf-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:" + name);
System.out.println("password:" + password);
}
// 使用doPost()方法时,也调用doGet()方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
ServletContext与ServletConfig
- ServletDemo1类
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ServletContext对象:表示整个JavaWeb工程
* ServletConfig对象:表示某一个Servlet类的配置文件
* @author alan
*
*/
@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取整个web工程对象
//context对象是一个域对象,可以往某一个域对象中存放数据,并且还可以取出存放的数据
ServletContext context = this.getServletContext();
//往context域对象中存放数据
context.setAttribute("username","张三");
//取出context域中的存放数据
Object result = context.getAttribute("username");
//打印取出的结果
System.out.println(result);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- ServletDemo2类
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ServletDemo2")
public class ServletDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object resutl = this.getServletContext().getAttribute("username");
System.out.println(resutl);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
- ServletDemo3类
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//虚拟路径在web.xml中配置,ServletConfig
public class ServletDemo3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//首先获取ServletConfig对象
String result = this.getServletConfig().getInitParameter("encoding");
System.out.println(result);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- web.xml更新
<servlet>
<servlet-name>ServletDemo3</servlet-name>
<servlet-class>com.alan.servlet.ServletDemo3</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo3</servlet-name>
<url-pattern>/ServletDemo3</url-pattern>
</servlet-mapping>
转发与重定向的区别
- 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
- 转发时浏览器中的url地址不会发生改变,重定向时浏览器中的url地址会发生改变
- 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
- 案例
package com.alan.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//需要继承HttpServlet类
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取表单提交过来的数据,先设置编码格式。只对post方式有效
request.setCharacterEncoding("utf-8");
String name = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:" + name);
System.out.println("password:" + password);
//1、通过转发实现跳转
if(name.equals("admin")&&password.equals("123")) {
request.getRequestDispatcher("/success.jsp").forward(request, response);
}else {
//request.getRequestDispatcher("/fail.jsp").forward(request, response);
//2、通过重定向实现跳转,重定向需要写工程名字
//注意url也放生变化,最后为fail.jsp
response.sendRedirect("/ServletProj/fail.jsp");
}
}
// 使用doPost()方法时,也调用doGet()方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
网友评论