首页 > 学院 > 开发设计 > 正文

ServletLearner01

2019-11-14 15:13:45
字体:
来源:转载
供稿:网友

一个servlet的简单mvc的创建到运行

开发环境和部署环境是不一样的
这是部署
在tomcat的webapps目录下

/webapps/Beer-v1/form.html

 1 <body> 2     <h1 align="center">Beer Selection Page</h1> 3     <!-- 点submit会调到http://localhost:63342/MyFirstServlet/SelectBeer.do这个url SelectBeer.d只是一个逻辑名--> 4     <form method="post" action="SelectBeer.do"> 5         Select beer characteristics 6         <p>Color:</p> 7         <select name="color" size="1"> 8             <option>light</option> 9             <option>amber</option>10             <option>brown</option>11             <option>dark</option>12         </select>13         <br/><br/>14         <input type="submit">15     </form>16 </body>17 </html>

/webapps/Beer-v1/WEB-INF/web.xml

 1 <web-app version="2.4" 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"> 2     <servlet> 3         <servlet-name>Ch3 Beer</servlet-name> 4         <servlet-class>com.example.web.BeerSelect</servlet-class> 5     </servlet> 6  7     <servlet-mapping> 8         <servlet-name>Ch3 Beer</servlet-name> 9         <url-pattern>/SelectBeer.do</url-pattern>10     </servlet-mapping>11 </web-app>

用户填写了表单,点击submit 浏览器生成了以下的请求URL /Beer-v1/SelectBeer.do

容器搜索DD(部署描述文件) 找到<url-pattern>与/SelectBeer.do匹配的一个<servlet-mapping>

容器看到对应这个<url-pattern>的<servlet-name>是Ch3 Beer (这并不是是实际的servlet类文件的名字
Ch3 Beer是servlet名 而不是servlet类的名字)

对容器来说 servlet只是一个在DD中按<servlet>命名的东西 servlet名只在DD中使用 以便DD的其他部分
建立servlet的映射

容器查找<servlet-name>为Ch3 Beer的<servlet>标记

根据<servlet>标记中的<servlet-class> 容器可以知道由哪个servlet类负责处理这个请求 如果这个servlet
还没有初始化 就会加载类 并初始化

容器开始一个新线程来处理这个请求 并把请求传递给线程(传递给servlet的service()方法)
容器吧响应通过WEB服务器发回给客户

servlet是一个控制器

/webapps/Beer-v1/WEB-INF/classes/com/example/web/BeerSelect.class

 1 package com.example.web; 2 import javax.servlet.RequestDispatcher; 3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import java.io.IOException; 8 import java.io.PRintWriter; 9 import java.util.Iterator;10 import java.util.List;11 //////////////////////////////////////////////////////////////////////////////////////////12 import com.example.model.*;13 14 /**15  * Created by Melody on 2015/10/29.16  */17 public class BeerSelect extends HttpServlet18 {19     public void doPost(HttpServletRequest request,20                        HttpServletResponse response)21                         throws IOException, ServletException22     {23         //这个方法来自ServletResponse接口24         //02response.setContentType("text/html");25         //02PrintWriter out = response.getWriter();26         //02out.print("Beer Selection Advice<br/>");27         ////这个方法来自ServletResponse接口 注意 这个参数要与HTML<select> 标记中的name属性相匹配28         String c = request.getParameter("color");//这个color是form表单里面的<select name="color">29         //String[] cArrays = request.getParameters("color");这是接受一个数组(一个参数有多个值)30         //01 out.print("<br/>Got beet color " + c);31 32         BeerExpert be = new BeerExpert();33         List result = be.getBrands(c);34 35         //为请求对象增加一个属性 供jsp使用 注意 JSP要寻找style36         request.setAttribute("style", "result");37 38         //为JSP实例化一个请求分派器39         RequestDispatcher view = request.getRequestDispatcher("result.jsp");40 41         //使用请求分配器要求容器准备好JSP 并向JSP发送请求和响应42         view.forward(request, response);43 44         //02Iterator it = result.iterator();45         //02while (it.hasNext())46         //02{47         //02    out.print("<br>try: " + it.next());48         //02}49     }50 }

/webapps/Beer-v1/WEB-INF/classes/com/example/model/BeerExpert.class

model层

 1 package com.example.model; 2 import java.util.*; 3 //可以看到不用框架 这就是一个很普通的java类 4 public class BeerExpert 5 { 6     public List getBrands(String color) 7     { 8         List brands = new ArrayList<>(); 9         if (color.equals("amber"))10         {11             brands.add("Jack Amber");12             brands.add("Red Moose");13         }14         else15         {16             brands.add("Jail Pale Ale");17             brands.add("Gout Stout");18         }19         return brands;20     }21 }

/webapps/Beer-v1/result.jsp

这是view层

<%@ page import = "java.util.*" %><html><body>    <h1 align = "center">Beer Recommendations JSP</h1>    <%        List styles = (List) request.getAttribute("styles");        Iterator it = styles.iterator();        while (it.hasNext())        {            out.print("<br/>try: " + it.hasNext());        }    %></body></html>

构建和测试模型类
模型是指应用的后台 不能把模型限制为只能由一个web应用使用 所以它应当有自己的工具包
模型都不用包括tomcat的类 模型就像一个专家 专家返回一个回答给 servlet吧这个回答增加到请求对象

servlet把请求对象转发给JSP JSP从请求对象中得到回答 JSP为容器生成一个页面 容器返回这个页面
servlet要做 吧model的回答增加到请求对象 以便JSP访问
要求容器吧请求发给"result.jsp"

模型的要求
包应当是com.example.model
其目录结构应该为/WEB-INF/classes/com/example/model
get get get

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表