文章目录
三 创建和部署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查看
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢