希望如果有同样问题的同志看到笔记之后能有所帮助,我的环境是SSM,IDE是IDEA
IDEA的run窗口
想看System.out.println的输出信息,找了半天,在View->Tool Windows->Run,下次注意
ajax回传404错误
原来是由于之前服务器报错,tomcat停掉了,然后还调试了半天,重启就好了
ajax回传500错误
500是服务器错误,也就是java的代码问题,代码如下
@RequestMapping(value = "/dologin", method = {RequestMethod.POST })
@ResponseBody
public Userdologin(@RequestBody User user) {
return user;
}
ajax上传的json数据为
{userName: "test", pswd: "123456"}
User实体类的定义如下
package entity;
public class User {
private Integer id;
private String userName;
private String pswd;
private String userType;
private Double initValue;
private String walletAddr;
public User(Integer id, String userName, String pswd, String userType, Double initValue, String walletAddr) {
this.id = id;
this.userName = userName;
this.pswd = pswd;
this.userType = userType;
this.initValue = initValue;
this.walletAddr = walletAddr;
}
public Integer getId() {
return id;
}
public String getUserName() {
return userName;
}
public String getPswd() {
return pswd;
}
public String getUserType() {
return userType;
}
public Double getInitValue() {
return initValue;
}
public String getWalletAddr() {
return walletAddr;
}
}
但是User的对象结构不只有userName和pswd两个属性,所以这样的注入是失败的,故而报错500,解决方案是使用String来传,最后修改的demo如下,是可以成功运行的
@RequestMapping(value = "/dologin", method = {RequestMethod.POST })
@ResponseBody
public String dologin(@RequestBody String param) {
Map maps = JSON.parseObject(param);
System.out.println("这个是用JSON类的parseObject来解析JSON字符串!!!");
for (Object obj : maps.keySet()){
System.out.println("key为:"+obj+"值为:"+maps.get(obj));
}
return "ok";
}
mybaits多参数查询
网上给了三种方式,我用了最后一种推荐的方式,清晰易懂,代码如下:
UserMapper.java
User selectByUserPswd(@Param("userName")String userName, @Param("pswd")String pswd);
UserMapper.xml
<select id="selectByUserPswd" resultMap="BaseResultMap">
select * from user where user_name = #{userName,jdbcType=VARCHAR} and pswd = #{pswd,jdbcType=VARCHAR}
</select>
UserService.java
public User getUser(String userName, String pswd){
return userMapper.selectByUserPswd(userName,pswd);
}
UserAction.java
@RequestMapping(value = "/dologin", method = {RequestMethod.POST })
@ResponseBody
public User dologin(@RequestBody String param) {
Map maps = JSON.parseObject(param);
User result = userService.getUser((String)maps.get("userName"), (String)maps.get("pswd"));
return result;
}
chrome中的debugger工具
chrome中除了有单步调试的js的工具以外,还可以使用debugger来进行断点,方法很简单,在要停的js文件中的位置加上debugger;语句就行了,打开chrome之后打开开发者工具就会自动断点,如果不打开的话就会正常执行
参考资料:http://bbs.fanruan.com/thread-65003-1-1.html
IntelliJ IDEA2016 + tomcat 设置热部署
参考资料:http://blog.youkuaiyun.com/miaoy220/article/details/53450179
其中的On ‘Update’ action那里被我改成了Redeploy,即便是这样,对于html,js等静态文件通常改了之后要刷新几遍才会被更新,而java文件甚至常常需要按tomcat的redeploy才能被更新,但是也很好了,毕竟比restart节省了很多时间
JSTL无法在项目中使用
首先的原因就是maven中没有引入包,所以要配置maven依赖,代码如下:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
参考资料:http://wj196.iteye.com/blog/787566
但是配置了之后还是不好用,这个时候reimport一下就行了,也就是在pom.xml文件上右键,Maven->Reimport,这样就好了
spring mvc无法引入静态模块
首先做一个过滤,让静态文件可以被识别
修改web.xml文件,增加对静态资源的url映射,要加在org.springframework.web.servlet.DispatcherServlet的前面
比如js和css文件
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
css和js等文件不要放到WEB-INF下面,要放到webapp里面,如图,我的结构是这样的
然后在mvc-dispatcher-servlet.xml上面做名字和路径的映射:
<!--html调用css,js,images等静态资源的路径使用方法-->
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
之后在html或者jsp文件里使用/images/a.jpg这样的方式就能访问到webapp下images文件夹里的图片了,比如我的html代码
<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>医保账户</title>
<link href="/css/home.css" rel="stylesheet" type="text/css" media="all">
<link href="/css/css.css" rel="stylesheet" type="text/css" media="all">
<script type="text/javascript" src="/js/jquery.js"></script>
</head>
<body>
<!--top-->
<div class="top">
<div class="box">
<a href="home" class="return"><img src="/images/return.png"></a>
个人信息
</div>
</div>
</body>
</html>
springMVC使用html做视图
spring mvc的默认配置是识别jsp文件的,但是不识别html,默认配置如下:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
所以在controller方法中返回值之后都默认去定位到jsp文件,即便是把jsp改成html也无法定位到html,controller中的代码如下:
@RequestMapping("/home")
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
// 放入jsp路径,配置后缀是jsp,所以默认访问home.jsp
mav.setViewName("home");
return mav;
}
为了让他能够识别html,将配置改成了
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="10"></property>
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="contentType" value="text/html"></property>
</bean>
controller中的代码如下:
@RequestMapping("/home")
public ModelAndView home() {
ModelAndView mav = new ModelAndView();
// 需要加html后缀
mav.setViewName("home.html");
return mav;
}
上面两个代码就能够成功的定位到html文件了
js对象转换成json对象
明明是很简单的代码,网上却给出了一堆字符串拼接的,真是醉了,最简洁易懂的代码如下
var jsonData = {};
jsonData.MainCmdID = 1;
jsonData.SubCmdID = 1;
var toStr = JSON.stringify(jsonData);
alert(toStr);
json转Map对象
有一个阿里巴巴的包,叫做fastjson,我用的是这个
调用函数一句就行了
import com.alibaba.fastjson.JSON;//导入的包
String param = {"username":"test","password":"123456"};
Map maps = JSON.parseObject(param);