jee、spring、spring mvc、mybatis 学习(二)

来源:互联网 发布:淘宝纳米碳溶胶 编辑:程序博客网 时间:2024/06/06 19:27

转载请申请转载地址:http://blog.csdn.net/qq5132834/article/details/52197771

在本节将着重页面【POST】方法提交、jquery中【ajax】请求【json】数据中文乱码的解决。

1、引入json的包文件【nutz-1.b.52.jar】;

2、在【web.xml】文件添加如下数据:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>ZZZ</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <servlet>         <servlet-name>mvc</servlet-name>         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   <!-- DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步 -->       <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:sources/mvc-servlet.xml</param-value><!-- 指定mvc-servlet.xml文件路径,在类src/sources路径下面 --></init-param>       <load-on-startup>1</load-on-startup>         <!-- load-on-startup:表示启动容器时初始化该Servlet -->  </servlet>  <servlet-mapping>         <servlet-name>mvc</servlet-name>         <url-pattern>*.xhtml</url-pattern>         <!-- 表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的 -->  </servlet-mapping>  <servlet-mapping>  <servlet-name>mvc</servlet-name>  <url-pattern>*.json</url-pattern>  <!-- “*.json”表示拦截所有以json为扩展名的请求。 -->  </servlet-mapping>  <servlet-mapping>  <servlet-name>mvc</servlet-name>  <url-pattern>*.xml</url-pattern>  <!-- “*.xml”表示拦截所有以xml为扩展名的请求。 -->  </servlet-mapping>        <filter>        <filter-name>encoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>   </web-app>


【web.xml】文件中的【filter】、【filter-mapping】主要用来处理post请求的数据格式,包括【中文乱码】等问题:

<filter>        <filter-name>encoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>true</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

3、在【mvc-servlet.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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation=" http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-3.0.xsd      http://www.springframework.org/schema/mvc       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"      default-autowire="byName" >      <context:component-scan base-package="com.zuk.controllers" /><!-- 扫描com.zuk.controllers这个包里的所以controller累 -->   <!-- ViewResolver -->  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>      <property name="prefix" value="/WEB-INF"/><!-- 也可以放空 -->    <!-- <property name="prefix" value="/WEB-INF/jsp/"/> --> <!-- 制定前缀字符串 -->    <property name="suffix" value=".jsp"/>  <!-- 跳转后添加后缀 --></bean> <!-- ajax请求中文乱码解决 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value></list></property></bean></list></property></bean></beans>

在【mvc-servlet.xml】文件中新增的【AnnotationMethodHandlerAdapter】bean用来处理【ajax】数据请求的格式,包括【中文乱码的解决】。

<!-- ajax请求中文乱码解决 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value></list></property></bean></list></property></bean>

4、新建【com.zuk.model】包,新建一个【Person.java】类如下:

     主要目的在于可以将【form】表单中的【name】属性值直接映射到【Person,java】对象中,注意【name】属性值,必须与【Person.java】的private变量一致,并添加get、set方法。
package com.zuk.model;public class Person {public String usid;public String pawd;public String comp;public String getUsid() {return usid;}public void setUsid(String usid) {this.usid = usid;}public String getPawd() {return pawd;}public void setPawd(String pawd) {this.pawd = pawd;}public String getComp() {return comp;}public void setComp(String comp) {this.comp = comp;}}

5、在原来的【HelloController.java】类中增加如下两个方法:一个是用来跳转;一个用来返回【json】数据。

package com.zuk.controllers;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.nutz.json.Json;import org.nutz.lang.util.NutMap;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.zuk.model.Person;/** * @author 513283439@qq.com * */@Controller@RequestMapping(value="HelloController")public class HelloController {@RequestMapping(value = "/hello.xhtml")public String hello(HttpSession ession,HttpServletRequest request,HttpServletResponse response,Model model,@RequestParam(value="message", required=false) String message){System.out.println(message);model.addAttribute("message", message);return "/jsp/hello";  /** * 跳转的实际路径要算上mvc-servlet.xml中配置的 * 前缀:/WEB-INF; * 后缀:.jsp * 实际路径:/WEB-INF/jsp/hello.jsp * */}/** * <br>主要解决两个问题: * <br>1、POST方法中文乱码问题; * <br>2、将前端表单里面的name属性的值直接映射到java对象中。 * */@RequestMapping(value = "/actionForm.xhtml")public String actionForm(HttpSession ession,HttpServletRequest request,HttpServletResponse response,Model model,@ModelAttribute Person person){System.out.println(person.getUsid());System.out.println(person.getPawd());System.out.println(person.getComp());model.addAttribute("usid", "POST中文乱码-->>"+person.getUsid());model.addAttribute("pawd", "POST中文乱码-->>"+person.getPawd());model.addAttribute("comp", "POST中文乱码-->>"+person.getComp());return "/jsp/hello";}/** *<br>主要解决ajax请求返回json数据烈性  * */@ResponseBody @RequestMapping(value = "/ajaxForm.json", produces = "text/html;charset=UTF-8")public String ajaxForm(HttpSession ession,HttpServletRequest request,HttpServletResponse response,Model model,@ModelAttribute Person person){System.out.println(person.getUsid());System.out.println(person.getPawd());System.out.println(person.getComp());model.addAttribute("usid", "ajaxForm-->>"+person.getUsid());model.addAttribute("pawd", "ajaxForm-->>"+person.getPawd());model.addAttribute("comp", "ajaxForm-->>"+person.getComp());NutMap result = NutMap.NEW();result.put("data", person);String json = Json.toJson(result);System.out.println(json);return json;}}

从上面的代码里可以看出:@ModelAttribute Person person 】用来进行form表单与person对象的映射实现。

6、在项目的【WebContent】下新建一个【js】文件夹,引入【jquery-1.8.2.min.js】文件。注意js、css、jpg等资源文件不要放置在【WEB-INF】文件夹下,不然这些文件的加载会通过前置控制器,给资源加载带来诸多麻烦。

7、在【hello.jsp】文件中新增一个【form】表单、【submit】提交按钮、【ajax】请求按钮,内容如下:

<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><title>【hello】</title><script type="text/javascript" src="../js/jquery-1.8.2.min.js"></script><script type="text/javascript">function ajaxClick(){ $.ajax({   url: '../HelloController/ajaxForm.json',  type:'post',    dataType: 'json',  timeout: 5000,  contenttype :"text/html;charset=utf-8",   data: {   usid:frm.usid.value,   pawd:frm.pawd.value,   comp:frm.comp.value  },  success:function(json) {  //console.log(json);  //console.log(json.data.usid);  //console.log(json.data.pawd);  //console.log(json.data.comp);  alert(json.data.usid+"/"+json.data.pawd+"/"+json.data.comp);  },    error:function() {    alert("异常!");    }  }); }</script></head><body>${message}<!-- ${message}表示从分发器controller传递过来的模型数据 --><!-- 跳转 --><form action="../HelloController/actionForm.xhtml" name="frm" method="post"><table><tr><td>用户名</td><td><input type="text" name="usid" value="${usid}" /></td></tr><tr><td>密码</td><td><input type="text" name="pawd" value="${pawd}" /></td></tr><tr><td>公司</td><td><input type="text" name="comp" value="${comp}" /></td></tr><tr><td><input type="submit" value="提交" /></td><td><input type="button" value="ajax" onclick="ajaxClick()" /> </td></tr></table></form></body></html>

8、源代码地址:http://download.csdn.net/detail/qq5132834/9602367









0 0
原创粉丝点击