1、Servlet简介
(1)什么是Servlet?
- Servlet 是一个特殊的类,继承自HttpServlet,遵循http协议
- Servlet 在服务器上运行以处理客户端请求
- Servlet 必须要有Web容器的支持(如Tomcat)
- Servlet 必须重写 doGet 、doPost 或 service() 方法
- 里面可以输出html标记,借助Java语言,将数据库中的信息动态显示到网页中
(2)Servlet的工作原理
(3)Servlet类库
javax.servlet 和 javax.servlet.http 是创建Servlet所需要的两个必备类库。
(4)Servlet的声明周期
实例化 –> 初始化(init()) –> 服务(service())–>销毁(destroy())
Servlet是一个单实例、多线程运行方式的类
(5)请求对象和响应对象的常用方法
HttpServletRequest的常用方法
HttpServletResponse的常用方法
(6)解决论码问题
请求:request.setCharacterEncoding(“utf-8”)
响应:response.setCharactType(“text/html;charset=utf-8”);
(7)请求转发和重定向
重定向前后的资源位于两次不同的请求中
请求转发
重定向
(8)Servlet上下文
Servlet 所共有的属性和资源存储于 ServletContext 接口对象中,处理上下文属性的方法为:
2、小应用
(1)登录
register.html
<form action="register" method="post">
姓名:<input type="text" name="uname"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="注册">
</form>
RegisterAction.java
//请求的路径
@WebServlet("/register")
@SuppressWarnings("serial")
public class RegisterAction extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//无论使用何种方法,最终都是发送的post请求
//get:数据传输快,不安全,最多只能传256个字节
//post:数据传输慢,安全,数据量大
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//处理中文乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取输出对象
PrintWriter out = response.getWriter();
//获取表单中传入的参数
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
if(uname.equals("czy")&&pwd.equals("123")) {
//1.方式1
RequestDispatcher rd = request.getRequestDispatcher("main.html");
rd.forward(request,response);
//2.方式2:重定向
//response.sendRedirect("main.html");
} else {
response.sendRedirect("register.html");
}
out.close();
}
}
main.html
<h1>显示首页</h1>
(2)统计网站的访问总量
Servlet上下文:Servlet所有的属性和资源都存储于ServletContext接口对象中。
生命周期:在服务器运行期间
ask.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
ServletContext application = this.getServletContext();
Integer an = (Integer)application.getAttribute("anum");
if(an==null) {
application.setAttribute("anum", 1);
} else {
application.setAttribute("anum", an+1);
}
an = (Integer)application.getAttribute("anum");
out.print("网站访问量:" + an);
}