实验三、简单Web应用程序设计(2学时)

实验三、简单Web应用程序设计(2学时),第1张

实验三、简单Web应用程序设计(2学时) 实验三、简单Web应用程序设计(2学时).docx-SQLServer文档类资源-CSDN下载
实验三、简单Web应用程序设计(2学时)


4、实验内容

1、Java Web环境搭建和测试

    提醒:如果安装的自带Tomcat的Netbeans,不需要这一步!

⑴ 安装Tomcat7 Web应用程序服务器

登录Apache Tomcat官网Apache Tomcat® - Welcome! 下载Tomcat7,建议下载压缩包格式32-bit Windows zip,将压缩包解压至硬盘根目录,例如:D:tomcat7。

⑵ 运行Netbeans IDE 7.4,依次选择菜单“工具”>“服务器”,进入到添加服务器界面。点击按钮,在d出的选择服务器界面中选择“Apache Tomcat”,点击“下一步”按钮。界面如图3-17所示:

图3-17 添加服务器

⑶ 在安装和登录详细信息界面中,浏览选择tomcat7安装根目录,在用户名口令处输入要添加的管理用户,选择“完成”按钮。如图3-18所示:

图3-18 配置信息

⑷ 到此为止,添加了Tomcat7 web服务器,在服务器设置界面中我们可以指定Tomcat服务器端口号,这里指定了“8088”(为了避免和系统占用的8080端口冲突,建议更换一个)。

图3-19 端口设置

⑸ 新建Java Web项目:进入到Netbeans IDE7.4环境,选择菜单“文件”>“新建项目”,在d出的对话框中选择“Java Web”类别,项目选择“Web应用程序”,点击“下一步”按钮,输入项目名称和选择项目要保存的路径。本例项目默认保存到C:UsersAdministratordocumentsNetBeansProjects目录。

⑹ 点击“下一步”按钮,进入到服务器和设置界面,如果已经在第⑵步中添加了Tomcat Web服务器,则在这里可以看到已经选择了Apache Tomcat服务器,上下文路径默认设置为/项目名称。点击“下一步”按钮,进入到“框架”选择界面,如果Web应用程序要使用某些框架,则可以在这里选择,否则,选择“完成”按钮。

⑺ 至此,新建项目工作完成。我们可以在IDE中看到新建的项目,默认添加了一个index.jsp文件。

⑻ 运行项目:选择工具栏上的图标或者选择菜单“运行”>“运行项目”,IDE开始在后台运行tomcat服务器,并打开默认浏览器显示运行结果。浏览器地址栏地址为http://localhost:8088/JavaWebTest/,其中http://localhost:8088/为web服务器的地址,JavaWebTest为web应用程序上下文路径。

思考:

① 喜欢专研的同学可能会问到,Netbeans IDE是如何和Tomca7服务器连接、管理和加载运行我们的Web项目呢?如果不知道,请去D:tomcat7confCatalinalocalhost 目录下一探究竟吧。

② 当我们运行web应用程序时,为什么能够自动加载项目中的index.jsp文件运行呢?

2、简单Web应用程序编写(此题在第1题的基础上编写)

⑴ 添加Sql Server驱动程序sqljdbc4.jar和JSTL核心标记库standard.jar、jstl.jar到库引用路径中。

在项目文件夹的WEB-INF目录下新建lib目录,然后将下载的三个库文件放到其中。

在项目资源管理器中展开库节点,然后在d出的菜单中选择“添加JAR/文件夹”,然后选择刚刚添加进WEB-INF/lib文件夹下的三个库文件,选择“打开”,此时会在库引用路径中添加三个库文件的引用。如下图所示:

⑵ 将我们前面实验中已经编写好的数据库访问接口IStudentDAO.java、接口实现类StudentDAOImpl、学生表模型类Student.java、工厂类DAOFactory.java和数据库连接类DatabaseBean.java复制到项目文件中(这里可以再次体会到代码重用的重要性)。包结构如下图所示:

⑶ 修改index.jsp页面的内容如下:

<%@page import="com.mis.model.Student"%>

<%@page import="java.util.*"%>

<%@page import="com.mis.util.*"%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>

    

        

        首页面

    

    

        显示所有学生信息内容

        

            

                

                    学生学号

                    学生姓名

                    学生性别

                    学生年龄

                    学生系部

                

            

            

                <%

                    List students = DaoFactory.getStudentDao().getAllStudents();

                    for (Student stu : students) {

                %>

                

                    <%=stu.getSno()%>

                    <%=stu.getSname()%>

                    <%=stu.getSsex()%>

                    <%=stu.getSage()%>

                    <%=stu.getSdept()%>

                

                <%

                    }

                %>

            

        

    

运行index.jsp页面,在浏览器当中将会显示出所有学生信息记录内容。我们将JSP脚本和网页元素内容融合在一起输出页面内容,这种方式对小型应用程序来说简单可行,但对大型项目的代码管理和维护工作量很大,不利于程序员和美工人员的分工。更好的方式是采用MVC思想,将项目进行分层组织管理,JSP页面负责视图(V)的显示,Servlet脚本负责控制(C)。下面我们将修改代码,还是上面显示所有学生记录的效果。这回采用MVC的思想进行编写,新建一个servlet和一个jsp页面,当项目运行时,首先调用控制层的Servlet,由Servlet负责将要显示的所有数据查询出来,以集合对象的形式放到request对象当中,然后转发forward到display.jsp页面显示出来。

⑷ 编写控制层的servlet(DisplayServlet.java)

在项目资源管理器的源包节点,右键选择菜单“新建”>“Servlet…”。如果在“新建”菜单中没有“Servlet…”选项,则选择“其他…”,然后在类别中选择“Web”,在文件类型中选择“Servlet”。

在d出New Sevlet对话框中,我们输入要新建的servlet名称为DisplayServlet,包名为com.mis.servlet,然后选择下一步,在配置Servlet部署中将“将信息添加到部署描述符(web.xml)”前的勾选上。这会将新建的servlet配置信息注册到部署描述符web.xml中,同时会在项目的WEB-INF文件夹下新建web.xml文件。

⑸ 打开web.xml文件,我们发现IDE已经帮我们写好了servlet的配置信息。我们注意到,web.xml文件选项卡上有分类显示的按钮,点击不同的分类可以看到图形化的配置信息内容。如下图所示:

切换到“页面”视图,在欢迎文件中填入我们刚刚创建的DisplayServlet名称,这样,当项目运行后,首先会自动调用DisplayServlet。

⑹ 打开刚刚创建的DisplayServlet.java文件,IDE已经帮我们写好了大部分代码结构。其中,processRequest方法代码为通过PrintWriter对象向客户端输出HTML页面内容。

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        try {

            

            out.println("");

            out.println("");

            out.println("");

            out.println("Servlet DisplayServlet");            

            out.println("");

            out.println("");

            out.println("Servlet DisplayServlet at " + request.getContextPath() + "");

            out.println("");

            out.println("");

        } finally {

            out.close();

        }

}

运行项目,会在客户端默认浏览器中显示“Servlet DisplayServlet at /JavaWebTest”这样一段文字。

⑺ 修改DisplayServlet.java文件中的processRequest方法,查询出所有学生记录内容以集合对象的形式存放到request的属性当中,然后转发到display.jsp页面去显示查询出的学生记录。代码如下所示:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");

        List students = DaoFactory.getStudentDao().getAllStudents();

        request.setAttribute("students", students);

        request.getRequestDispatcher("display.jsp").forward(request, response);

    }

⑻ 在项目资源管理器的web页节点,右键选择菜单“新建”>“JSP…”。如果在“新建”菜单中没有“JSP…”选项,则选择“其他…”,然后在类别中选择“Web”,在文件类型中选择“JSP”,新建一个名称为display.jsp的页面。修改display.jsp页面代码如下所示:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    

        

        显示学生信息内容

    

    

        利用EL表达式和核心标记库显示所有学生信息内容

        

            

                

                    学生学号

                    学生姓名

                    学生性别

                    学生年龄

                    学生系部

                

            

            

                

                    

                        ${stu.sno}

                        ${stu.sname}

                        ${stu.ssex}

                        ${stu.sage}

                        ${stu.sdept}

                    

                

            

        

插入学生记录

    

运行项目,同样将会在浏览器中显示出和index.jsp页面同样效果的数据。但从代码来看,display.jsp页面显得更为优雅,所有代码都是通过标签的形式展现出来,这对美工人员来说更易于展现视图层的内容。

3、实现“插入学生记录”功能

⑴ 在项目资源管理器的web页节点,右键选择菜单“新建”>“JSP…”。如果在“新建”菜单中没有“JSP…”选项,则选择“其他…”,然后在类别中选择“Web”,在文件类型中选择“JSP”,新建一个名称为insert.jsp的页面,我们将在这个页面中创建一个表单,用来提交学生表数据。修改insert.jsp页面代码如下所示:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

    

        

        插入学生记录

    

    

        插入学生记录!

        

${insertErr}

        

    

⑵ 在insert.jsp页面代码中,我们注意到表单是以post的方式提交到InsertServlet中去处理。我们在com.mis.servlet包中新建一个InsertServlet.java文件,同样将InsertServlet配置信息注册到部署描述符文件web.xml中。修改InsertServlet.java文件中processRequest方法代码如下所示:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

   // 注意下面两行代码的关键作用

        request.setCharacterEncoding("UTF-8");

        response.setContentType("text/html;charset=UTF-8");

        String sno = request.getParameter("sno");

        String sname = request.getParameter("sname");

        String ssex = request.getParameter("ssex");

        String sage = request.getParameter("sage");

        String sdept = request.getParameter("sdept");

        PrintWriter out = response.getWriter();

        try {

            out.println("");

            out.println("");

            out.println("");

            out.println("Servlet Insert");

            out.println("");

            out.println("");

            out.println("插入的学生信息内容");

            out.println("学生学号:" + sno);

            out.println("学生姓名:" + sname);

            out.println("学生性别:" + ssex);

            out.println("学生年龄:" + sage);

            out.println("学生系部:" + sdept);

            out.println("");

            out.println("");

        } finally {

            out.close();

        }

    }

运行insert.jsp页面,随意填入一些信息(带中文字符的信息),然后提交页面,InsertServlet接收到我们提交的数据后,将信息在浏览器中输出。我们发现,浏览器能够正常显示出数据内容。

⑶ 虽然InsertServlet已经能够显示出正确的内容,但一般Servlet只负责做控制层,我们希望InsertServlet来处理插入学生数据的工作,将数据显示功能转发给其它页面处理。修改InsertServlet.java文件中的processRequest方法代码如下:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");

        response.setContentType("text/html;charset=UTF-8");

        String sno = request.getParameter("sno");

        String sname = request.getParameter("sname");

        String ssex = request.getParameter("ssex");

        String sage = request.getParameter("sage");

        String sdept = request.getParameter("sdept");

        Student stu = new Student();

        stu.setSno(sno);

        stu.setSname(sname);

        stu.setSsex(ssex);

        stu.setSage(Integer.parseInt(sage));

        stu.setSdept(sdept);

        if (DaoFactory.getStudentDao().insertStudent(stu)) {

            response.sendRedirect(request.getContextPath() + "/DisplayServlet");

        } else {

            request.setAttribute("insertErr", "插入信息失败,请检查原因!");

            request.getRequestDispatcher("insert.jsp").forward(request, response);

        }

    }

此时,当我们再次运行insert.jsp页面,提交数据后,InsertServlet负责将数据插入到数据库。当插入成功时,页面重定向到DisplayServlet显示所有学生数据信息;插入失败时,将错误提示信息封装到request属性当中,转发到原来的insert.jsp页面,在insert.jsp页面中显示出错信息。

出错信息由insert.jsp页面中这段代码负责显示:

${insertErr}

4、利用所学知识尝试编写删除学生数据、修改学生数据和查询指定学号学生数据的功能。

删除学生数据

request.setCharacterEncoding("gbk");

         Class.forName("com.mysql.jdbc.Driver");

         Connection con = DriverManager.getConnection(

                 "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8", "root", "root");

         Statement stmt = con.createStatement();

         String id = request.getParameter("id");

         int i = stmt.executeUpdate("delete from student where id=" + id);

         if (i == 1) {

} else {

         stmt.close();

         con.close();

修改学生数据

request.setCharacterEncoding("utf-8");

         int id = Integer.parseInt(request.getParameter("id"));

         String name = request.getParameter("name");

         String sex = request.getParameter("sex");

         String birthday = request.getParameter("birthday");

         String address = request.getParameter("address");

         Class.forName("com.mysql.jdbc.Driver");

         Connection con = DriverManager.getConnection(

                 "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8", "root", "root");

         Statement stmt = con.createStatement();

         String sql = "update student set id = '" + id + "',name='" + name + "',

 "'where id=" + id;

         int i = stmt.executeUpdate(sql);

         if (i == 1) {

} else {

}

         stmt.close();

        con.close();

查询指定学号学生数据

request.setCharacterEncoding("gbk");

         Class.forName("com.mysql.jdbc.Driver");

         Connection con = DriverManager.getConnection(

                 "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8", "root", "root");

         Statement stmt = con.createStatement();

         String id = request.getParameter("id");

         int i = stmt.executeUpdate("delete from student where id=" + id);

         if (i == 1) {

} else {

}

         stmt.close();

        con.close();


5、实验总结

    请书写你对本次实验有哪些实质性的收获和体会,以及对本次实验有何良好的建议?

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5619934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存