SSH项目笔记

SSH项目笔记

解决中文字符乱码:

Stringtemptestname=request.getParameter("testname");

                String testname = new String(temptestname.getBytes("iso-8859-1"),"utf-8");

 

//删除服务器端的文件;

        File file=new File(jabean.getJaurl().replaceAll("\\\\", "\\\\\\\\"));

        file.delete();

注:在java中处理文件都需要\\或者/

当Java存储路径到数据库时,数据库会自动将\\或者/转变成计算机的路径\,因此java从数据库取出路径后需要处理路径。

 

1)表单发送请求时(button的type必须是submit!!!),后台action中获取表单中的参数可以通过模型驱动,也可以:

HttpServletRequest request=ServletActionContext.getRequest();

fileclass=request.getParameter("radio");

2)当表单仅为了获取用户输入的参数,不用来提交表单时,button的type必须是button!!!不能是submit,否则不会执行ajax请求的action。

3)当ajax的参数不在模型驱动中时,可以随便借用一个模型驱动中的参数来传值到后台action中!

 

boolean result=Str.contains(“abc”);是找指定字符串是否包含一个字串,返回值的boolean类型,即只有truefalse
int result=str.indexOf(“abc”);有多个重载,但无论哪个,都是做一定的匹配,然后把匹配的第一个字符的位置返回,返回的是int类型,如果没找到,那么返回-1.

 

 

vartgh="<%=session.getAttribute("tgh") %>";

vartid="<%=session.getAttribute("tid")%>";

$function(){………};中给元素绑定了事件,当遇见事件中还要激发事件时,就得使用<aοnclick=”func()” >点击链接</a>。否则出错!

如:$(function(){

$("#jiaoan").click(function(){

    //显示之前清空内容面板;

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

    //查询并显示所有已上传的教案;1、获得所授课程名以供选择 2、根据选择的课程名查询已上传的教案;

     var tgh="<%=session.getAttribute("tgh") %>";

        vartid= "<%=session.getAttribute("tid") %>";

        $.ajax({

             type:"post",

                 url:"myteacheraction_getTeachCourse.action",               

                 data:"tgh="+tgh+"&tid="+tid+"&tname="+tid+"&tsex="+tid+"&ttitle="+tid+"&tsection="+tid+"&tted="+tid,

                 dataType:"json",

                 error:function(){

                    alert("查询所授课程失败!");

                 },

                 success:function(data){

                    varobj = eval("("+data+")");

                    $("#pcontent").html("<table><tr><td>请选择查询的课程名:</td></tr></table>");

                    $.each(obj,function(i,item){

                          $("#pcontent").append("<tr><td><a href='#'class='selectcname'οnclick='selectcname(this)'>"+item.cname+"</a></td></tr>");

                    });

                }

                });  

});

});

//教师点击查询的课程名执行对应的点击事件;

functionselectcname(obj){

    varcname=$(obj).html();

    alert(cname);

}

 

 

 

var obj =eval("("+data+")");

Action中:返回jsonobject的字符串:

publicString getTeacherInfo(){

        ArrayList<TTBean> list=service.getTeacherInfo(ttbean);

        JSONObject jsonobj=JSONObject.fromObject(list.get(0));

        result=jsonobj.toString();

        returnSUCCESS;

    }

Jsp中:ajax获取jsonobject中的数据,并动态生成表格;

$(function(){

        $("#teacherinfo").click(function(){

            var tgh= "<%=session.getAttribute("tgh") %>";

            var tid= "<%=session.getAttribute("tid") %>";

            $.ajax({

                 type:"post",

                 url:"myteacheraction_getTeacherInfo.action",               

                 data:"tgh="+tgh+"&tid="+tid+"&tname="+tid+"&tsex="+tid+"&ttitle="+tid+"&tsection="+tid+"&tted="+tid,

                 dataType:"json",

                 error:function(){

                    alert("查询教师信息失败!");

                 },

                 success:function(data){

                    alert("查询教师信息成功!"+data);

                    var obj = eval("("+data+")");

                    $("#table").html("<tr><td>教工号</td><td>姓名</td><td>性别</td><td>身份证</td><td>职称</td><td>教研室</td><td>电话</td></tr>");

                           $("#table").append("<tr><td>"+obj.tgh+

                                   "</td><td>"+obj.tname+

                                   "</td><td>"+obj.tsex+

                                   "</td><td>"+obj.tid+

                                   "</td><td>"+obj.ttitle+

                                   "</td><td>"+obj.tsection+

                                   "</td><td>"+obj.tted+ "</td><tr>");

                        

                }

                    });  

        });

    });

jsonobject对象的数据设置在标签中:

$("#table").html("<tr><td>教工号:</td><td>"+obj.tgh+"</td></tr><tr><td>姓名:</td><td>"+obj.tname+"</td></tr><tr><td>性别:</td><td>"+obj.tsex+"</td></tr><tr><td>身份证:</td><td>"+obj.tid+"</td></tr><tr><td>职称:</td><td>"+obj.ttitle+"</td></tr><tr><td>教研室:</td><td>"+obj.tsection+"</td></tr><tr><td>电话:</td><td>"+obj.tted+"</td></tr>");

java.lang.OutOfMemoryError: PermGen space:

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放ClassMeta信息的,Class在被Loader时就会被放到PermGen space,
它和存放类实例(Instance)Heap区域不同,GC(GarbageCollection)不会在主程序运行期对
PermGen space
进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar,其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.sh
# OS specific support. $var _must_ beset to either true or false.上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M-XX:MaxPermSize=300M"
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar文档重复占用内存的目的。

js如何获取jsp页面中嵌入的java代码中的变量:

js中可以这样去获取

1

var name = "<%=name %>";

注:必须要引号!

Jquery ajax传参数到action后台:

$.ajax({

                      type:"post",

                      url:"myfoodaction_deleteFood.action",              

                      data:"username="+getusername+"&food="+getfoodname+"&rice="+getfoodrice+"&number="+getfoodnumber,

                     dataType:"html",

                     success:function(){

                         alert("删除成功!");

                     }

                      

              });

 

AJAX 中文参数需要编码后传给服务端,然后在服务端用utf-8解码,因为ajaxpost请求)默认是utf-8编码,所以最好直接使用post请求!而get的请求则不一样;get请求不走filter
需要在js端用两次编码!

 

注意!!!!.传递中文

记住永远不要在浏览器的地址栏中传递中文。在传递中文前先进行编码

@Override
 public String execute() throws Exception {
  // TODO Auto-generated method stub
  username=URLEncoder.encode("郭蕾","utf-8");//先进行编码
  System.out.println(username);
  return "redirect";
 }

 

查询所有数据:

hibernatetmplate.loadAll(UserBean.class);

查询满足条件的数据:

hibernatetmplate.find("fromUserBean user  where user.username=? anduser.userpassword=?",newString[]{user.getUsername(),user.getUserpassword()});

更新修改数据:

ArrayList<FoodBean>list=new ArrayList<FoodBean>();

        list=(ArrayList<FoodBean>) hibernatetmplate.find("from FoodBean food wherefood.username=? and food.food=?",new String[]{food.getUsername(),food.getFood()});

        if(list!=null&&list.size()>0){ //如果用户已经添加过此类商品,则更新商品数量即可;

            FoodBean foodbean = (FoodBean)hibernatetmplate.get(FoodBean.class, list.get(0).getId());

            foodbean.setNumber(list.get(0).getNumber()+food.getNumber());

            hibernatetmplate.update(foodbean);

        }

 

<a href="myuseraction_loginin?username=<%=session.getAttribute("username")%>&userpassword=<%=session.getAttribute("userpassword")%>" >返回首页</a>

 

window.location.href="User_logout.action";

window.location.href="login.jsp?prePage="+curPage;

 

1.其实用到method={数字}的时候,相应的前面的action是要出现*通配符来搭配的。比如一个小例子:
<action name="user_*"class="UserAction" method="{1}">
在对应的jsp中:
<form action="user_userLogin2" method="post">

那么struts会将user_userLogin2这个action按照user_*的格式解析,把*号对应位置的字符串取出来,放到method={}这个中括号里替代数字的位置,1就是指第一个*号位置的字符串。
这里看不出数字不同的区别,在:
<action name="*_*"class="com.xy.{1}Action" method="{2}"> 

中就看得明白了,你提交的action都会按格式分解,比如jsp里是User_add,那么就会变成:
class="com.xy.UserAction"method="{add}"

 

2.javascript:是表示在触发<a>默认动作时,执行一段JavaScript代码, javascript:;表示什么都不执行,这样点击<a>时就没有任何反应.

<ahref="javascript:checkUserLogin()">个人中心</a>

<ahref="register.jsp">注册</a>

Hibernate 的HQL和sql有什么区别:

sql 面向数据库表查询
hql 面向对象查询
hql  from 后面跟的类名+类对象 where 对象的属性做条件
sql from 后面跟的是表名 where 用表中字段做条件
Hibernate中使用查询时,一般使用Hql查询语句。
HQLHibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQLSQL的最根本的区别,就是它是面向对象的。

        ArrayList<UserBean> list=new ArrayList<UserBean>();

        list=(ArrayList<UserBean>) hibernatetmplate.find("from UserBean user  where user.username=? anduser.userpassword=?",newString[]{user.getUsername(),user.getUserpassword()});

 

session为内置对象的原理:session的产生时间是在用户发送请求后,服务器将jsp编译成servlet时调用HttpSession session =HttpServletRequest.getSession(true);才产生的!并不是session在有客户端访问时就被创建。

一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。
其工作原理是这样的:
1.
当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号;
2.
这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个session
这种机制不使用IP作为标识,是因为很多机器是通过代理服务器方式上网,没法区分每一台机器。
对于session标识号(sessionID),有两种方式实现:cookiesURL重写。

HttpSession的使用
我们来看看在API中对session是如何定义和操作的。
当需要为用户端建立一个session时,servlet容器就创建了一个HttpSession对象。其中存储了和本session相关的信息。所以,在一个servlet中有多少个不同用户连接,就会有多少个HttpSession对象。
使用的机理是:
1.
从请求中提取HttpSession对象;
2.
增加或删除HttpSession中的属性;
3.
根据需要关闭HttpSession或使其失效。

在请求中有两个重载的方法用来获取HttpSession对象。
HttpSession getSession(boolean create)/getSession();
作用是提取HttpSession对象,如果没有自动创建。

获取到HttpSession对象后,我们就需要使用HttpSession的某些方法去设置和更改某些参数了。如:
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);

在Java中,HTTP的Session对象用javax.servlet.http.HttpSession来表示。

1、概念:Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象.

1session在何时被创建
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @pagesession="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
2
、存放在session中的对象必须是可序列化的吗
不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。

引申:

1)、访问*.html的静态资源因为不会被编译为Servlet,也就不涉及session的问题。

2)、当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:

Cookie:JSESSIONID=客户端第一次拿到的session ID

这样,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用。这也是session使用的基本原理----搞不懂这个,就永远不明白session的原理。

3、Session删除的时间是:

1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。

2)程序调用HttpSession.invalidate()

3)服务器关闭或服务停止

4session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理。

5sessionid是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个sessionID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该idsession返还给请求者(Servlet)使用。一个会话只能有一个session对象,对session来说是只认id不认人。

6、session会因为浏览器的关闭而删除吗?

不会,session只会通过上面提到的方式去关闭。

7、同一客户端机器多次请求同一个资源,session一样吗?

总结下:对于多标签的浏览器(比如360浏览器)来说,在一个浏览器窗口中,多个标签同时访问一个页面,session是一个。对于多个浏览器窗口之间,同时或者相隔很短时间访问一个页面,session是多个的,和浏览器的进程有关。对于一个同一个浏览器窗口,直接录入url访问同一应用的不同资源,session是一样的。

8session是一个容器,可以存放会话过程中的任何对象。

9session因为请求(request对象)而产生,同一个会话中多个request共享了一session对象,可以直接从请求中获取到session对象。

10、其实,session的创建和使用总在服务端,而浏览器从来都没得到过session对象。但浏览器可以请求Servletjsp也是Servlet)来获取session的信息。客户端浏览器真正紧紧拿到的是session ID,而这个对于浏览器操作的人来说,是不可见的,并且用户也无需关心自己处于哪个会话过程中。

COOKIESESSION有什么区别?

作者:轩辕志远
链接:https://www.zhihu.com/question/19786827/answer/28752144
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
2. 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
3. Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。
所以,总结一下:
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。

cookie是存在浏览器的,根据请求的路径自动发送的,服务器端可以对其进行处理
session
是存在服务器的,用于区分会话和不同用户的访问
一般来说,session的识别需要cookie里的一个字段(jsessionid)来表示是哪一个session,由服务器端来识别

cookie 是一个实际存在的东西,http 协议中定义在header 中的字段。

html中form如何提交隐藏域:

在页面中的form里加入<input type="hidden" name="compId" value="2101" />
然后你点击按钮提交表单的时候,是可以接收到compId.

基本语法: 

<input type="hidden"name="field
_name"value="value"> 

作用: 

1
隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。 

2
有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。 

3
有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上οnclick="document.form.command.value="xx""然后我们接到数据后先检查command的值就会知道用户是按的那个按钮提交上来的。 

4
有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。 

5 javascript
不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。 

6
还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

<form action="数值自增.ashx" method="post"> 
<input type="hidden"name="_viewstate" value="a" /> 

<input type="hidden"name="_div" value="@n" /> 
<!-- <input name="txt"type="text" value="@value" />--> 
<div>@n</div> 
<input type="submit"value="click" /> 
</form> 

 

//获取隐藏域的值 
string s =context.Request.Form["_div"]; 

 

hibernate.cfg.xml中如何设置mysql生成表的编码方式:

hibernate的配置文件中加入:
<property name="connection.useUnicode">true</property> 
<property name="connection.characterEncoding">UTF-8</property>
另外,mysql的表,字段都应该设成utf8的字符集
character setutf8
collationutf8_general_ci

而且eclipse中project的properties编码和window的preference的编码都要设置为utf-8

 

注:ssh中实例不能自己再new,只可以用:

ClassPathXmlApplicationContextcontext=new ClassPathXmlApplicationContext("applicationContext.xml");

            DaoServiceImpldao=(DaoServiceImpl)context.getBean("myuserdaoservice");

Stringusername=session.getAttribute("username").toString();

            ArrayList<FoodBean> list = new ArrayList<FoodBean>();

            list=dao.findAllFood(username);   

否则会出现空指针异常!

 

将数据库的数据显示在jsp页面:

    <table border="1"align="center" cellpadding="5"cellspacing="0" >

        <tr>

            <td>商品名称</td>

            <td>商品价格</td>

            <td>商品数量</td>

            <td>删除</td>

            <td>修改</td>

        </tr>

        <%

            ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

            DaoServiceImpldao=(DaoServiceImpl)context.getBean("myuserdaoservice");

            Stringusername=session.getAttribute("username").toString();

            ArrayList<FoodBean> list = new ArrayList<FoodBean>();

            list=dao.findAllFood(username);   

            for(FoodBean food:list)

            {%>

            <tr>

                <td><%=food.getFood() %></td>

                <td><%=food.getRice()%></td>

                <td><%=food.getNumber() %></td>

                <td><input type="button"name="delete" id="delete"value="删除"/></td>

                <td><inputtype="button"name="change"id="change"value="修改"></td>

            </tr>

            <%}

        %>

    </table>

 

SSH用HibernateTemplate()更新需要更新的字段:

Studentstudent = (Student)dao.getHibernateTemplate().get(Student.class, id);
   student.setComments(remark);

   student.setStatus(status);
   student.setId(id);
  dao.getHibernateTemplate().update(student);

步骤:先得到待更新的对象;然后为对象设置新值;最后调用update()函数即可。

 FoodBean foodbean = (FoodBean)hibernatetmplate.get(FoodBean.class,list.get(0).getId());//必须用int型的id

            foodbean.setNumber(list.get(0).getNumber()+food.getNumber());

            hibernatetmplate.update(foodbean);

 

 

Windows中的文件路径格式为 D:\source\l.c

而在Java中的文件路径格式为 D:/source/l.c

java中使用前者则会报错,所以需要先将Windows中的文件路径转换为java中可识别的路径。

作如下处理:

String str ="D:\source\l.c";

String location =str.replaceAll("\\\\","/");

这样location的值为D:/source/l.c

 

Java中一个\ \\\\代替:

Stringlocation = fileurl.replaceAll("\\\\", "\\\\\\\\");

Stringlocation = fileurl.replaceAll("\\\\","/");

500是服务器的原因,如果代码没错可以把服务器删了重建一个服务器试试。

 

 web应用程序中我们都是使用部署描述符来初始化一些资源如servletstruts2的过滤器、spring的监听器等等,这个部署描述符就是那广为人知的web.xml了。同样的,struts2也使用一个配置文件来初始化它自己的资源struts.xml,这些资源主要包括:
1
Action Classes:负责调用商业逻辑和数据访问层;
2
Results:负责返回视图(view),如JSP页面等等;

3. 拦截器(Interceptor):对请求进行预处理和后加工;拦截顾名思义就是在提交给Action的前后进行一些操作,作用是相当的大!很多业务逻辑都是靠拦截实现的,比如校验,验证登录权限,等等~~拦截器是配置的,要配置才有~~

 

  <!-- 配置Struts2过滤器 -->

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

  <!-- 注册下载servlet -->

  <servlet>

  <servlet-name>fileDownload</servlet-name>

  <servlet-class>com.hx.action.DownloadServlet</servlet-class>

 </servlet>

<servlet-mapping>

  <servlet-name>fileDownload</servlet-name>  

  <url-pattern>/fileDownload</url-pattern>

</servlet-mapping>

 

servlet访问的地址:

<a href='/TScommunication/fileDownload?filename="+item.janame+"&fileurl="+item.jaurl+"'>下载</a>

 

1)换行:

studentinfo.setText("个人信息:\n"+jsonobjme.get("ssname").toString());

2)在一个Activity中结束另一个Activity的方法
下面的以ActivityB 结束ActivityA 为例:
首先在 ActivityA 中定义一个 Activity 静态全局变量
 public  static Activity  ActivityA;  
 OnCreate()方法中给ActivityA赋值:
 ActivityA=this;    
ActivityB中,需要结束ActivityA时,调用
  ActivityA.ActivityA.finish();    
另外,也可以在ActivityA中加入一个广播接收器,当收到广播时退出,而在ActivityB中,需要结束ActivityA时发送广播即可。
如何是从A跳转到B结束A的话
Intent i=new IntentA,BsatrtActivity();类名.this.finish();

 

当请求地址携带中文参数时,需要转换编码:

url="http://192.168.1.103:8080/TScommunication/mykcjjaction_getAllKcjjAPP.action?"+"cname="+URLEncoder.encode(data.getString("cname"), "utf-8");

或者:

Stringname=jabean.getJaname();

String newname= new String(name.getBytes("iso-8859-1"),"utf-8");

 

Javaweb开发中,文件下载功能的文件名文件名乱码问题是经常遇到的。

对于这个问题,不同的浏览器,解决的方法不太一样。

IE的话,通过URLEncoderfilename进行UTF8编码。

而其他的浏览器(firefoxchromesafariopera),则要通过字节转换成ISO8859-1了。

示例代码(通过测试):

[java] view plain copy

1.     if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {  

2.          filename = URLEncoder.encode(filename, "UTF-8");  

3.     else {  

4.         //firefox

5.         filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");  

6.     }  

Javaweb项目读取doc文件:(使用POI插件)

InputStreamis = new FileInputStream(new File(newanswerurl));

WordExtractorex = new WordExtractor(is);

Stringallanswer = ex.getText();

 

Textview添加滚动条了:
1. /res/layout/main.xml
TextView修改为这样:
 <TextView   android:id="@+id/tv"

    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"   
    
android:scrollbars="vertical"  
    android:text=""
    />
2./src/your/pakeage/src.java
//TextView
TextView tv=(TextView)findViewById(R.id.tv);
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
3.编译后就可以用TextView里面的文字滚动起来了。

 

inputstream转为string:

BufferedReaderreader = new BufferedReader(new InputStreamReader(urlConn.getInputStream(),"UTF-8")); // 实例化输入流,并获取网页代码
String s; //
依次循环,至到读的值为空
StringBuilder sb = new StringBuilder();
while ((s = reader.readLine()) != null) {
sb.append(s);
}
reader.close();

String str = sb.toString();

String字符串转输入流:

ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(sInputString.getBytes());  

写入文件,并设置文字编码:

  String line = null;

        // 自行调整charset即可

        BufferedReader br = new BufferedReader (new InputStreamReader (new FileInputStream ("c:/content1.txt"), "GBK"));

        BufferedWriter bw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream ("c:/content1.txt"), "UTF-8"));

        while (( line = br.readLine () ) != null)

        {

            if (line.contains (id))

                   bw.write (line);

                    }

        bw.flush ();

        bw.close ();

        br.close ();

    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值