8月1号--在JSP中遇到的问题总结

首先写在前面是最重要的,在进行修改功能的时候,关于主键个人认为是不能修改的。在以前的项目中没有注意到这个问题,在写好代码之后,不能正常的运行,浏览器会弹出弹窗,提醒你是否要刷新页面。我进行了很多尝试,修改代码,修改数据库,对编辑器以及服务器进行重启都无济于事。甚至还将代码重新写了一遍,都无济于事。 
再后来的一次尝试中,没有修改主键的想运行成功,在以后的尝试中发现,我的代码不能修改主键的值,在数据库中可以直接修改。可能是我的代码存在缺陷,或者是本身主键就不能通过java代码修改,以后会做更多的了解。

然后是关于.jsp文件的隐藏问题,在网上查询了很多资料,发现都没有同一适合的方法,最后发现一种可以对多个.jsp页面进行web-inf隐藏的方法。
首先创建一个servlet:
public class TennisMatch extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
    if(request.getServletPath().equals("/welcome")){
            getServletContext().getRequestDispatcher("/WEB-INF/admin/welcome.jsp").forward(request,response);
    }
    }
}
然后在web.xml中进行配置:
    <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>TennisMatch</servlet-name>
        <servlet-class>cn.edu.hpu.servlet.TennisMatch</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TennisMatch</servlet-name>
        <url-pattern>/welcome</url-pattern>
    </servlet-mapping>

在这里可能需要把建立TennisMatch自身产生的代码删除掉,或许不用,因为在同学进行书写的时候没有删除这段代码,不能正常运行。这种方式可以对多个.jsp文件进行配置,servlet中无限循环if else 就可以,在web.xml中可以继续向下延伸TennisMatch​,例:
    <servlet-mapping>
        <servlet-name>TennisMatch</servlet-name>
        <url-pattern>/add</url-pattern>
    </servlet-mapping>

对隐藏.jsp文件的访问:
首先是浏览器:​http://localhost:8080/TennisMatch/welcome,其中TennisMatch就是那个servlet的名字,welcome是自己配置的名称。
在文件中进行超链接时,href="/TennisMatch/welcome"
在servlet中运用时可以直接调用"/welcome"​
 
另一种方法,通过session设置访问的权限:​
首先在管理员登录设置的servlet中添加
HttpSession session = request.getSession();
然后在servlet语句判断过密码和帐号正确后,在跳转管理员欢迎jsp界面之前,添加​
session.setAttribute("adminname", userid);userid是在servlet最初获取的数据库管理员id。​
然后在jsp页面添加
<%
String adminid = (String)
session.getAttribute("adminname");
if(adminid==null){
%>
<script type="text/javascript"
language="javascript">
alert("你还没有登录。。。");
window.document.location.href="/TennisMatch/welcom
e";                 //welcome是通过第一种方法存在web.xml中的servlet
</script>
<%
}
%>


分包的规范性
另外要特别​注意语言编码的问题
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode
的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
 
GB18030:我国继GB2312-1980和GB13000.1-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。
GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。
 
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
虽然有很多编码方式,不过为了防止汉字乱码的问题,所以多数使用utf-8,或者是gb18030,而且数据库与整个jsp项目,要保持相同的编码类型。
另外在从网页获取信息时,可以使用:​
request.setCharacterEncoding("GB18030");
response.setCharacterEncoding("GB18030");
来保持从网页获取同种类的编码字符类。​​
 
最后说下Attribute与Parameter​​
上面也有对Attribute的应用,前面也对其有很多应用。​
下面的内容,取自博客园的一篇博客的内容,感觉很有用所以写来参考下
(1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法
(2)当两个Web组件之间为链接关系时,被链接的组件通过getParameter()方法来获得请求参数,
(3)当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。在一本书上看到若是正常则response.getRequestDispatcher(index.jsp).forward(req,resp),否则的话是include(req,resp)(查看API得知RequestDispatcher只有那俩方法)。
getAttribute是取得jsp中 用setAttribute设定的attribute ;parameter得到的是string,attribute得到的是object ;request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表Http请求数据; request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发(很重要的哦)关系的Web组件之间共享,即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取Http提交过来的数据,最后一条理论化些就是 getParameter用于客户端重定向,即点击了链接或提交按扭时传值用,即用于在用表单(post)或url重定(get)向传值时接收数据用, getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。 getAttribute()是获取SESSION的值;另外,可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。 setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。
getParameter()得到的值如果下次不提交或保存起来的话,下次重定向后就没啦
getAttribute()所要得到的属性值因为存在session中,所以重定向后仍可以取出
getAttribute()在request和session中都有,只是作用域不同,在取之前肯定是要在某个地方存一下,这种东东可以存取对象
这个问题主要是request和session的差别,request范围较小一些,只是一个请求,简单说就是你在页面上的一个操作, request.getParameter()就是从上一个页面中的url、form中获取参数(js获取复选框document.ElementById()),但如果一个request涉及多个类,后面还要取参数,可以用request.setAttribute()和request.getAttribute(),但是当结果输出之后,request就结束了。而session可以跨越很多页面,可以理解是客户端同一个IE窗口发出的多个请求。这之间都可以传递参数,比如很多网站的用户登录都用到了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值