您的位置:首页 > 其它

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

2016-11-30 18:26 211 查看
内容:

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

首先创建Dynamic web project,命名SimpleController

服务器选tomcat9.0 定位到安装路径,servlet选3.1



在工程的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即可看到同样结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: