3.7 Struts2综合应用实例--添加学生信息

css

在该实例中,经过构建一个添加学生信息项目,来综合应用Struts 2的知识点,包括标签、Struts 2配置等。首先来看看添加学生信息的界面,如图3.19所示。
html

 图3.19 添加学生信息界面java


1. 创建数据库

首先创建数据库XSCJ,创建学生表XSB。node

项目名 列名 数据类型 是否可空 默认值 说明
学号 XH char(6)
主键
姓名 XM char(8)


性别 XB bit


出生时间 CSSJ datetime

专业 ZY char(20)


备注 BZ varchar(500)

2. 创建Web项目

打开MyEclipse,创建一个Web项目,命名为“Example_Struts”。web

3. 加载Struts 2的基本类库

该步骤与3.2.1节中的第3步步骤相同,这里再也不赘述。ajax

4. 修改web.xml

其内容见3.2.1节第4步sql

5. 创建stu.jsp文件

在项目的WebRoot文件夹下创建stu.jsp文件,代码。数据库

<%@ page language="java" pageEncoding="utf-8"%> 
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
    <head>
        <s:head />
    </head>
    <body >
        <h3>添加学生信息</h3>
        <s:form action="save.action" method="post" theme="simple">
            <table>
                <tr>
                    <td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td>
                </tr>
                <tr>
                    <td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td>
                </tr>
                <tr>
                    <td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',2:'女'}" value="1"></s:radio></td>
                </tr>
                <tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td> 
                </tr>
                <tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj" displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> 
                </tr>
                <tr>
                    <td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td>
                </tr>
                <tr>
                    <td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td>
                </tr>
            </table>
        </s:form>
    </body>
</html>

Struts2的标签有自动排版功能。若是想本身排版,form标签中加入theme="simple",但加入该元素后,标签中的label属性就没用了。apache


备注:若是是比较新的版本(好比我用的2.2.1版本),会报错“No tag "datetimepicker" defined in tag library imported with prefix "s"”。浏览器

缘由:新版本中把struts2.0中的和ajax相关的,如datetimepicker,tree,treenode 都移动到了dojo中了

解决方式:

一、在jsp文件中加入<%@ taglib uri="/struts-dojo-tags" prefix="sx"%>和<sx:head/>

二、改成<sx:datetimepicker></sx:datetimepicker>

三、struts2-dojo-plugin-2.2.1.jar拷贝到/WEB-INF/lib下

四、在struts.xml增长配置 

<filter-mapping>    
    <filter-name>struts2</filter-name>    
    <url-pattern>/struts/*</url-pattern>    
</filter-mapping>


备注:

还可能遇到datetimepicker的乱码问题,显示的时候月份从一月到八月均可以正常显示,而到九月,十月就乱码。

解决方式一(这种方式会致使没有显示中文的“月”)

在 <sd:head />中加入:extraLocales="UTF-8"

在 <sd:datetimepicker .../>中加入:language="UTF-8"

解决方式二(推荐)

从新修改struts源码中的 dojo_zh.js和dojo_zh-cn.js文件(文件位置在: struts2-dojo-plugin-2.1.6.jar\org.apache.struts2\static\dojo\nls\下),把文件中乱码部分修改为正确的中文。

附:修改后的文件《3.7 Struts2综合应用实例的附件



6. 创建表对应的JavaBean和DBConn类

在src文件夹下新建包“org.model”,在该包下建class文件,命名为“Xsb”,该类中有6个字段,分别为xh、xm、xb、zy、cssj和bz,并生成它们的getter和setter方法,代码以下:

package org.model; 
import java.sql.Date;
public class Xsb {
    private String xh;
    private String xm;
    private byte xb;
    private String zy;
    private Date cssj;
    private String bz;
    // 生成它们的getter和setter方法
    public String getXh() {
        return xh;
    }
    public void setXh(String xh) {
        this.xh = xh;
    }
    public String getXm() {
        return xm;
    }
    public void setXm(String xm) {
        this.xm = xm;
    }
    public byte getXb() {
        return xb;
    }
    public void setXb(byte xb) {
        this.xb = xb;
    }
    public String getZy() {
        return zy;
    }
    public void setZy(String zy) {
        this.zy = zy;
    }
    public Date getCssj() {
        return cssj;
    }
    public void setCssj(Date cssj) {
        this.cssj = cssj;
    }
    public String getBz() {
        return bz;
    }
    public void setBz(String bz) {
        this.bz = bz;
    }
}

注意,cssj为java.sql.Date类型。

在src文件夹下创建包org.work,在该包下创建class文件,命名为“DBConn”,该类负责和数据库链接,代码。

package org.work; 
import java.sql.*;
import org.model.Xsb;
public class DBConn {
    Connection conn;
    PreparedStatement pstmt;
    public DBConn(){
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +"databaseName=XSCJ","sa","sa");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    // 添加学生
    public boolean save(Xsb xs){
        try{
            pstmt=conn.prepareStatement("insert into XSB (XH,XM,XB,ZY,CSSJ,BZ) values(?,?,?,?,?,?)");
            pstmt.setString(1, xs.getXh());
            pstmt.setString(2, xs.getXm());
            pstmt.setByte(3, xs.getXb());
            pstmt.setString(4, xs.getZy());
            pstmt.setDate(5, xs.getCssj());
            pstmt.setString(6, xs.getBz());//注意顺序
            pstmt.executeUpdate();
            return true;
        }catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }
}

补充:

使用sql语句:exec sys.sp_readerrorlog 0, 1, 'listening'能够查看sql server 2008 r2 的监听端口

7. 创建Action类SaveAction

SaveAction.java代码。

package org.action; 
import org.model.Xsb;
import org.work.DBConn;
import com.opensymphony.xwork2.ActionSupport;
public class SaveAction extends ActionSupport{
    private Xsb xs;
    public Xsb getXs() {
        return xs;
    }
    public void setXs(Xsb xs) {
        this.xs=xs;
    }
    public String execute() throws Exception {
        DBConn db=new DBConn();
        Xsb stu=new Xsb();
        stu.setXh(xs.getXh());
        stu.setXm(xs.getXm());
        stu.setXb(xs.getXb());
        stu.setZy(xs.getZy());
        stu.setCssj(xs.getCssj());
        stu.setBz(xs.getBz());
        if(db.save(stu)){
            return SUCCESS;
        }else
            return ERROR;
    }
}


8. 建立并配置struts.xml文件

在src文件夹下创建该文件,代码以下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<package name="default" extends="struts-default">
    <action name="save" class="org.action.SaveAction">
        <result name="success">/success.jsp</result>
        <result name="error">/stu.jsp</result>
    </action>
</package>
</struts>


9. 建立success.jsp页面

在WebRoot文件夹下建立success.jsp文件,代码以下:

<%@ page language="java" pageEncoding="utf-8"%>
<html>
  <head>
  </head>
  <body>
    恭喜你,添加成功!
  </body>
</html>

10. 部署运行

部署后,启动Tomcat,在浏览器中输入“http://localhsot:8080/Example_Struts/stu.jsp”,输入要添加的学生信息后,单击【添加】按钮,若是添加成功就会跳转到success.jsp页面。


附:目录《JavaEE基础实用教程》笔记说明

相关文章
相关标签/搜索