MVC设计模式(JSP+JavaBean+Servlet)入门实例:用户登陆验证



MVC(JSP+JavaBean+Servlet)入门实例:用户登陆验证。

一、JSP、JavaBean、Servlet的区别
1、JSP:JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无效Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才使用Java脚本控制;JSP必须在JSP服务器内运行,JSP文件必须生成Servlet才能执行。例如一个静态的页面first.jsp,访问该页面,会在$tomcat_home\work\Catalina\localhost\webDemo\org\apache\jsp生成first_jsp.java、first_jsp.class
例子:
// first.jsp,如果为first.html,不会生成对应的Servlet
1 <html>
2 <body>
3 It is first JSP page!
4 </body>
5 </html>
2、JavaBean:如果多个jsp页面需要重复使用某段代码,我们可以把这段代码定义成Java类的方法,让后让多个jsp页面调用该方法即可,这样可以达到较好的代码复用。这就是JavaBean
3、Servlet:JSP的本质就是Servlet,开发者把编写好的JSP页面部署在Web容器中后,Web容器会将JSP编译成对应的Servlet;但直接使用Servlet的坏处是:(1)Servlet的开发效率非常低,特别是当使用Servlet生成表现层页面时,页面中所有的HTML标签,都需要采用Servlet输出流来输出,因此及其繁琐
       (2)而且Servlet是标准的Java类,必须由程序员开发修改,美工人员难以参与Servlet页面的开发
这一系列问题,阻碍了Servlet作为表现层的使用
自从MVC规范出现后,Servlet的责任开始明确下来,仅仅作为控制器使用,不再需要生成标签页签,也不再作为视图层使用
Servlet通常称为服务端的小程序,是运行在服务端的小程序,用于处理及响应客户端的请求;是个特殊的Java类,必须继承HttpServlet,提供不同的方法用于响应客户端的请求:
(1)doGet (2)doPost (3)doPut (4)doDelete;大部分时候Servlet对于所有的请求都是一样的,这时只需要重写service()方法即可响应客户端的所有请求
二、MVC(JSP+JavaBean+Servlet) 实例功能
   客户在登陆页面Login.html输入用户名和密码,提交表单,由Servlet(LoginServlet.java)(Servlet作为前端控制前,负责接收客户端发送的请求,Servlet只包含控制逻辑和简单的前端处理)调用JavaBean(Model.java)验证用户名和密码(JavaBean完成实际的逻辑处理),最后调用视图returnMessage.jsp显示(相应的JSP页面 处理显示逻辑),如果成功显示成功信息,不成功显示失败信息。
三、MVC(JSP+JavaBean+Servlet) 实例开发步骤

1、login.html

//D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\webapps\webDemo\mvc\login.html

复制代码
 1 <html>
 2 <form action="/webDemo/login.do" method="post">
 3 <div>
 4 Name<input type="text" name="name"/><br/>
 5 Password<input type="text" name="pas"/><br/>
 6 <input type="submit" value="Login"/>
 7 <input type="hidden" value="login" name="typeId"/> 
 8 </div>
 9 </form>
10 </html>
复制代码
注意:第2行,必须用全路径 /webDemo/login.do

2、LoginServlet.java

//D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\webapps\webDemo\WEB-INF\src\mvctest\LoginServlet.java

复制代码
 1 // 建立MVC中的C(control),完成JSP+Servlet+JavaBean的开发模式
 2 
 3 package mvctest;
 4 
 5 import java.io.* ;
 6 import java.util.* ;
 7 import javax.servlet.* ;
 8 import javax.servlet.http.* ;
 9 //import org.lxh.factory.* ;
10 //import org.lxh.vo.* ;
11 
12 
13 public class LoginServlet extends HttpServlet {
14     public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
15         this.doPost(request,response) ;
16     }
17     public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
18         response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
19         java.io.PrintWriter out = response.getWriter();
20            
21         String type=request.getParameter("typeId");
22         if (type.trim().equals("login")) {
23             String name=request.getParameter("name");//获取视图里的name
24             String pas=request.getParameter("pas");//获取视图里的password
25             
26             Model newModel=new Model();//调用 模型
27             newModel.setName(name);
28             newModel.setPas(pas);    
29             String message = newModel.login();
30             
31             String url="/webDemo/mvc/returnMessage.jsp?message="+message;  //如下是把结果返回给视图
32             url=new String(url.getBytes("GBK"),"ISO8859_1"); 
33             response.sendRedirect(url); 
34         }
35     }
36 };
复制代码

View Code

 

3、Model.java

//D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\webapps\webDemo\WEB-INF\src\mvctest\LoginServlet.java

复制代码
 1 /** 
 2  * 2013-11-16 
 3  * Model.java 
 4  * author:**
 5  */
 6 package mvctest;
 7 
 8 public class Model {
 9     
10     private String name=null;
11     private String pas=null;
12     
13     public void setName(String name) {
14         this.name=name;
15     }
16     
17     public String getName() {
18         return name;
19     }
20     
21     public void setPas(String pas) {
22         this.pas=pas;
23     }
24     
25     public String getPas() {
26         return pas;
27     }
28     
29     public String login() {
30         if ((name.trim().equals("admin"))&&(pas.trim().equals("1234"))) {
31             return "login successful";
32         }
33         else {
34             return "login failed";
35         }
36     }
37 }
复制代码

View Code

 

4、编译Model.java、LoginServlet.java
注意1:编译报软件包javax.servlet不存在http://liuxlyard.iteye.com/blog/582381

原因是:java编译器没有找到软件包javax.servlet,由于servlet和JSP不是Java平台Java SE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置。

 

注意2:Model.java和LoginServlet.java都在包mvctest中,且LoginServlet.java依赖Model,因此需要先编译Model.java,然后再编译LoginServlet.java

D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\web
apps\webDemo\WEB-INF\src\mvctest>javac Model.java


D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\web
apps\webDemo\WEB-INF\src>javac mvctest\LoginServlet.java  //此处必须要这样才行

5、拷贝全路径class文件到D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\webapps\webDemo\WEB-INF\classes

 

6、returnMessage.jsp

//D:\Program Files (x86)\apache-tomcat-7.0.42-windows-x64\apache-tomcat-7.0.42\webapps\webDemo\mvc\returnMessage.jsp

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" import="java.sql.*"%>
 2 <html>
 3 <head> 
 4 <title>MVC(JSP+JavaBean+Servlet)入门实例--中国网页设计</title>
 5 </head>
 6 
 7 <body>
 8 <% 
 9 String message=new String ( request.getParameter("message").getBytes("ISO8859-1"),"GBK" ); %>
10 <%=message %>
11 </body>
12 </html>
复制代码

 

7、配置Servlet

(1)编辑好的Servlet源文件不能响应用户请求,还必须将其编译成class文件,并将编译后的文件及包放到WEB-INF/classes路径下

(2)为了能让Servlet响应用户请求,还必须将Servlet配置在Web应用中,即修改web.xml

复制代码
 1     <!-- 配置Servlet的名字 -->
 2     <servlet>
 3         <servlet-name>Login</servlet-name>
 4         <servlet-class>mvctest.LoginServlet</servlet-class>
 5     </servlet>
 6     <!-- 配置Servlet的URL -->
 7     <servlet-mapping>
 8         <servlet-name>Login</servlet-name>
 9         <url-pattern>/login.do</url-pattern>
10    </servlet-mapping>
复制代码

注意第4行,需要加包名

 

四、验证

 

主要参考:http://blog.csdn.net/lyyybz/article/details/8782138#t1  //数据库的操作还未实践

http://blog.csdn.net/gxiangzi/article/details/5504519

http://zhaoyuqiang.blog.51cto.com/6328846/1154733    //数据库的操作