spring+struts+hibernate

来源:互联网 发布:php下载安装教程 编辑:程序博客网 时间:2024/05/10 05:36

注意:特别感谢鲁庆贺好同志的无私奉献。

目录

1. Hibernate 3

1.1简介 3

1.2配置 3

1.2.1导入oracle驱动 3

1.2.2导入hibernate 3

1.2.3配置hibernate.cfg.xml 8

1.3创建实体及实体映射xml文件 9

1.3.1 Student 9

1.3.2映射xml文件:Student.hbm.xml 10

1.4创建Service接口及其实现类 10

1.4.1 StudentService接口 10

1.4.2 StudentServiceImp 11

1.5创建Dao接口及其实现类 12

1.5.1 StudentDao接口 12

1.5.2 StudentDaoImp 13

1.6 15

1.6.1项目结构图 15

1.6.2 hibernate 16

2. spring 16

2.1简介 16

2.2配置 17

2.2.1导入spring 17

2.2.2配置applicationContext.xml 20

2.3修改类中的实例化方式,改为xml文件注解 21

2.3.1修改实例化方 21

2.3.2修改applicationContext.xml 23

2.4 springhibernate结合 23

2.4.1 Dao层实现类中继承HibernateDaoSupport 23

2.4.1通过生成HibernateTemplate操作数据库 23

2.4.1 StuDaoImp代码 23

3. struts 27

3.1简介 27

3.2简单配置 27

3.2.1导入struts 27

3.2.2 web.xml 29

3.2.3 jsp页面提交请求(以ajax方式举例) 29

3.2.4创建action 31

3.2.5配置struts.xml 32

3.2.6测试验证 32

3.2.7进阶》存储数据到数据库》返回值到页面 32

3.3整合strutsspring 33

3.3.1导入structs 2 spring library,如果前面导入了就不要再导入 33

3.3.2配置applicationContext.xml 34

4.项目实践中的零碎知识点 35

4.1 jquery<select id=”selector”>的操作 35

4.1.1设置valuepxx的项选中 35

4.1.2设置textpxx的项选中 35

4.1.3获取当前选中项的value 35

4.1.4获取当前选中项的text 35

4.1.5级联 35

4.2 structs2+ajax 36

4.2.1 ajax 36

4.2.2 Action 36

4.2.3 structs.xml 37

4.3页面小技巧 37

4.3.1正则表达式只能输入数字 37

4.3.2捕获回车键》提交表单 37

4.4登录拦截器 37

4.4.1 web.xml配置 37

4.4.2定义拦截器类LoginFilter 38

4.5报表的生成 39

4.5.1查询所需sql 39

4.5.2查询结果 40

4.5.3 hibernate查询结果放入Map columValuekey 40

4.6 JFreeChart 41

4.6.1 jar 41

4.6.2 java源码demo 41

4.6.3 jsp取图 43

4.6.4效果演示 44

4.7 jquery日历插件 44

4.7.1引入 44

4.7.2 functon 44

4.7.3输入框 45

4.8登录验证码 45

4.8.1 action源代码 45

4.8.2 jsp页面 47

4.9分页 47

 


 

ssh实训学习笔记

1. Hibernate

1.1 简介

 

1.2配置

1.2.1 导入oracle驱动

oracle安装目录下找到驱动,如:D:\oracle\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar导入myeclipse中项目web-info下的lib

1.2.2导入hibernate

 

1.2.2.1 右键项目myeclipse—add Hibernate Capabilities…

 

1.2.2.2 选择hibernate3.3,注意选择复制到lib(copy checked library……)

 

1.2.2.3 生成xml配置文件

 

1.2.2.4 填写连接数据库属性

 

1.2.2.5 创建HibernateSessionFactory

 

 

1.2.3 配置hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->

<hibernate-configuration>

 

<session-factory>

<property name="dialect">

org.hibernate.dialect.Oracle9Dialect

</property>

<property name="connection.url">

jdbc:oracle:thin:@localhost:1521:ORCL

</property>

<property name="connection.username">username</property>

<property name="connection.password">password</property>

<property name="connection.driver_class">

oracle.jdbc.driver.OracleDriver

</property>

<!-- 显示sql语句 -->

<property name="show_sql">true</property>

<!-- 自动更新表 -->

<property name="hbm2ddl.auto">update</property>

<!-- 自动提交 -->

<property name="connection.autocommit">true</property>

<!-- 加载映射xml文件 -->

<!--如:<mapping resource="cn/edu/zzuli/wlps/entity/Student.hbm.xml" />-->

 

</session-factory>

 

</hibernate-configuration>

1.3 创建实体及实体映射xml文件

1.3.1 Student

package cn.edu.zzuli.wlps.entity;

 

public class Student {

private Integer stuId;

private String stuName;

private String stuSex;

public Student() {

super();

// TODO Auto-generated constructor stub

}

public Student(Integer stuId, String stuName, String stuSex) {

super();

this.stuId = stuId;

this.stuName = stuName;

this.stuSex = stuSex;

}

public Integer getStuId() {

return stuId;

}

public void setStuId(Integer stuId) {

this.stuId = stuId;

}

public String getStuName() {

return stuName;

}

public void setStuName(String stuName) {

this.stuName = stuName;

}

public String getStuSex() {

return stuSex;

}

public void setStuSex(String stuSex) {

this.stuSex = stuSex;

}

}

1.3.2 映射xml文件:Student.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC 

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

    <hibernate-mapping>

     <class name="cn.edu.zzuli.wlps.entity.Student" table="STUDENT">

     <id name="stuId" column="STU_ID">

     <generator class="native"></generator>

     </id>

     <property name="stuName" column="STU_NAME"></property>

     <property name="stuSex" column="STU_SEX"></property>

     </class>

</hibernate-mapping>

1.4 创建Service接口及其实现类

1.4.1 StudentService接口

package cn.edu.zzuli.wlps.service;

 

import java.util.ArrayList;

 

import cn.edu.zzuli.wlps.entity.Student;

 

public interface StuService {

public boolean addStu(Student stu);

public boolean updateStu(Student stu);

public boolean delStu(Integer id);

public ArrayList<Student> getStuList();

public Student getStu(Integer id);

public boolean update(Student stu);

public boolean delete(Student stu);

}

1.4.2 StudentServiceImp

package cn.edu.zzuli.wlps.service.imp;

 

import java.util.ArrayList;

import java.util.List;

 

import cn.edu.zzuli.wlps.dao.StuDao;

import cn.edu.zzuli.wlps.dao.imp.StuDaoImp;

import cn.edu.zzuli.wlps.entity.Student;

import cn.edu.zzuli.wlps.service.StuService;

 

public class StuServiceImp implements StuService {

private StuDao stuDao = new StuDaoImp();

public StuDao getStuDao() {

return stuDao;

}

 

public void setStuDao(StuDao stuDao) {

this.stuDao = stuDao;

}

 

@Override

public boolean addStu(Student stu) {

return stuDao.addStu(stu);

}

 

@Override

public boolean updateStu(Student stu) {

return stuDao.updateStu(stu);

}

 

@Override

public boolean delStu(Integer id) {

return stuDao.delStu(id);

}

 

@Override

public ArrayList<Student> getStuList() {

return stuDao.getStuList();

}

 

@Override

public Student getStu(Integer id) {

return stuDao.getStu(id);

}

 

@Override

public boolean update(Student stu) {

return stuDao.update(stu);

}

@Override

public boolean delete(Student stu) {

return stuDao.delete(stu);

}

 

}

1.5 创建Dao接口及其实现类

1.5.1 StudentDao接口

package cn.edu.zzuli.wlps.dao;

 

import java.util.ArrayList;

 

import cn.edu.zzuli.wlps.entity.Student;

 

public interface StuDao {

public boolean addStu(Student stu);

public boolean updateStu(Student stu);

public boolean delStu(Integer id);

public ArrayList<Student> getStuList();

public Student getStu(Integer id);

public boolean update(Student stu);

public boolean delete(Student stu);

}

1.5.2 StudentDaoImp

package cn.edu.zzuli.wlps.dao.imp;

 

import java.io.Serializable;

import java.sql.SQLException;

import java.util.ArrayList;

 

import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.springframework.orm.hibernate3.HibernateCallback;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 

import cn.edu.zzuli.wlps.dao.StuDao;

import cn.edu.zzuli.wlps.entity.Student;

import cn.edu.zzuli.wlps.sf.HibernateSessionFactory;

 

public class StuDaoImpextends HibernateDaoSupportimplements StuDao {

@Override

public int addStu(Student stu) {

int rows=0;

Session s = HibernateSessionFactory.getSession();

try {

s.beginTransaction();

s.save(stu);

s.beginTransaction().commit();

rows=1;

} catch (Exception e) {

System.out.println("添加Stu出现异常!");

}finally{

s.close();

}

return rows;

}

 

@Override

public int updateStu(Student stu) {

Session s = HibernateSessionFactory.getSession();

s.beginTransaction();

Query q = s.createQuery("update Student s set s.stuName=?,s.stuSex=? where stuId=?");

q.setString(0, stu.getStuName());

q.setString(1,stu.getStuSex());

q.setInteger(2, stu.getStuId());

int rows = q.executeUpdate();

s.beginTransaction().commit();

s.close();

return rows;

}

 

@Override

public int delStu(Student stu) {

Session s = HibernateSessionFactory.getSession();

s.beginTransaction();

Query q = s.createQuery("delete from Student s where s.stuId=?");

q.setInteger(0, stu.getStuId());

int rows = q.executeUpdate();

s.beginTransaction().commit();

s.close();

return rows;

}

 

@Override

public ArrayList<Student> getStuList(String hql) {

Session s = HibernateSessionFactory.getSession();

Query q = s.createQuery(hql);

s.beginTransaction();

ArrayList<Student> list = (ArrayList<Student>) q.list();

s.beginTransaction().commit();

s.close();

return list;

}

 

@Override

public Student getStu(Integer id) {

Session s = HibernateSessionFactory.getSession();

s.beginTransaction();

Student stu = (Student) s.get(Student.class, id);

s.beginTransaction().commit();

s.close();

return stu;

}

 

@Override

public void update(Student stu) {

Session s = HibernateSessionFactory.getSession();

s.beginTransaction();

s.update(stu);

s.beginTransaction().commit();

s.close();

}

}

1.6

1.6.1 项目结构图

 

1.6.2 hibernate

 

2. spring

2.1 简介

2.2 配置

2.2.1 导入spring

2.2.1.1 右键项目myeclipse—add spring …

 

2.2.1.2 选择spring 3.0 library,共有4个包

Spring 3.0 AOP library –AOP

Spring 3.0 core library –》核心包

spring 3.0 persistent core library –持久化,整合springhibernate

Spring 3.0 web library –支持struts

 

2.2.1.3选择添加xml文件

 

 

2.2.1.4 取消勾选创建sessionFactory

 

2.2.2 配置applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans

xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="configLocation">

<value>classpath:hibernate.cfg.xml</value>

</property>

</bean>

<bean id="stuDao" class="cn.edu.zzuli.wlps.dao.imp.StuDaoImp">

<property name="sessionFactory">

<ref bean="sf"/>

</property>

</bean>

<bean name="stuService" class="cn.edu.zzuli.wlps.service.imp.StuServiceImp">

<!-- nameStuServiceImp类中的属性名一致-->

<property name="stuDao">

<ref bean="stuDao"/>

</property>

</bean>

<bean name="acountService" class="cn.edu.zzuli.wlps.service.imp.AccountServiceImp">

<property name="ad">

<bean class="cn.edu.zzuli.wlps.dao.imp.AccountDaoImpl"></bean>

</property>

</bean>

</beans>

2.3 修改类中的实例化方式,改为xml文件注解

2.3.1 修改实例化方

2.3.1.1 修改new()方法举例

private StuDao stuDao = new StuDaoImp();

改为:private StuDao stuDao;

2.3.1.2 增加gettersetter方法

public StuDao getStuDao() {

return stuDao;

}

public void setStuDao(StuDao stuDao) {

this.stuDao = stuDao;

}

2.3.1.3 StudentServiceImp

package cn.edu.zzuli.wlps.service.imp;

 

import java.util.ArrayList;

import java.util.List;

 

import cn.edu.zzuli.wlps.dao.StuDao;

import cn.edu.zzuli.wlps.dao.imp.StuDaoImp;

import cn.edu.zzuli.wlps.entity.Student;

import cn.edu.zzuli.wlps.service.StuService;

 

public class StuServiceImp implements StuService {

private StuDao stuDao;

public StuDao getStuDao() {

return stuDao;

}

 

public void setStuDao(StuDao stuDao) {

this.stuDao = stuDao;

}

 

@Override

public boolean addStu(Student stu) {

return stuDao.addStu(stu);

}

 

@Override

public boolean updateStu(Student stu) {

return stuDao.updateStu(stu);

}

 

@Override

public boolean delStu(Integer id) {

return stuDao.delStu(id);

}

 

@Override

public ArrayList<Student> getStuList() {

return stuDao.getStuList();

}

 

@Override

public Student getStu(Integer id) {

return stuDao.getStu(id);

}

 

@Override

public boolean update(Student stu) {

return stuDao.update(stu);

}

@Override

public boolean delete(Student stu) {

return stuDao.delete(stu);

}

 

}

2.3.2 修改applicationContext.xml

applicationContext.xml中添加映射信息,结果如2.2.2

2.4 springhibernate结合

2.4.1 Dao层实现类中继承HibernateDaoSupport

public class StuDaoImp extends HibernateDaoSupport implements StuDao{}

2.4.1 通过生成HibernateTemplate操作数据库

getHibernateTemplate().—save()/find()/execute(new HibernateCallback<Object>({}));

2.4.1 StuDaoImp代码

package cn.edu.zzuli.wlps.dao.imp;

 

import java.io.Serializable;

import java.sql.SQLException;

import java.util.ArrayList;

 

import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.springframework.orm.hibernate3.HibernateCallback;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

 

import cn.edu.zzuli.wlps.dao.StuDao;

import cn.edu.zzuli.wlps.entity.Student;

import cn.edu.zzuli.wlps.sf.HibernateSessionFactory;

 

public class StuDaoImp extends HibernateDaoSupport implements StuDao {

HibernateTemplate template;

Serializable serializable;

@Override

public boolean addStu(Student stu) {

boolean result = true;

template = getHibernateTemplate();

try {

serializable = template.save(stu);

} catch (Exception e) {

e.printStackTrace();

result = false;

}

if (serializable == null) {

result = false;

}

return result;

}

 

@Override

public boolean updateStu(final Student stu) {

template = getHibernateTemplate();

int rows = template.execute(new HibernateCallback<Integer>() {

 

@Override

public Integer doInHibernate(Session s)

throws HibernateException, SQLException {

Query qu = s.createQuery("update Student s set s.stuName=?,s.stuSex=? where id=?");

qu.setString(0, stu.getStuName());

qu.setString(1, stu.getStuSex());

qu.setInteger(2, stu.getStuId());

return qu.executeUpdate();

}

});

return rows < 1 ? false:true;

}

 

@Override

public boolean delStu(final Integer id) {

template = getHibernateTemplate();

int rows = template.execute(new HibernateCallback<Integer>() {

@Override

public Integer doInHibernate(Session s) throws HibernateException,

SQLException {

Query qu = s.createQuery("delete from Student where stuId=?");

qu.setInteger(0, id);

return qu.executeUpdate();

}

});

return rows < 1 ? false:true;

}

 

@Override

public ArrayList<Student> getStuList() {

template = getHibernateTemplate();

return (ArrayList<Student>) template.find("from Student");

}

 

@Override

public Student getStu(final Integer id) {

template = getHibernateTemplate();

return template.execute(new HibernateCallback<Student>() {

@Override

public Student doInHibernate(Session s)

throws HibernateException, SQLException {

s.beginTransaction();

Student stu = (Student) s.get(Student.class , id);

s.beginTransaction().commit();

s.close();

return stu;

}

});

}

 

@Override

public boolean update(Student stu) {

boolean result = true;

template = getHibernateTemplate();

try {

template.update(stu);

} catch (Exception e) {

e.printStackTrace();

result = false;

}

return result;

}

 

@Override

public boolean delete(Student stu) {

boolean result = true;

template = getHibernateTemplate();

try {

template.delete(stu);

} catch (Exception e) {

e.printStackTrace();

result = false;

}

return result;

}

}

3. struts

3.1 简介

3.2 简单配置

3.2.1 导入struts

3.2.1.1 右键项目myeclipse—add struts….

 

3.2.1.2 选择struts2.1

 

3.2.1.3 选择library---finish

Struts 2 Core Library –》必须的,struts核心包

Struts 2 Spring Library –》整合spring的时候再添加,纯struts不需要这个,加上会报错

3.2.2 web.xml

3.2.2.1 myeclipse自动在web.xml中添加struts入口,所有以.action结尾的请求都会被拦截

3.2.2.2 web.xml源码

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" 

xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <display-name></display-name>

  <welcome-file-list>

    <welcome-file>main.jsp</welcome-file>

  </welcome-file-list>

  <filter>

   <filter-name>struts2</filter-name>

   <filter-class>

   org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

   </filter-class>

  </filter>

  <filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>*.action</url-pattern>

  </filter-mapping></web-app>

3.2.3 jsp页面提交请求(以ajax方式举例)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'test.jsp' starting page</title>

    

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css"href="styles.css">

-->

<script type="text/javascript" src="js/jQuery1.7.2.js"></script>

<script type="text/javascript">

function doSave(){

     var stuName=$("#stuName").val();

     var stuSex=$("#stuSex").val();

     var stuAge=$("#stuAge").val();

     var param = "stuName="+stuName+"&stuSex="+stuSex+"&stuAge="+stuAge;

     $.ajax({

     url:"stuAction.action",

     data:param,

     type:"POST",

     success:function(data){

     alert(data.msg);

     }

     });

     }

    </script>

  </head>

  

  <body>

     姓名<input type="text" id="stuName"><br>

     性别<input type="text" id="stuSex"><br>

     年龄<input type="text" id="stuAge"><br>

     <input type="button" value="保存" onclick="doSave();">

  </body>

</html>

3.2.4 创建action

3.2.4.1 创建action方法cn.edu.zzuli.wlps.action.StuAction并继承com.opensymphony.xwork2.ActionSupport

3.2.4.2 定义属性及其gettersetter,用于接收请求中传来的值

3.2.4.3重写execute()方法

3.2.4.3 StuAction源码

package cn.edu.zzuli.wlps.action;

import com.opensymphony.xwork2.ActionSupport;

 

public class StuAction extends ActionSupport{

private String stuName;

private String stuSex;

private String stuAge;

@Override

public String execute()throws Exception {

System.out.println("stuName===="+stuName);

System.out.println("stuSex===="+stuSex);

System.out.println("stuAge===="+stuAge);

return null;

}

/*-------------------getter and setter--------------------------*/

public String getStuName() {

return stuName;

}

public void setStuName(String stuName) {

this.stuName = stuName;

}

public String getStuSex() {

return stuSex;

}

public void setStuSex(String stuSex) {

this.stuSex = stuSex;

}

public String getStuAge() {

return stuAge;

}

public void setStuAge(String stuAge) {

this.stuAge = stuAge;

}

}

3.2.5 配置struts.xml

<?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">

<struts>

<package name="index" extends="struts-default">

<action name="stuAction" class="cn.edu.zzuli.wlps.action.StuAction"></action>

</package>

</struts>    

3.2.6 测试验证

简单运行后,action层收到了传来的值并打印出来。

3.2.7 进阶—》存储数据到数据库》返回值到页面

详见3.3

 

3.3 整合strutsspring

3.3.1 导入structs 2 spring library,如果前面导入了就不要再导入

3.3.1.1 右键项目build path—add libraries—myeclipse library—》找到structs 2 spring library勾选finish

 

3.3.2配置applicationContext.xml

3.3.2.1 StuAction中添加StuService的实例化和getter,setter,具体的参考spring2.3

3.3.2.2 配置applicationContext.xml

<bean id="stuAction"class="cn.edu.zzuli.wlps.action.StuAction">

<property name="stuService">

<ref bean="stuService"/>

</property>

</bean>

3.3.2.3 配置Struts.xmlextendsstruts-default,但注意传json对象时extends="json-default"json-default继承了struts-default,同时导入需要导入ezmorph-1.0.6.jar

<?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">

<struts>

<package name="index" extends="json-default">

<!-- action name 跟请求的URL对应(去掉.action)classspring配置中查找id -->

<action name="stuAction" class="stuAction">

<!-- result namereturn对应  -->

<result name="addResult" type="json">

<param name="root">result</param>

</result>

</action>

</package>

</struts>    

 

4. 项目实践中的零碎知识点

4.1 jquery<select id=”selector”>的操作

4.1.1 设置valuepxx的项选中

$("#selector").val("pxx");

4.1.2 设置textpxx的项选中

$("#selector").find("option[text='pxx']").attr("selected",true);

这里有一个中括号的用法,中括号里的等号的前面是属性名称,不用加引号。很多时候,中括号的运用可以使得逻辑变得很简单。

4.1.3 获取当前选中项的value

$("#selector").val();

4.1.4 获取当前选中项的text

$("#selector").find("option:selected").text();

 这里用到了冒号,掌握它的用法并举一反三也会让代码变得简洁。

4.1.5 级联

很多时候用到select的级联,即第二个select的值随着第一个select选中的值变化。这在jquery中是非常简单的。

如:$("#selector1").change(function(){

     // 先清空第二个

      $("#selector2").empty();

     // 实际的应用中,这里的option一般都是用循环生成多个了

      var option = $("<option>").val(1).text("pxx");

      $("#selector2").append(option);

});

4.2 structs2+ajax

4.2.1 ajax

<script type="text/javascript">

$.ajax({

url:"mail_mailOptions.action",

type:"POST",

datatype:"json",

success:function (data){

for(vari =0 ;i<data.length;i++){

var param = "<option value='"+data[i].id+"'>"+data[i].mailName+"</option>";

$("#mail_addr").append(param);

}

},

/* statusCode: {

    400: function() {alert('400!');},

    404: function() {alert('404!');},

    200: function() {alert('200!');},

    503: function() {alert('503!');}

} */

});

 

</script>

4.2.2 Action

private JSONArray result;

public JSONArray getResult() {

return result;

}

 

public void setResult(JSONArray result) {

this.result = result;

}

public String mailOptions(){

List<Mail> list = mailService.selectAllMail();

result = JSONArray.fromObject(list);

System.out.println(result);

return "jsonObject";

}

4.2.3 structs.xml

<package name="mail" extends="json-default">

<action name="mail_*" class="mailAction" method="{1}">

<result name="jsonObject" type="json">

<param name="root">result</param>

</result>

</action>

</package>

4.3 页面小技巧

4.3.1正则表达式只能输入数字

onkeyup="this.value=this.value.replace(/[^\d]/g,'') "

4.3.2 捕获回车键》提交表单

onkeydown="if(event.keyCode==13){formName.submit();}"

4.4 登录拦截器

通过filter定义拦截器,防止未登录用户访问数据。

4.4.1 web.xml配置

  <!-- 定义登录拦截器 -->

  <filter>

   <filter-name>loginFilter</filter-name>

   <filter-class>cn.edu.zzuli.wl.filter.LoginFilter</filter-class>

  </filter>

  <filter-mapping>

   <filter-name>loginFilter</filter-name>

   <url-pattern>*.action</url-pattern>

  </filter-mapping>

  <filter-mapping>

   <filter-name>loginFilter</filter-name>

   <url-pattern>*.jsp</url-pattern>

  </filter-mapping>

4.4.2 定义拦截器类LoginFilter

package cn.edu.zzuli.wl.filter;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import cn.edu.zzuli.wl.entity.User;

 

 

public class LoginFilterimplements javax.servlet.Filter {

 

public void destroy() {

// TODO Auto-generated method stub

 

}

 

public void doFilter(ServletRequest req, ServletResponse resp,

FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

HttpServletRequest request = (HttpServletRequest)req;

HttpServletResponse response = (HttpServletResponse)resp;

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

HttpSession session = request.getSession();

//获取请求路径

String url = request.getRequestURI();

User user = (User) session.getAttribute("user");

//将请求路径以/分割

String[] urls = url.split("/");

//获取真实的请求

String filter = urls[urls.length - 1];

//如果是请求到达登陆界面或者登陆验证,不需要拦截

if("user_checkLogin.action".equals(filter)||"login.jsp".equals(filter)){

chain.doFilter(req, resp);

}else{

if(session.getAttribute("user")==null){

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<script type=\"text/javascript\">");

//out.println("alert('" +msg + "');");

out.println("window.open ('login.jsp','_parent');");

out.println("</script>");

out.println("</html>");

out.flush();

out.close();

}else{

chain.doFilter(req, resp);

}

}

 

}

 

public void init(FilterConfig arg0)throws ServletException {

// TODO Auto-generated method stub

 

}

 

}

4.5报表的生成

4.5.1 查询所需sql

SELECT

SUM (o.weight) AS weights,

SUM (o. VOLUME) AS volumes,

SUM (o.price) AS prices,

M .mailName AS mailName

FROM

order_table o,

mail_table M

WHERE

o.mail = M . ID

GROUP BY

mailName

4.5.2 查询结果

WEIGHTS

COLUMES

PRICES

MAILNAME

10

10

50

配送点一

 

 

 

 

 

 

 

 

 

4.5.3 hibernate查询结果放入Map columValuekey

4.5.3.1 demo1

public List getTheMapList(String sql) {

Session session = this.getSession();

SQLQuery q = (SQLQuery) session.createSQLQuery(sql).

setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 

List list = q.list();

session.close();

return list;

}

4.5.3.2 demo2

public List<Map<String, Object>> getOrderChartData() {

template = getHibernateTemplate();

List<Map<String, Object>> list = template.execute(new HibernateCallback<List<Map<String, Object>>>() {

@Override

public List<Map<String, Object>> doInHibernate(Session s)throws HibernateException,

SQLException {

String sql = "select sum(o.weight) as weights,sum(o.volume) as volumes ,sum(o.price) as prices ,m.mailName as mailName " +

"from order_table o,mail_table m " +

"where o.mail=m.id group by mailName";

SQLQuery q = (SQLQuery) s.createSQLQuery(sql)

.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);;

List<Map<String, Object>> resultList = q.list();

s.close();

return resultList;

}

});

return list;

}

4.6 JFreeChart

4.6.1 jar

jfreechart-1.0.13.jar

jcommon-1.0.16.jar

4.6.2 java源码demo

package cn.edu.zzuli.wl.utils;

 

import java.awt.Font;

import java.io.File;

import java.io.IOException;

import java.util.Date;

import java.util.List;

import java.util.Map;

 

import javax.servlet.ServletContext;

 

import org.apache.commons.lang.time.DateFormatUtils;

import org.apache.struts2.ServletActionContext;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.CategoryAxis3D;

import org.jfree.chart.axis.NumberAxis3D;

import org.jfree.chart.axis.NumberTickUnit;

import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.renderer.category.BarRenderer3D;

import org.jfree.data.category.DefaultCategoryDataset;

 

 

public class ChartUtils {

 

/**  

* @Name: getOrderWeightChart

* @Description:使用JFreeChart统计配送点订单质量

* @Create Date: 201573010:58:33(创建日期)

* @Parameters: List<Object[]> list 订单-配送点

* @Return: String 生成图片的名称

*/

public static String getOrderWeightChart(List<Map<String, Object>> list) {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

//添加数据

for(Map<String, Object> map:list){

dataset.addValue(Integer.parseInt(map.get("WEIGHTS").toString()), "所属配送点", map.get("MAILNAME").toString());

}

JFreeChart chart = ChartFactory.createBarChart3D("配送指标", //主标题的名称

"配送点", //categoryAxisLabel X轴的标签

"配送总质量",//valueAxisLabel Y轴的标签

dataset,  //图标显示的数据集合

PlotOrientation.VERTICAL, //orientation 图像的显示形式(水平或者垂直)

true,//legend 是否显示子标题

true,//tooltips 是否生成提示的标签 ,

true);//urls 是否生成URL链接

//处理图形上的乱码

//处理主标题的乱码

chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));

//处理子标题乱码

chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));

//获取图表区域对象

CategoryPlot categoryPlot = (CategoryPlot)chart.getPlot();

//获取X轴的对象

CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();

//获取Y轴的对象

NumberAxis3D numberAxis3D = (NumberAxis3D)categoryPlot.getRangeAxis();

//处理X轴上的乱码

categoryAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));

//处理X轴外的乱码

categoryAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));

//处理Y轴上的乱码

numberAxis3D.setTickLabelFont(new Font("宋体",Font.BOLD,15));

//处理Y轴外的乱码

numberAxis3D.setLabelFont(new Font("宋体",Font.BOLD,15));

//处理Y轴上显示的刻度,以1作为1

numberAxis3D.setAutoTickUnitSelection(false);

NumberTickUnit unit = new NumberTickUnit(1);

numberAxis3D.setTickUnit(unit);

//获取绘图区域对象

BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();

//设置柱形图的宽度

barRenderer3D.setMaximumBarWidth(0.07);

//在图形上显示数字

barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

barRenderer3D.setBaseItemLabelsVisible(true);

barRenderer3D.setBaseItemLabelFont(new Font("宋体",Font.BOLD,15));

ServletContext context = ServletActionContext.getServletContext();

String realPath = context.getRealPath("/chart");

String filename = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss");

//D盘目录下生成图片

File file = new File(realPath + "\\" + filename);

try {

ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);

} catch (IOException e) {

e.printStackTrace();

}

return filename;

}

}

4.6.3 jsp取图

<div align="center"><img src="chart/${fileName }" ></div>

4.6.4 效果演示

 

4.7 jquery日历插件

4.7.1 引入

<link rel="stylesheet" href="<%=basePath%>css/jcDate.css" />

<script src="<%=basePath%>js/jquery-1.7.2.js" type="text/javascript"></script>

<script src="<%=basePath%>js/jQuery-jcDate.js" type="text/javascript"></script>

4.7.2 functon

<script type="text/javascript">

$(function (){

$(".jcDate").jcDate({        

IcoClass : "jcDateIco",

Event : "click",

Speed : 100,

Left : 0,

Top : 28,

format : "-",

Timeout : 100

});

});

</script>

4.7.3 输入框

<input class="jcDate" style="width:200px; height:20px; line-height:20px; padding:4px;" />

4.8 登录验证码

4.8.1 action源代码

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

 

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class SafeCode extends HttpServlet {

 

//产生随机的字体  

    private Font getFont() {  

        Random random = new Random();  

        Font font[] = new Font[5];  

        font[0] = new Font("Ravie", Font.PLAIN, 24);  

        font[1] = new Font("Antique Olive Compact", Font.PLAIN, 24);  

        font[2] = new Font("Forte", Font.PLAIN, 24);  

        font[3] = new Font("Wide Latin", Font.PLAIN, 24);  

        font[4] = new Font("Gill Sans Ultra Bold", Font.PLAIN, 24);  

        return font[random.nextInt(5)];  

    }  

    

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

 // 设置响应头 Content-type类型  

response.setContentType("image/jpeg");  

        // 以下三句是用于设置页面不缓存  

response.setHeader("Pragma", "No-cache");  

response.setHeader("Cache-Control", "No-cache");  

response.setDateHeader("Expires", 0);  

  

        OutputStream os = response.getOutputStream();  

        int width = 83, height = 30;  

        // 建立指定宽、高和BufferedImage对象  

        BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  

  

        Graphics g = image.getGraphics(); // 该画笔画在image上  

        Color c = g.getColor(); // 保存当前画笔的颜色,用完画笔后要回复现场  

        g.fillRect(0, 0, width, height);  

          

  

        char[] ch = "abcdefghjkmnpqrstuvwxyz23456789".toCharArray(); // 随即产生的字符串 不包括 i l(小写L) o(小写O1(数字10(数字0)  

        int length = ch.length; // 随即字符串的长度  

        String sRand = ""; // 保存随即产生的字符串  

        Random random = new Random();  

        for (int i = 0; i < 4; i++) {  

            // 设置字体  

            g.setFont(getFont());  

            // 随即生成0-9的数字  

            String rand = new Character(ch[random.nextInt(length)]).toString();  

            sRand += rand;  

            // 设置随机颜色  

            g.setColor(new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)));  

            g.drawString(rand, 20 * i + 6, 25);  

        }  

        //产生随即干扰点  

        for (int i = 0; i < 20; i++) {  

            int x1 = random.nextInt(width);  

            int y1 = random.nextInt(height);  

            g.drawOval(x1, y1, 2, 2);  

        }  

        g.setColor(c); // 将画笔的颜色再设置回去  

        g.dispose();  

  

        //将验证码记录到session  

        request.getSession().setAttribute("safeCode", sRand);  

        System.out.println("验证码:"+sRand);

        // 输出图像到页面  

        ImageIO.write(image, "JPEG", os);

}

 

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

 

}

4.8.2 jsp页面

<script type="text/javascript">

function changeValidateCode(obj) {

/***

 *   获取当前的时间作为参数,无具体意义    

 *   每次请求需要一个不同的参数,否则可能会返回同样的验证码     

 *   这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。   

 */

var timenow = new Date().getTime();

 

obj.src = "SafeCode?d=" + timenow;

}

</script>

<img src="SafeCode"onclick="changeValidateCode(this)"title="点击图片刷新验证码"/>

4.9 分页


0 0
原创粉丝点击