Servlet初步学习
Servlet:
Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问这个驻留在服务器内存里的Servlet程序。
Tomcat容器等级:
Tomcat容器分为四个等级,Servlet容器管理Context容器,一个Context对应一个Web工程。
手工Servlet编写:
1.继承HttpServlet
2.重写doGet()或者doPost()方法
(看以什么方式提交请求,get还是post)
3.在web.xml中注册Servlet
注册:
要写两个标签 <servlet>
和 <servlet-mapping>
第一个 servlet-name 给你的 Servlet 起一个名字。
第二个 servlet-class 要加上package名 package.类名
第一个 servlet-name 与上面一样。
第二个 url-pattern 要跟超链接跳转(href)一样。
(要加 / 在开始的时候,表示根目录下的包)
页面代码:
Get 方式用超链接直接获取就可以(href为 包/Java名(跳转到java文件))
Post 方式用表单按钮跳转,方式类似。
Java代码:(对于doGet()或者doPost()的重写)
继承于 HttpServlet 类,引入 javax.servlet.http.HttpServlet 包。
重写 doGet() 方法,可以用 PrintWriter 去设置输出对象(out),用 response.getWriter() 方法。
之后可以用 out 直接在上面写。
(response.setContentType 设置页面,使out.p里面的html标签可用)
(doPost()方法一样,一模一样)
执行流程图:
Servlet生命周期:
1.初始化阶段,调用 init() 方法(初始化方法)。
(只要服务器运行,初始化就被执行)
2.响应客户请求阶段,调用 service() 方法。由 service() 方法根据提交方式选择执行 doGet() 或者 doPost() 方法。
3.终止阶段,调用 destroy() 方法。
(停止服务器的时候执行(停止Tomcat))
在下列时刻Servlet容器装载Servlet:
Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<servlet></servlet>
之间添加代码:<loadon-startup>1</loadon-startup>
数字越小表示优先级别越高。
启动后,客户首次向 Servlet 发送请求。
Servlet类文件被更新后,重新装载Servlet。
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
例:
先加载 TestServlet2 ,后加载 TestServlet1
Servlet与九大内置对象:
获取表单数据:
一个类 Users 提供获得和设置各个要获取的数据的方法。
另一个类(Servlet)在 doGet() 中用 request.getParameterValues 方法获得表单数据,并且 new 一个 Users,用 u.set… 方法传进去刚获得的数据以设置
用 request.getSession().setAttribute(“regUser”,u);来把注册成功的用户对象u保存在session中。
最后用 request.getRequestDispatcher 方法转发到另一显示页面(”../userinfo.jsp”)
在最终页面可以用javabeans去获取这些值: <jsp:useBean id="regUser" class="entity.Users" scope="session">
显示: <jsp:getProperty name="regUser" property="..."/>
(字符串数组可以直接遍历,如 regUser.get…() 去获得,然后用 out 直接显示)
(href 也可以用绝对路径: String path = request.getContextPath();
<a href="<%=path%>/servlet/HelloServlet">...</a>
path变量表示项目的根目录
)
(请求重定向目录:response.sendRedirect(request.getContextPath()+”/text.jsp”);
服务器内部跳转则直接 /text.jsp 即可(或者 ../text.jsp)
(斜线表示项目根目录)
)
获取初始化参数:
在 web.xml 中配置 Servlet 时,可以配置一些初始化参数。而在 Servlet 中可以通过 ServletConfig 接口提供的方法来取得这些参数。
1.在web.xml中可以布置初始化参数:
用 init-param 标签设置 name 和对应的 value
2.在 servlet 中声明两个变量 username 和 password 并写其get和set方法。
重写 init 方法,用 this.getInitParameter(“username”) 获取初始化参数,用 this.setUsername 这两个 set 方法将获取的参数设置
最后在 doPost 方法中直接用 get 输出即可:
MVC:
MVC模式:软件开发过程中比较流行的设计思想。旨在分离模型、控制、视图。是一种分层思想的体现。
Model2:
MVC思想的体现:
阶段项目小记:
1.购物车中用 HashMap<Items,Integer>
保存商品名字和数量。
用 keySet() 方法可以获得 HashMap 的键集合,返回 Set 。
用 Iterator 去迭代遍历,统计总价。
2.用 Set<Map.Entry<Items,Integer>>
可以直接保存键值对,用 entrySet() 方法获得,返回 Map.Entry<Items,Integer>
。
用增强型 for 循环直接对键值对进行遍历,输出为:键=值
(尽量使用 entrySet 而不是 keySet,同时对键值遍历比先拿键再拿值遍历效率要高)
3.重写 hashCode 和 equals 方法,使之改变其比较方式。
hashCode:返回每个对象的 hashCode ,重写让其返回 id + 字符串的哈希编码,以达成 当Id相同时,哈希编码相同的效果。
另:containsKey(Key) 可以判断是否有这个 key 值,不用迭代。
put 可以直接覆盖 key-values
Servlet随笔:
由Web Client端发送请求,在Servlet容器中创建HttpRequest和HttpResponse两个对象,把请求封装进Request中,调用service()方法,对请求处理,返回响应信息给客户端。
service():根据请求判断调用doPost或doGet,可以重写,最后super.service();来转入doPost或doGet,每次自动调用。