categories: JavaWeb
- 一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。
- MVC即Model(模型)、View(视图)、Controller(控制器)。写代码,如果从这个思路出发,可以把代码分为三个部分。
- 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按钮是无效的,你点击它是没有反应的。
想把上面页面提交的数据保存到服务器文件中。
- 数据保存这件事,tomcat不会做,要交给servlet来做。
- 思路:点击页面submit按钮,能调用一个servlet。
- 必须得先有一个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中,这个软件肯定难以维护、扩展。