Spring开发日记

7月5日


今天主要在慕课网上实现SSH框架的demo,SSH的配置主要使用四个文件,首先需要配置

**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> 
  <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!-- 对Spring容器进行实例化 -->
    <listener>
       <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

  <welcome-file-list>
    <welcome-file>index.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>


   <filter-mapping>  
    <filter-name>struts2</filter-name>  
    <url-pattern>*.jsp</url-pattern>  
</filter-mapping> 
</web-app>

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.1.xsd">


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="configLocation"
            value="classpath:hibernate.cfg.xml">
        </property>
    </bean>
    <bean id="productService" class="cn.ssh.service.ProductService">
        <property name="productDAO" ref="productDAO" />
    </bean>
    <bean id="productDAO" class="cn.ssh.dao.ProductDAO">

    </bean>
    </beans>

今天主要遇到了“java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;”错误,经过检查是jar包出现了问题,采用myeclipse标准包即可避免。


7月6号


applicationContext.xml文件里面,缺少context标签,

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"

加入这一句:context=”http://www.springframework.org/schema/context”。


7月7日


1

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream

最终发现是Employee.hbm.xml的id name写错了,这个name应该和定义的实体类属性一致。

2
无法找到struts标签。主要是里面的文件名写错了。jsp标准配置如下:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s" %>

7月9日


  • Hibernate错误:
    java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibe
    解决方法:最好Spring3+Hibernate4不太好用,替换成Spring3+Hibernate3就解决了。
  • s:表单标签
<s:form action="teacher_login" method="post" namespace="/">
<h3><s:actionerror/></h3>
<button class="btn btn-lg btn-block" id="entry"  type="submit" >立即登录</button>
</s:form>

利用ModelDriven获取用户名密码,并且填入actionerror。

if(existTeacher==null){
            this.addActionError("用户名或者密码错误");
            return INPUT;
        }else{
            ActionContext.getContext().getSession().put("existTeacher", existTeacher);
            return SUCCESS;
        }
  • 利用Hibernate模板获取实体
public class TeacherDaoImpl extends HibernateDaoSupport implements TeacherDao {

    @Override
    public Teacher findByUsernameAndPassword(Teacher teacher) {
        String hql="from Teacher where username=:username and password =:password";
        List<Teacher> list=this.getHibernateTemplate().findByValueBean(hql, teacher);
        if(list.size()>0){
            return list.get(0);
        }
        return null;    
    }
}

7月14日


报错:No Dialect mapping for JDBC type: 3

mysqlDialect.java

package tool;

import java.sql.Types;

import org.hibernate.Hibernate;

public class MySQLDialect extends org.hibernate.dialect.MySQLDialect{

    public MySQLDialect(){
        super();
        registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());
    }
}

ApplicationContext.xml

<!-- 配置Hibernate的属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">tool.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>

7月15日


利用AJAX使用JSON数据传递给ECharts,SSH框架

注意检查json的jar包是否齐全。要想实现JSON和java对象之间的互转,需要借助第三方jar包,这里使用json-lib这个jar包,json-lib需要commons-beanutils-1.8.0.jar、commons-collections-3.2.1.jar、commons-lang-2.5.jar、commons-logging-1.1.1.jar、ezmorph-1.0.6.jar五个包的支持,可以自行从网上下载,这里不再贴出下载地址。

      public static void listToJSON(){
        Student stu=new Student();
        stu.setName("JSON");
        stu.setAge("23");
        stu.setAddress("北京市海淀区");
        List<Student> lists=new ArrayList<Student>();
        lists.add(stu);
        //1、使用JSONObject
        //JSONObject listObject=JSONObject.fromObject(lists);
        //2、使用JSONArray
        JSONArray listArray=JSONArray.fromObject(lists);

        //System.out.println("listObject:"+listObject.toString());
        System.out.println("listArray:"+listArray.toString());

    }

EChartsAction.java

    private JSONArray jsonObj;

    private String result;


    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public JSONArray getJsonObj() {
        return jsonObj;
    }

    public void setJsonObj(JSONArray jsonObj) {
        this.jsonObj = jsonObj;
    }
public String barTable(){
        HttpServletResponse response = ServletActionContext.getResponse();
        Test t=new Test(1);
        List<Test> list=new ArrayList<Test>();
        list.add(t);
        list.add(t);
        list.add(t);
        list.add(t);
        list.add(t);
        jsonObj=JSONArray.fromObject(list);
          try {  
                response.setHeader("Cache-Control", "no-cache");  
                response.setContentType("aplication/json;charset=UTF-8");  
                response.getWriter().print(jsonObj);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
               //利用ajax传输柱状图数据
                var json1=[];
                $.ajax({
                       url : "barDisplay.action", 
                       type : 'GET',
                       dataType :'json',
                       async : false,
                       success : function(jsonObj) {
                                 for(var i=0;i<jsonObj.length;i++){
                                    json1.push(jsonObj[i].mark);
                                 }
                                },error:function(xhr){}
               });
   <package name="default" extends="json-default" >  
            <action name="barDisplay" class="com.jxfz.action.EchartsAction" method="barTable">  
              <result type="json">  
                  <param name="root">jsonObj</param>
              </result>  
            </action>   
       </package>    

注意:如果想使用JSONArray.fromObject(list)方法,list的对象必须有get set方法。


7月16日


1 echart字符云

使用echarts的字符云图,不能只引入echarts.min.js,需要额外引入wolrdcloud.js。

2 使用Hibernate原生语句
@Override
    public List<Object[]> getChartA() {
        Transaction tx=null;
        String sql="SELECT COUNT(id) as mark,FLOOR(defen/10) AS part FROM datifenshuview GROUP BY FLOOR(defen/10)";     
        List<Object[]> tableResult;     
        try{
            tx=getSession().beginTransaction();
            SQLQuery query = getSession().createSQLQuery(sql);
            tableResult=query.list();
            getSession().close();
        }catch(Exception e){
            e.printStackTrace();
            tx.commit();
            return null;
        }

        return tableResult;
    }

这种情况下,查询出来的数据是 List

3 问题:原网址重复请求,数据库链接就会超载
trace com.mchange.v2.resourcepool.BasicResourcePool@ab15e2 [managed: 15, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@4c5d20)

解决方案:

    <!-- 配置Hibernate的属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">tool.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.release_mode">after_statement</prop>
            </props>
        </property>
4

问题:

org.hibernate.MappingException : No Dialect mapping for JDBC type: 3

解决方法:
在applicationContext.xml:

<property name="hibernateProperties">
            <props>
                ***<prop key="hibernate.dialect">tool.MySQLDialect</prop>***
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.connection.release_mode">after_statement</prop>
            </props>

新建类:

package tool;

import java.sql.Types;

import org.hibernate.Hibernate;

public class MySQLDialect extends org.hibernate.dialect.MySQLDialect{

    public MySQLDialect(){
        super();
        registerHibernateType(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());
    }
}

7月23日


Q:IDEA创建SpringBoot无法连接https://start.spring.io
A:使用自定义网址,把那个网址的https后面的s去掉,使用http开头就可以访问和使用了。


7月24日


Spring boot使用ajax

后台controller类:

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping(value = "/index",method = RequestMethod.GET)
    public String index(ModelMap modelMap){
        modelMap.put("msg","SpringBoot Ajax 实例");
        return "index2";
    }

    @RequestMapping(value = "/home",method = RequestMethod.GET)
    public String home(){
        return "login";
    }

    @RequestMapping(value = "/data",method = RequestMethod.POST)
    @ResponseBody
    public List<User> data(){
        List<User> list=new ArrayList<User>();
        for (int i=0;i<10;i++){
            User user=new User();
            user.setId(i + 1);
            user.setName("springboot" + i);
            user.setSex("male");
            user.setAge(i + 1);
            user.setRole("developer");
            list.add(user);
        }
        return list;
    }

前台JS

/**
 * Created by Intellij IDEA.
 * @Author LUOLIANG
 * @Date 2016/8/2
 * @Comment js文件,用于页面发送ajax请求
 */

//定义一个avalonjs的控制器
var viewmodel = avalon.define({
    //id必须和页面上定义的ms-controller名字相同,否则无法控制页面
    $id: "viewmodel",
    datalist: {},
    text: "请求数据",

    request: function () {
        $.ajax({
            type: "post",
            url: "/hello/data",    //向springboot请求数据的url
            data: {},
            success: function (data) {
                $('button').removeClass("btn-primary").addClass("btn-success").attr('disabled', true);

                viewmodel.datalist = data;

                viewmodel.text = "数据请求成功,已渲染";
            }
        });
    }
});

Spring boot使用html

在默认配置下,thymeleaf对.html的内容要求很严格,比如,如果少最后的标签封闭符号/,就会报错而转到错误页。也比如你在使用Vue.js这样的库,然后有这样的html代码,也会被thymeleaf认为不符合要求而抛出错误。
因此,建议增加下面这段:
spring.thymeleaf.mode = LEGACYHTML5spring.thymeleaf.mode的默认值是HTML5,其实是一个很严格的检查,改为LEGACYHTML5可以得到一个可能更友好亲切的格式要求。
maven依赖如下:

                <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.21</version>
        </dependency>

7月27日


Spring boot扫描不到bean

Spring boot开发是从神奇到正常的过程。启动类需要放在package文件夹中,启动后Spring boot会扫描当前目录下所有包。所以不要将启动类放在子包中。


Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi
public User getUser(@Param("name") String name,@Param("password") String password);  

默认配置下,thymeleaf对.html的内容要求很严格,比如,如果少最后的标签封闭符号/,就会报错而转到错误页。也比如你在使用Vue.js这样的库,然后有

这样的html代码,也会被thymeleaf认为不符合要求而抛出错误。
通过设置thymeleaf模板可以解决这个问题,下面是具体的配置:

spring.thymeleaf.mode =LEGACYHTML5

<dependency>  
       <groupId>net.sourceforge.nekohtml</groupId>  
       <artifactId>nekohtml</artifactId>  
       <version>1.9.22</version>  
</dependency>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 今天是我作为一名java开发工程师实习生的第一天。我来到了实习公司的办公室,见到了我的导师和团队成员们。大家都非常友好热情地欢迎我加入团队,并向我介绍了公司的工作环境和项目情况。 上午,我开始熟悉公司的开发环境和流程。我的导师为我提供了一台电脑,并教我如何安装和配置开发工具。他还帮我了解了公司的代码库和项目架构,为我提供了一份详尽的技术文档,让我可以更好地了解项目的需求和开发标准。 下午,我开始着手解决一个简单的bug。我通过阅读代码和运行调试,找到了问题所在,并进行了修复。虽然这只是个小问题,但我在这个过程中学到了如何有效地定位和修复bug,同时也对项目具体的功能和逻辑有了更深入的理解。 在实习过程中,我有机会参与团队的例会和讨论。团队成员们给我提供了许多有用的建议和指导,让我更加快速地适应了项目的开发环境和工作方式。我也从中学到了如何与团队成员共同合作,协调开发进度,并及时向导师汇报工作进展。 通过今天的实习经历,我深刻感受到了作为一名java开发工程师的实际工作要求和挑战。在接下来的实习日子里,我将继续学习和提高自己的技术能力,努力完成自己的任务,并与团队成员们共同进步。我相信,通过这段实习经历,我将成为一名优秀的java开发工程师。 ### 回答2: 今天是我作为一名Java开发工程师实习的第一天。 早上,我来到实习公司的办公室,和其他实习生一起参加了新员工培训。培训内容包括公司的组织结构、业务范围以及团队的工作流程。在培训过程中,我了解到公司拥有一支优秀的技术团队,每个人在自己的领域具有深厚的技术实力。 上午结束后,我被分派到一个Java开发团队。团队由一名技术合伙人领导,其他成员都是经验丰富的开发工程师。我的一个主要任务是研究和开发一个新的功能模块,以提高公司产品的性能和稳定性。 在开发过程中,我使用了Eclipse等工具进行编码,并与团队成员进行了频繁的交流和讨论。他们给予了我很多指导和帮助,帮助我更好地理解和应用Java开发的最佳实践。 下午,在学习了一些基础知识后,我开始动手编写代码。在开发过程中,我遇到了一些问题,比如如何优化代码以提高效率,如何处理异常等。幸运的是,我得到了团队成员的帮助和指导,他们分享了一些他们在实际项目中遇到的类似问题的解决方案。 在一天的实习结束时,我与团队成员进行了一次小结会议。大家彼此分享了各自的工作情况和进展,还讨论了一些技术问题和解决方案。这个会议不仅让我更好地理解团队的工作流程,也让我对我目前的工作进展有了更清晰的认识。 今天的实习经历让我深刻地认识到作为一名Java开发工程师,不仅要有扎实的编程基础,还需要不断学习和掌握新的技术,不断提高自己的解决问题的能力。我相信在接下来的实习中,我将会不断成长并做出更大的贡献。 ### 回答3: 今天是我作为一名Java开发工程师实习的第一天,我充满了期待和激动。早上我按时到达办公室,见到了导师和同事们。他们很热情地欢迎我,并给我介绍了实习的相关事宜。 上午,我开始熟悉公司的开发环境和工具。导师详细地讲解了公司的项目架构和使用的技术栈,还给我分配了一部分代码任务,供我练手。虽然有些挑战,但我充满信心,准备好充分发挥我在大学学到的知识和技能。 下午,我开始跟随导师进行实际的开发工作。我们一起参与了一个大型项目的开发,这个项目正在开发一个电子商务平台。我负责实现其中一个功能模块,主要涉及数据库设计和后端业务逻辑的开发。我通过使用Java的Spring框架和Hibernate技术,成功地完成了该功能的开发任务。在这个过程中,我深刻地体会到了实际开发中的挑战和乐趣。 通过今天的实习,我认识到自己在Java开发领域还有很多需要提高和学习的地方。我决心在实习期间,通过与导师和同事的交流和学习,不断进步。我会多阅读相关的技术书籍和博客,积极参与工作和团队的讨论,努力提升自己的技术水平和解决问题的能力。 实习的第一天给了我很多启发和动力,也增强了我对Java开发的热爱。我相信通过这段实习经历,我将能更好地理解和掌握软件开发的工作流程和规范。我期待着未来的每一天,继续在这个团队中成长和学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值