JavaWeb复习(三)

三 创建和部署MVC Web应用

3.1 一个简单应用的组成

​ 一个简单Web应用包括html表单、servlet控制器、一个模型(普通Java类)、一个xml部署描述文件、一个jsp视图

3.2 步骤

3.2.1 分析用户视图以及高层体系结构

在这里插入图片描述

3.2.1.1对于访问链接:

根据上图:

​ 1:客户请求访问页面

​ 2.容器找到html页面

​ 3.容器把页面返还给浏览器

3.2.1.2 对于访问servlet:

根据上图:

​ 4:客户把请求数据发送给容器

​ 5.容器根据url找到对应的servlet,并把请求传递给这个servlet

​ 6.servlet调用模型(普通java类)

​ 7.类返回一个结果,servelet把回答增加到请求对象

​ 8.servlet把请求转给jsp

​ 9.jsp从请求对象得到答案

​ 10.jsp为生成容器生成页面

​ 11.容器把页面返回给用户

3.3.2 创建项目的开发环境

​ MVC项目的标准层级结构

在这里插入图片描述

3.3.3 创建项目的部署环境

​ Tomcat的层级结构:
在这里插入图片描述

3.3.4 对Web应用各组件进行迭代开发和测试

3.3.4.1 构建和测试html表单

3.3.4.1.1 构建:

​ 举个例子:

<html>
    <body>
        <h1>填写表单</h1>
        <!--html认为/login就是要调用的servlet(客户知道的url名),在项目目录结构中并不存在-->
        <form name="haha" method="POST" action="/login">
            
            姓名:<input type="text" name="name">
            <br>
            性别:<input type="radio" name="sex" value="men"><input type="radio" name="sex" value="women"><br>
            
            <input type="SUBMIT">
        </form>
    </body>
</html>
3.3.4.1.2:部署和测试

​ 1.在开发环境中创建html,然后保持在项目名/web下

​ 2.把html文件的副本放在tomcat/webapps/项目名中

​ 3.创建web.xml文档,保存在开发环境项目名/etc下

<!--该部署文件的主要目的是定义逻辑名与实际类文件之间的映射-->
<web-app>
	<servlet>
    	<servlet-name>部署名</servlet-name>
        <servlet-class>类文件的完全限定名</servlet-class>
    </servlet>
    
    <servlet-mapping>
    	<servlet-name>部署名</servlet-name>
        <!--.do只是一个约定-->
        <url-pattern>/用户可知的url名.do</url-pattern>
    </servlet-mapping>
</web-app>

​ 4.把web.xml文件的副本放在/tomcat/webapps/项目名/WEB-INF目录下

​ 5.启动tomcat(cd到tomcat主目录,然后运行/bin/startup.sh)

​ 6.测试页面(输入http://localhost:8080/项目名)

3.3.4.2 构建控制器servlet第一个版本

3.3.4.2.1 编写servlet

​ 利用html表单测试这个控制器(确保html页面能适当调用servlet,且servlet能正确接收html参数)

package com.web

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重写doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("haha<br>");
        //获取表单中的name信息(根据html标记中的name属性匹配)
        String s = request.getParameter("name");
        out.println("he is " + s);
    }
}
3.3.4.2.2 编译servlet

​ 命令如下:

//切到项目目录下
cd project
//路径根据不同的存放目录是不同的,tomcat之后是相同的
//-d用来告诉编译器,.class文件放在适当包结构中的clases目录下
javac -classpath /路径/tomcat/common/lib/servlet-api.jar:classes:. -d classes src/com/web/testServlet.java
3.3.4.2.3 部署servlet

​ 创建.class文件副本,把它移到tomcat/项目/WEB-INF/classes/com/web下

3.3.4.2.4 测试servlet

​ 重启tomcat然后访问网页即可

3.3.4.3 为模型类构建测试类,构建并测试模型类

​ 例如:

package com.model;

public class Test{
    public String getName(String name) {
        String s = "hello, ";
        s = s + name;
        return s;
    }
}

3.3.4.4 servlet升级到第二版

3.3.4.4.1 改写

​ 可以调用模型类,如下:

package com.web

import com.model.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重写doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //新补充的内容:
        String s = request.getParameter("name");
        Test t = new Test();
        String s1 = t.getName(s);
        
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("haha<br>");
        //获取表单中的name信息(根据html标记中的name属性匹配)
        out.println(s1);
    }
}
3.3.4.4.2 部署

​ 1.编译servlet

​ 2.将servlet文件的副本替换到之前的/tomcat/wabapps/项目/WEB-INF/classes/com/web下

​ 3.把模型的class文件移动到/tomcat/wabapps/项目/WEB-INF/classes/com/model下

​ 4.重启tomcat

​ 5.打开浏览器浏览

3.3.4.5 构建jsp,servlet升级到第三版

​ 可以把表示分派到jsp完成

​ jsp代码如下:

<%@ page import="java.util.*" %>
<html>
    <body>
        <h1>这是一个标题</h1>
        <!-- <% %>标记里有一些标准Java代码-->
        <%
        	<!--从这里从请求对象得到一个styles属性-->
        	String s = (String)resquest.getAttribute("styles");
        	out.print("<br>" + s);
        %>
    </body>
</html>

​ 然后将jsp文件保存在项目目录/web下

​ 将它的副本移动到tomcat/项目名下

​ servlet代码修改为:

package com.web

import com.model.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

pulbic class TestServlet extends HttpServlet {
    //重写doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //新补充的内容:
        String s = request.getParameter("name");
        Test t = new Test();
        String s1 = t.getName(s);
        
        //response.setContentType("text/html");
        //PrintWriter out = response.getWriter();
        //out.println("haha<br>");
        //获取表单中的name信息(根据html标记中的name属性匹配)
        //out.println(s1);
        
        //为请求对象增加styles属性,供jsp使用
        request.setAttribute("styles", s1);
        //为jsp实例化一个请求分派器
        RequestDispatcher view = request.getRequestDispatcher("test.jsp");
        //使用请求分派器要求容器准备好jsp,并向jsp发送请求和响应
        view.forward(request, response);
    }
}

​ 重新部署servlet即可,重启tomcat查看

转载请注明出处!!!

如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢

猜你喜欢

转载自blog.csdn.net/Ivan_zcy/article/details/85262679