实验四 Servlet的应用
- 格式:doc
- 大小:154.50 KB
- 文档页数:7
实验一Servlet的使用一、实验目的1.掌握Servlet的创建与配置;2.熟悉过滤器的应用范围;3.掌握创建和配置过滤器的基本步骤二、实验仪器1.需配备安装有Windows7操作系统、IE浏览器的计算机,每人一台台。
三、实验原理1.Servlet是一种服务器端的Java Web技术,可以用来生成动态的Web页面,其对Web 请求的处理能力非常强大。
Servlet实质上就是按Servlet规范编写的Java类,与Java普通程序不同的是,Servlet的运行需要Servlet容器的支持。
通常所说的Servlet就是指HttpServlet,在开发Servlet时,可以直接继承javax.servlet.http.HttpServlet。
用于处理Http请求的方法有doGet()、doPost()、service()等。
2.Servlet是javax.servlet包中HttpServlet类的子类,由服务器完成该子类的创建和初始化。
Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。
3.在标准的MVC模式中,Servlet仅作为控制器(Control)使用。
Java EE应用框架也正是遵循了MVC模式,对其而言,JSP仅作为表现层(View)技术。
Model通常由JavaBean来充当,所有业务逻辑、数据访问逻辑都在Model中实现,实际上隐藏在Model层中还有很多丰富的组件,例如DAO组件、领域对象等。
MVC的工作模式简要概述为:所有用户请求都发送给Servlet, Servlet调用Model来处理用户请求,并调用JSP来呈现处理结果;或者Servlet直接调用JSP将应用的状态数据呈现给用户。
四、实验内容1.熟悉MVC模式,利用Servlet作为控制器实现一个简单的登录验证。
2.本项目共需要3个程序文件:1)视图层:登录页面,Login.jsp, welcome.jsp2)控制层:控制器,LoginServlet.java3)模型层:DAO组件,DbDao.java五、实验步骤1.创建MYSQL数据库名为“liuyan”,并创建表“user_inf”,如下图所示,将记录加入表中。
实验四Servlet实验
实验四 Servlet基础编程
一、实验目的:
编写Servlet代码,熟悉并掌握Servlet的使用和配置。
二、实验内容:
在MyEclipse环境下编写Servlet代码,正确配置后完成相应的功能,读取用户提交信息,调试运行程序。
三、实验要求:
1. 熟悉并掌握Servlet的编写和配置;
2. 掌握通过HttpServletRequest对象读取请求参数,通过HttpServletResponse对象向客户端浏览器输出内容;
3.掌握访问运行Servlet的正确地址写法;
3. 写出实验报告。
四、实验学时:2学时
五、实验步骤:
1.进入MyEclipse环境,新建Web Project;
2.改造bookAdd.html页面,实现将书籍添加信息提交至一个Servlet,通过该Servlet 读取请求参数信息并显示,要求显示在一个表格中,表格为多行两列,第一列显示参数名,第二列显示参数值;
3. 要求能正确输出中文;
4.调试运行程序。
Servlet实例应用1.虽然可以用:String name=getServletConfig().getServletName()得到Servlet名称,但可以从GenericServlet直接继承getServletName方法更方便. Service就不用象doPost激活了public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html");PrintWriter out=response.getWriter(); out.print( this.getServletName( ) );Enumeration e=this.getInitParameterNames();//得到多个参数玫举数组while(e.hasMoreElements()){ String key=(String)e.nextElement();String value=getInitParameter(key); out.print(key+"="+value); } ServletContext context=this.getServletContext();//也可从GenericServlet中直接得到String path=context.getRealPath("/"); out.print(path); 得到:C:\tomcat\webapps\test\2. 用ServletContext得到初始化参数:(从GenericServlet中直接得到)public class Context extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); Enumeration e=getServletContext().getInitParameterNames();while(e.hasMoreElements()){ String key=(String)e.nextElement(); String value=getServletContext().getInitParameter(key);out.print(key+"="+value);}}} ServletContext在web.xml中的配置: <servlet> <servlet-name>Context</servlet-name><servlet-class>test.Context</servlet-class></servlet>不同于<init-param>在Servlet内部配<context-param><param-name>company</param-name><param-value>witbridge</param-value></context-param>3.使用输入流访问资源文件:public class FileAccess extends HttpServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {PrintWriter out=response.getWriter(); FileInputStream fis=new FileInputStream("it315.properties");//文件必和tomcat启动程序同级别目录: user=root,否则全路径:c:\\test\\it315.propertiesProperties props=new Properties(); props.load(fis);//Properties保存在流中或从流中加载, load从输入流中读取属性列表,getPXX返回Stringout.print(props.getProperty("user")); fis.close();}} //用指定键在属性列表中搜索属性4.使用ServletContext接口访问资源文件:public class Resource extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter();URL urlIt315=this.getServletContext().getResource("/it315.properties"); InputStream ips=this.getServletContext().getResourceAsStream("/it315.properties"); out.print(urlIt315.toString());Properties props=new Properties();props.load(ips); out.print(props.getProperty("dataBase")); } }//好处:路径与调试环境无关,只要/ setHeader(ng.String name, ng.String value)5.HttpServletResponse的应用:响应消息头:如setContentType(“text/html;charset=”);a.SetHeader(自动刷新,URL覆盖)public class Refresh extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.setHeader("Refresh", "2"); response.setHeader("Refresh", 1;URL=http://localhost:8080/ "); } }b.禁止浏览器缓存显示动态图片:public class Cache extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html ");response.setDateHeader("Expires", 0); response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache"); //防止不同浏览器支持不同响应头PrintWriter out=response.getWriter(); out.print(Math.random()); }} response.setBufferSize(0);int len=response.getBufferSize( );out.print(len);//81926.RequestDispatcher(共享数据和URL不变)和response.SendRidirect:a.Include:被包含的Servlet程序不能改变响应消息的状态码和响应头,如果他里面存在这样的语句执行结果将被忽略:public class Included extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=GB2312");//被包含执行时将被忽略PrintWriter out=response.getWriter(); out.print("中国"+"<br>");out.print("URL"+request.getRequestURI()+"<br>");///test/servlet/Include根目录下out.print("QueryString:"+request.getQueryString()+"<br>");//为null,得到?后面语句out.print("Param p1:"+request.getParameter("p1")+"<br>");}} //可以得到参数的测试:public class Include extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=GB2312");PrintWriter out=response.getWriter(); String china="中国"; RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/servlet/Included?p1="+china); rd.include(request, response);} }//从Config中继承。
Servlet的应用一、Servlet的应用1. 一个Servlet类应该继承HttpServlet并且覆盖doGet或doPost方法,这取决于数据的发送方式是get 还是post。
若要在一个Servlet中同时处理get 和post请求,并且对每个请求的处理动作相同,可以简单地在doGet方法中调用doPost方法,反之亦然。
doGet和doPost方法都有两个参数:HttpServletRequest 和HttpServletResponse。
可以通过HttpServletRequest类提供的方法获得引入的信息,比如表单数据、客户主机名等;HttpServletResponse类提供输出信息的能力,比如,通过HttpServletResponse得到一个PrintWriter向客户发送文档内容。
2. doGet、doPost及其它doXxx方法是Servlet的主体,大部分时间都只用关心get和post 请求,所以只需覆盖doGet、doPost方法。
如果需要,也可以为处理delete请求而覆盖doDelete 方法;为处理put请求而覆盖doPut方法;为处理options请求而覆盖doOptions方法;为处理trace请求而覆盖doTrace方法。
注意,没有doHead方法,因为系统自动用状态列和header 设置来回复head 请求。
3. 一个简单的Servlet最主要的功能就是用println语句输出一个预期的页面。
因为doGet 和doPost会抛出两个异常,因此要引处相关的类:java.io——因为要用到PrintWriter等javax. servlet——因为要用到HttpServlet等javax. servlet.http——因为要用到HttpServletRequest 和HttpServletResponse等二、Servlet的编译、配置和调用1. 环境变量CLASSPA TH要包含了标准的Servlet类,比如:.;%JA V A_HOME%\lib\dt.jar;%JA V A_HOME%\lib\tools.jar;E:\Program Files\Apache SoftwareFoundation\T omcat 6.0\lib\servlet-api.jar2. 用“javac”命令编译Servlet,将生成的Servlet类(即.class 文件)放到正确路径,比如:ROOT\WEB-INF\classes3. 若生成的Servlet类(即.class文件)放在ROOT\WEB-INF\classes,则必须使用ROOT\WEB-INF目录下的web.xml文件进行注册。
servlet作用及配置servlet作用及配置收藏用servlet生成表现层页面显然是很麻烦的,因为都要用servlet的输出流来输出.如上out.println("<html><body>"+kk+"</body></ html><br>");servlet做控制层.jsp做表现层,jsp编译后其实也是一个servlet.它其实充当了servlet做为表现层的工作. servlet,是运行在服务器端的程序,用于处理及响应客户端的请求.servlet应该是个中间的部分,对前面和后面部分起的交互,所以,很重要.而且web.xml的配置都要经过这里,所以好好掌握.简单配置view plaincopy to clipboardprint?<servlet><servlet-name> servlet名字</servlet-name><servlet-class> 包名.类名</servlet-class></servlet><servlet-mapping><servlet-name> servlet名字</servlet-name><url-pattern> 由servlet处理的路径</url-pattern></servlet-mapping><servlet><servlet-name> servlet名字</servlet-name><servlet-class> 包名.类名</servlet-class></servlet><servlet-mapping><servlet-name> servlet名字</servlet-name><url-pattern> 由servlet处理的路径</url-pattern></servlet-mapping>把这段xml放在你的WEB-INF下面的web.xml里就行了~~当然还有其它一些别的东西`~~但是这是应用一个servlet基本的配置~~view plaincopy to clipboardprint?<servlet><servlet-name>Contorller.wc</servlet-name>// 这里指定servlet的名称,这个名称随你喜欢,只要不重复就行<servlet-class>web.Controller.Controller</servlet-cl ass>//这里servlet类的包路径和名称,注意大小写</servlet>//下面这两行配置的作用就是告诉web容器,在遇到<url-pattern>中的路径请求时就交给名为Contorller.wc 的servlet来处理。
servlet用法
1. 嘿,你知道吗,servlet 就像是网络世界的小魔法师!比如创建一个
登录页面,当用户输入信息后,servlet 能神奇地处理这些数据并决定是否
让用户登录成功,这多厉害啊!
2. servlet 用法超有趣的呀!就好像是指挥交通的警察,有条不紊地管理着
网络请求的来来往往。
比如购物车功能,不就是 servlet 在默默帮忙嘛!
3. 哇塞,servlet 简直太重要啦!可以想象成是一场精彩演出的幕后导演。
像论坛帖子的发布和管理,那不就是 servlet 在掌控大局嘛!
4. 你想想看,servlet 可不就是网站的大力士嘛!它能扛起各种繁重的任务。
比如用户注册时的信息验证,这可都离不开 servlet 呀!
5. servlet 用法真的好神奇呀!好比是一个智能管家,把一切都安排得妥妥
当当。
像在线考试系统中对考生答案的处理,不就是servlet 在辛勤工作嘛!
6. 哎呀呀,servlet 可太有意思了!可以看作是一个神奇的魔法盒子。
比如
实现文件的上传和下载,servlet 绝对功不可没啊!
7. 哇哦,servlet 的作用真是不可小觑呢!就如同是一艘航行在网络海洋中
的大船。
比如网站的实时聊天功能,那可少不了 servlet 这个强大的引擎!8. 总之呢,servlet 真的是太实用啦!在各种 Web 开发中都扮演着关键的
角色。
所以呀,一定要好好掌握它的用法,这样才能在网络世界里畅游无阻啊!。
实验四 Servlet的应用实验内容和要求:用Servlet来完成实验三的所有任务,即先登录,然后留言,再显示留言。
采用JSP+JavaBean+Servlet开发模式。
实验步骤如下:1.创建登录页面login.jsp<%@page language="java"import="java.util.*"pageEncoding="gb2312"%> <html><head></head><body><form action="DoLogin"method="get"> <!--注意此处设为get方法-->用户名:<input type="text"name="username"/><br>口令:<input type="password"name="password"/><br><input type="submit"value="提交"/><input type="reset"value="重置"/></form></body></html>2.创建处理登录的Servlet:DoLogin.java,过程如下:选择项目中src文件夹,New Servlet,弹出Create a new Servlet对话框,设置如下(05为项目名称)单击next后,见下图,只对Servlet/Jsp Mapping URL :作如下修改,单击finish.此时,web.xml中应存在如下Servlet配置信息:<servlet><description>ServletExample</description><display-name>firstServlet</display-name><servlet-name>DoLogin</servlet-name><servlet-class>servlet.DoLogin</servlet-class></servlet><servlet-mapping><servlet-name>DoLogin</servlet-name><url-pattern>/DoLogin</url-pattern></servlet-mapping>其中,<url-pattern>/DoLogin</url-pattern>行表明,该Servlet可以用这个URL 访问,http://localhost:8080/05/DoLoginDoLogin.java代码如下package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class DoLogin extends HttpServlet {//因为登录表单是以get方式提交的,所以重写doGet方法,运行时调用此方法public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String userName=request.getParameter("username");//获取用户名HttpSession session = request.getSession();session.setAttribute("name",userName); //用户名写入session,显示留言时(showMessage.jsp)需要String passWord=request.getParameter("password");//获取口令if(userName.equals("admin")&&passWord.equals("123")) //用户名和密码正确response.sendRedirect("messageBoard.jsp"); //重定向到留言页面elseresponse.sendError(500,"登陆错误,用户名或密码不正确!");}}3.创建留言页面messageBoard.jsp<%@page contentType="text/html;charset=gb2312"%><form action="DoMessage"method="post"><!—注意此处设为post方法--> <table border="1"rules="rows"><tr height="30"><td>留言标题:</td><td><input type="text"name="title"size="35"></td> </tr><tr><td>留言内容:</td><td><textarea name="content"rows="8"cols="34"></textarea></td></tr><tr align="center"height="30"><td colspan="2"><input type="submit"value="提交"><input type="reset"value="重置"></td></table></form>4.创建值JavaBean:Message.java同代码3-55.创建工具JavaBean:Mytools.java同代码3-66.创建处理留言的Servlet:DoMessage.java,如下图:DoMessage.java代码如下:package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DoMessage extends HttpServlet {//因为留言信息是以post方式提交的,所以重写doPost方法,运行时调用此方法public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {bean.valuebean.Message message=new bean.valuebean.Message();message.setTitle(request.getParameter("title"));//保存留言标题message.setContent(request.getParameter("content"));//保存留言内容request.setAttribute("msg", message);//将对象message保存到request中//下面2行实现转发到showMessage.jspRequestDispatcherdispatcher=request.getRequestDispatcher("showMessage.jsp");dispatcher.forward(request, response);}}7.创建显示留言页面showMessage.jsp<%@page contentType="text/html; charset=gb2312"%><%@page import="bean.toolbean.MyTools"%><%@page import="bean.valuebean.Message"%><%Message message=(Message)request.getAttribute("msg"); %><html><title>显示留言信息</title><body>留言者:<%=session.getAttribute("name") %><br>留言标题:<%=MyTools.change(message.getTitle()) %><br>留言内容:<%=MyTools.change(message.getContent()) %></body></html>。
实验四 Servlet基础编程
一、实验目的:
编写Servlet代码,熟悉并掌握Servlet的使用和配置。
二、实验内容:
在MyEclipse环境下编写Servlet代码,正确配置后完成相应的功能,读取用户提交信息,调试运行程序。
三、实验要求:
1. 熟悉并掌握Servlet的编写和配置;
2. 掌握通过HttpServletRequest对象读取请求参数,通过HttpServletResponse对象向客户端浏览器输出内容;
3.掌握访问运行Servlet的正确地址写法;
3. 写出实验报告。
四、实验学时:2学时
五、实验步骤:
1.进入MyEclipse环境,新建Web Project;
2.改造bookAdd.html页面,实现将书籍添加信息提交至一个Servlet,通过该Servlet 读取请求参数信息并显示,要求显示在一个表格中,表格为多行两列,第一列显示参数名,第二列显示参数值;
3. 要求能正确输出中文;
4.调试运行程序。
Servlet原理javax.servletInterface Servlet是规范的接口,为了深入了解Servlet原理,要实际开发一个实现该接口的类,来作为第一个Servlet。
public void init(ServletConfig config)throws ServletException这个方法,是由容器在实例化一个Servlet实例后,确切会调用该方法一次。
通过判断是否抛出异常来确认Servlet是否被正确初始化。
public void service(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException这个方法,是我们实现业务逻辑的方法,req和res就是由Web服务器对于请求和相应的有效封装。
没有什么神秘的,java网络编程中,ServerSocket的accept方法返回之后,会获得相应的一个Socket对象,通过该对象可以进而获得对应客户端的输入流和输出流。
在对其进行封装就进而到Request和Response对象。
传入service方法,req可以获得请求的头部信息,res.getWriter,获得一个输出,进行输出信息,作为真正响应。
public void destroy()This method is only called once all threads within the servlet's service me thod have exited or after a timeout period has passed.只有在service方法运行完,或者一个timeout后,会被调用。
After the servlet container calls this method, it will not call the service me thod again on this servlet.一旦调用它,就不会再提供服务。
实验四Servlet的应用实验要求:用Servlet来完成实验三的所有任务,即先登录,然后留言,再显示留言。
采用JSP+JavaBean+Servlet开发模式。
实验步骤如下:1.创建登录页面login.jsp<%@page language="java"import="java.util.*"pageEncoding="gb2312"%> <html><head></head><body><form action="DoLogin"method="get"><!—注意此处设为get方法-->用户名:<input type="text"name="username"/><br>口令:<input type="password"name="password"/><br><input type="submit"value="提交"/><input type="reset"value="重置"/></form></body></html>2.创建处理登录的Servlet:DoLogin.java,过程如下:选择项目中src文件夹,New Servlet,弹出Create a new Servlet对话框,设置如下(05为项目名称)单击next后,见下图,只对Servlet/Jsp Mapping URL :作如下修改,单击finish.此时,web.xml中应存在如下Servlet配置信息:<servlet><description>ServletExample</description><display-name>firstServlet</display-name><servlet-name>DoLogin</servlet-name><servlet-class>servlet.DoLogin</servlet-class></servlet><servlet-mapping><servlet-name>DoLogin</servlet-name><url-pattern>/DoLogin</url-pattern></servlet-mapping>其中,<url-pattern>/DoLogin</url-pattern>行表明,该Servlet可以用这个URL 访问,http://localhost:8080/05/DoLoginDoLogin.java代码如下package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class DoLogin extends HttpServlet {//因为登录表单是以get方式提交的,所以重写doGet方法,运行时调用此方法public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String userName=request.getParameter("username");//获取用户名HttpSession session = request.getSession();session.setAttribute("name",userName); //用户名写入session,显示留言时(showMessage.jsp)需要String passWord=request.getParameter("password");//获取口令if(userName.equals("admin")&&passWord.equals("123")) //用户名和密码正确response.sendRedirect("messageBoard.jsp"); //重定向到留言页面elseresponse.sendError(500,"登陆错误,用户名或密码不正确!");}}3.创建留言页面messageBoard.jsp<%@page contentType="text/html;charset=gb2312"%><form action="DoMessage"method="post"><!—注意此处设为post方法--> <table border="1"rules="rows"><tr height="30"><td>留言标题:</td><td><input type="text"name="title"size="35"></td> </tr><tr><td>留言内容:</td><td><textarea name="content"rows="8"cols="34"></textarea></td></tr><tr align="center"height="30"><td colspan="2"><input type="submit"value="提交"><input type="reset"value="重置"></td></table></form>4.创建值JavaBean:Message.java同代码3-5 5.创建工具JavaBean:Mytools.java同代码3-6 6.创建处理留言的Servlet:DoMessage.java,如下图:DoMessage.java代码如下:package servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DoMessage extends HttpServlet {//因为留言信息是以post方式提交的,所以重写doPost方法,运行时调用此方法public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {bean.valuebean.Message message=new bean.valuebean.Message();message.setTitle(request.getParameter("title"));//保存留言标题message.setContent(request.getParameter("content"));//保存留言内容request.setAttribute("msg", message);//将对象message保存到request中//下面2行实现转发到showMessage.jspRequestDispatcherdispatcher=request.getRequestDispatcher("showMessage.jsp");dispatcher.forward(request, response);}}7.创建显示留言页面showMessage.jsp<%@page contentType="text/html; charset=gb2312"%><%@page import="bean.toolbean.MyTools"%><%@page import="bean.valuebean.Message"%><%Message message=(Message)request.getAttribute("msg"); %><html><title>显示留言信息</title><body>留言者:<%=session.getAttribute("name") %><br>留言标题:<%=MyTools.change(message.getTitle()) %><br>留言内容:<%=MyTools.change(message.getContent()) %></body></html>。