MVC之简单控制器实现与原理

内容:
1 搭建 Java Web 开发环境(Eclipse, JDK, Tomcat)
2 新 建 Java Web 工 程 SimpleController , 新 建 HttpServlet 子 类LoginController,使用 RequestDispatcher 实现登录控制器功能如下:
2.1 该控制器能够接受 Http Request 登录请求(请求中携带登录数据用户名、密码)
2.2 该控制器能够将登录请求分发至模型 UserBean,UserBean 完成登录业务处理
2.3 该控制器能够将 UserBean 业务处理结果定向到结果视图;如果登录成功视图定向至 login_success.jsp/html;如果失败,视图定向至login_fail.jsp/html

环境:macos sierra 10.12
IDE:eclipse neon javaee

  1. 首先创建Dynamic web project,命名SimpleController

  2. 服务器选tomcat9.0 定位到安装路径,servlet选3.1
    这里写图片描述

  3. 在工程的webcontent文件夹下创建jsp文件,编写起始页面login.jsp:
    这里写图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index</title>
</head>
<body>
    <form action="login"  
    method="post">  <!-- 选择要调用login这个servlet,选择http的post方法 -->
        用户名:<input type="text" name="username" /><br>  
        <br> 密码:<input type="password" name="password" /><br>  
        <br> <input type="submit" value="login" />  
    </form>
</body>
</html>

前面几行是一些定义,系统自动生成。
功能:将用户输入的用户名存为username,输入的密码存为password,按钮功能为将表单数据传给action(前面指定为login),名字(按钮上的文字)为“login”
这段代码中用到html的三种输入类型:

输入类型:text input type=”text”定义供文本输入的单行输入字段

<form>
First name:<br>
<input type="text" name="firstname">
<br>
Last name:<br>
<input type="text" name="lastname">
</form>

输入类型:password input type=”password” 定义密码字段: 注释:password
字段中的字符会被做掩码处理(显示为星号或实心圆)。

<form>
User name:<br>
<input type="text" name="username">
<br>
User password:<br>
<input type="password" name="psw">
</form>

输入类型:submit input type=”submit”定义提交表单数据至表单处理程序的按钮。
表单处理程序(form-handler)通常是包含处理输入数据的脚本的服务器页面。 在表单的 action
属性中规定表单处理程序(form-handler)

<form action="action_page.php">
First name:<br>
<input type="text" name="firstname" value="Mickey">
<br>
Last name:<br>
<input type="text" name="lastname" value="Mouse">
<br><br>
<input type="submit" value="Submit">
</form>

4.写部署描述文件(deployment descriptor,DD)web.xml,放在WEB-INF文件夹:

<?xml version="1.0" encoding="UTF-8"?>
<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">           
    <welcome-file-list>  
        <welcome-file>login.jsp</welcome-file>  
    </welcome-file-list>  

    <!-- 为servlet(servlet.LoginController)制定
    一个在当前web.xml中唯一标记的别名LogicController -->
    <servlet>  
        <servlet-name>LoginController</servlet-name>  
        <servlet-class>servlet.LoginController</servlet-class>  
    </servlet>  

    <!-- 将这个别名代表的servlet,映射到公共url名(请求这个url,就调用相应servlet) -->
    <servlet-mapping>  
        <servlet-name>LoginController</servlet-name>  
        <url-pattern>/login</url-pattern>  
    </servlet-mapping>  
</web-app>

注释解释得很清楚了,开头几句是格式,照搬就行。
5.写控制器servlet。在Java Resourse文件夹创建package,命名servlet,在包中创建LoginController类:

package servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.UserBean;

public class LoginController extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void service(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  

        String userName = request.getParameter("username");  
        String passWord = request.getParameter("password");  
        UserBean userBean = new UserBean(userName, passWord);  

        if (userBean.CheckUser()) {  
            RequestDispatcher rd = request.getRequestDispatcher("login_success.jsp");  
            rd.forward(request, response);  
        } else {  
            RequestDispatcher rd = request.getRequestDispatcher("login_fail.jsp");  
            rd.forward(request, response);  
        }  
    }
}

功能:接受http请求,并转发至其他页面
service()方法,继承自HttpServlet,自动调用doGet()或doPost()。
java.lang.String getParameter(java.lang.String name)用于获取表单信息,返回为String形式。name为html或jsp页面中各种标签的name属性,此处getParameter(“username”)和getParameter(“password”)返回的就是login.jsp页面中用户输入的用户名和密码。
之后将请求分发至模型UserBean,完成登陆业务处理。用这组用户信息创建一个用户类UserBean,调用类方法CheckUser(),若check通过则调用RequestDispatcher getRequestDispatcher(java.lang.String path),path指定了分发的资源路径,RequestDispatcher封装了这个资源。此处用request.getRequestDispatcher(“login_success.jsp”);分发至登陆成功界面。用
request.getRequestDispatcher(“login_fail.jsp”);分发至登陆失败界面。

6.写用户类,和上一步一样,创建bean package,在bean包中创建UserBean类:

package bean;

public class UserBean {

    private static final String NAME = "hello";  
    private static final String PASSWORD = "j2ee";  

    private String name;  
    private String password;  

    public UserBean(String name, String password) {  
        this.name = name;  
        this.password = password;  
    }  

    public String getName() {  
        return name;  
    }  

    public void setName(String name) {  
        this.name = name;  
    }  

    public String getPassword() {  
        return password;  
    }  

    public void setPassword(String password) {  
        this.password = password;  
    }  

    public boolean CheckUser() {  
        if (name.equals(NAME) && password.equals(PASSWORD)) {  
            return true;  
        }  
        return false;  
    }
}

7.写登陆成功,登陆失败界面,放在webcontent

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <p>登录成功!</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <p>登录失败!</p>
</body>
</html>

8.右键run on server,然后在浏览器输入http://localhost:8080/SimpleController/login.jsp即可看到
这里写图片描述

9.打包
File—-Export—-选择Web下的WAR file,一路默认即可

10.运行
将生成的SimpleController放到tomcat的webapps目录下,在终端中启动tomcat,访问http://localhost:8080/SimpleController/login.jsp即可看到同样结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值