为什么要用MVC?JavaWeb 通过数据传递的实现

categories: JavaWeb

  1. 一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。
  2. MVC即Model(模型)、View(视图)、Controller(控制器)。写代码,如果从这个思路出发,可以把代码分为三个部分。
  3. View层是界面,Model层是业务逻辑,Controller层用来调度View层和Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。

一个注册页面

<body>
    <form>
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="submit">
    </form>
</body>

这个页面是静态的,你把这个页面放在tomcat里,确实能够访问到它,但是它的submit按钮是无效的,你点击它是没有反应的。

想把上面页面提交的数据保存到服务器文件中。

  1. 数据保存这件事,tomcat不会做,要交给servlet来做。
  2. 思路:点击页面submit按钮,能调用一个servlet。
  3. 必须得先有一个servlet,再考虑如何调用。

比如说,把下面这个servlet放在webapps/ch2/src这个目录下。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    PrintWriter out = resp.getWriter();
    out.println("<html>" + "<body>" + "Register Success!" + "</body>" + "</html>");
}
}

编译servlet,并把编译好的文件放到classes目录中

javac -classpath c:/tomcat/lib/servlet-api.jar -d WEB-INF/classes src/RegisterServlet.java

配置web.xml

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

 <servlet>
        <servlet-name>Chapter2 Servlet</servlet-name>
        <servlet-class>RegisterServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Chapter2 Servlet</servlet-name>
        <url-pattern>/register</url-pattern>
    </servlet-mapping>

</web-app>

html文件中的submit按钮要和这个servlet产生对应关联。所以html文件中要加一些代码,servlet中要加上doPost方法。

<html>
    <body>
        <form method="post" action="/ch2/register">
            username:<input type="text" name="username"><br>
            password:<input type="password" name="password"><br>
            <input type="submit" value="submit">
        </form>
    </body>
</html>


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterServlet extends HttpServlet{
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out = resp.getWriter();
        out.println("<html>" + "<body>" + "Register Success!" + "</body>" + "</html>");
    }
}

到此为止,我们的html表单点击submit按钮,可以调用servlet。能看到servlet输出的页面了。
前台页面上的数据如何传到后台的servlet中

我们要在servlet的doPost方法中,把页面填入的数据获取过来,存到文件中去。

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class RegisterServlet extends HttpServlet{
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        /*
        获取http传递过来的数据
        */
        String username = req.getParameter("username");//方法中的参数发挥作用
        String password = req.getParameter("password");

        /*
        数据存储到文件中
        */
        File txt = new File("../webapps/ch2/user.txt");
        if(!txt.exists()){
            txt.createNewFile();
        }
        FileWriter writer = new FileWriter(txt,true);
        writer.write(username + " " + password + System.getProperty("line.separator"));
        writer.close();

        /*
        生成页面
        */
        PrintWriter out = resp.getWriter();
        out.println("<html>" + "<body>" + "Register Success!" + "</body>" + "</html>");
    }
}

到此为止,前端的页面代码、后台的数据处理代码等等,都在这一个servlet中。这只是一个简单的例子,我们还能接受。如果功能多一些、页面精美一些,代码迅速增多,代码都写在一个servlet中,这个软件肯定难以维护、扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值