您的位置:首页 > 其它

J2EE学习从菜鸟变大鸟之九 深入浅出理解 Servlet-----实例解析

2014-03-17 08:18 375 查看
关于Servlet的基础内容在前面已经和大家分享过了,参考J2EE学习从菜鸟变大鸟之七
Servlet,现在结合到DRP中学习,深刻的体会Servlet起到了枢纽中转的作用,控制逻辑(到MVC中更像是控制器),特别类似做BS项目时后台asp.net中的一般处理程序:前台html获取的数据把数据--->一般处理程序-->经过一般处理程序传递过来到数据库中查询---一>般处理程序--->界面,浏览器渲染后显示。

Servlet是服务器端的小程序,在BS架构下,用于处理客户端请求的响应的处理,期特点单实例,多线程的方式运行,servlet在容器中运行,其生命周期由tomcat来管理,线程是不安全的,在使用它时需要注意的是慎用成员变量(不安全的).

Servlet是在服务器端上(我现在使用的是Tomcat)

前端的Html

<html>
<head>
<title>登录</title>
</head>
<body>
<!--
<form action="http://127.0.0.1:8080/test_servlet/loginServlet">
-->
<form action="exam/loginServlet" method="post">
用户:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>

</html>


Servlet:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");

System.out.println("username=" + username);
System.out.println("password=" + password);

response.setContentType("text/html;charset=GB18030");

//response.getWriter().println("Login Success!!!");
//response.getWriter().println("登录成功!!!");
response.getWriter().println("<html>");
response.getWriter().println("<head>");
response.getWriter().println("<title>登录信息</title>");
response.getWriter().println("</head>");
response.getWriter().println("<body>");
response.getWriter().println("欢迎【" + username + "】用户登录成功!!!");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException {
doGet(request, response);
}
}


通过xml需要配置servlet

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">

<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>

</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<!--
<url-pattern>/loginServlet</url-pattern>????????
-->

<url-pattern>/exam/loginServlet</url-pattern>
</servlet-mapping>
</web-app>


在地址栏中输入地址:http://127.0.0.1:8080/test_servlet/login.html,读取到登录的页面如下图



Tomcat收到



成功登录:



整个实现的流程

整个流程:

当点击html中的submit后,则按照action对应的相对路径http://127.0.0.1:8080/test_servlet/loginServlet找到web.xml文件中<servlet-mapping>的<url-pattern>中的loginServlet,在根据<servlet-name>为loginServlet找到<servlet>中<servlet-name>为MyServlet的,然后生成一个LoginServlet的实例,再调用LoginServlet的doPost方法,在浏览器上显示结果。

结合UML图深刻理解:



总结

servlet处理逻辑既让结构清晰又易于编写代码和维护,系统更加的灵活;我们基本就是实现了对扩展开发,对修改封闭的原则。

等接触到MVC之后再来进一步深入的讨论,期待……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: