`
guiqing85
  • 浏览: 162998 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSP学习笔记(二) Jsp调用JavaBean Jsp异常处理 JAAS实现安全

阅读更多
1 Jsp调用JavaBean
分离页面的显示代码和业务逻辑代码,将业务代码放到后台的Java Bean中。
减少了JSP中的脚本代码,便于维护和复用。
Java Bean:
1)无参数的构造方法(默认构造方法)
2)标准getter、setter方法
3)如果要支持RMI的,要实现Serializable

jsp:useBean--->在Jsp页面中使用一个JavaBean
<jsp:useBean id="" class="" scope=""/>
id:javaBean对象名
class:bean class的位置
scope:javaBean对象的共享范围(page,request,session,application)

page:当前页面范围
request:同一个请求范围 forward,include
session:同一个会话
application:同一个应用 ServletContext


例子:Student

<jsp:useBean id="stu" class="vo.Student" scope="session"/>
等价于
<%
Student stu=(Student)session.getAttribute("stu");
if(stu==null){
stu=new Student();
session.setAttribute("stu",stu);
}
%>
可以用表达式获得bean的值
<%=stu.getName();%>

对JavaBean的属性赋值
1)<jsp:setProperty name="" property="" value=""/>
name:JavaBean对象名
property:JavaBean属性名
value:属性值
<jsp:setProperty name="stu" property="name" value="Bobo"/>
等价于
<%
stu.setName("Bobo");
%>
可以嵌套JSP表达式
<jsp:setProperty name="stu" proprty="name"
value='<%=request.getParameter("name")%>'/>

2)设置JavaBean的属性值
<jsp:setProperty name="" property="" param=""/>
param:对应着request中输入域的名

<form>
age:<input type="text" name="age"/>
...
</form>

package vo;
public class Student implements java.io.Serializable{
private String name;
public void setName(String name){this.name=name}
public void getName(){return name;}
...
}

<jsp:setProperty name="stu" property="age"  param="age"/>


3)Java Bean中的属性名与form中输入域的名字保持一致的话,可以使用通配符*
一次设置所有字段的值。
<jsp:setProperty name="" property="*"/>

<form>
name:<input type="text" name="name"/>
sex:<input type="text" name="sex"/>
age:<input type="text" name="age"/>
</form>

package com;
public class Student implements java.io.Serializable{
private String name;
private String sex;
private int age;
public void setName(String name){this.name=name}
public void getName(){return name;}
...
}

<jsp:setProperty name="stu" property="*"/>

获得Java Bean的值
<jsp:getProperty name="" property=""/>
<jsp:getProperty name="abc" property="name"/>等价于 <%=abc.getName()%>

2 JSP中的异常处理
1)try/catch/finally/throws/throw


2)errorPage, isErrorPage
<%@page errorPage="error.jsp"%>  需要错误处理的页面

<%@page isErrorPage="true"%> 错误页面,有一个隐式对象exception可用
<%=exception%>
产生内建对象exception,可通过它获得异常信息

3)声明的方式处理异常
web.xml
  <error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/MathError.jsp</location>
  </error-page>

  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>

RuntimeException:
java.lang.ArithmeticException
java.lang.NullPointerException
java.lang.ArrayIndexOutOfBoundsException

Java中的RuntimeException及其子类是不需要处理的(try/catch),因为所有的
RuntimeException总是可以通过优化代码来避免,
这种异常被称为“Unchecked Exception”。
思考:三种异常处理方式同时启动用,那个优先级高?
作用域越小,起作用的优先级越高。

Checked Exception

注意:要使得页面自动跳转到错误页面,必须关闭浏览器的“显示友好HTTP错误信息”选项

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {
        //只处理这两种兼容的异常
       
        }

3 JAAS实现安全   Java EE规范之一,实现Java EE应用程序安全性的一个重要途径
Java Authentication and Authorization Service
Java认证(Authentication)与授权(Authorization)服务
(要求:会用!不要求深入理解)
Web端的认证方法有:BASIC、FORM、DIGEST、CERTIFACATE

1)在Tomcat Server中配置新用户与角色
%TOMCAT_HOME%/conf/tomcat-user.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="narci" password="11" roles="admin,manager"/>
  <user username="lily" password="11" roles="manager"/>
</tomcat-users>

--------------------------------------------------------------------
为什么tomcat可以使用tomcat-user.xml作为它保存用户和角色信息的文件?
因为在server.xml中,有以下配置:
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved"
           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />
---------------------------------------------------------------------         

2)声明安全性约束(指明受限资源)
web.xml
   <security-constraint>
<display-name>Constraint-all</display-name>
<web-resource-collection>
<web-resource-name>all-resources</web-resource-name>
<description />
<url-pattern>/admin/*</url-pattern>
<url-pattern>/security/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<description />
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>

3)选择认证方式(使用标准的FORM方式)
web.xml
如果是BASIC认证:5)步可以不用。
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>UserDatabaseRealm</realm-name>
  </login-config>
如果是FORM认证:
  <login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/logon/loginForm.jsp</form-login-page>
<form-error-page>/logon/loginErrorForm.jsp</form-error-page>
</form-login-config>
</login-config>

4)声明安全性角色及与用户的映射关系
web.xml
  <security-role>
<description />
<role-name>admin</role-name>
  </security-role>

5)标准的表单(FORM认证才需要)
action的值
用户名、密码字段的名称都是固定的(规范)
<form method="POST" action="j_security_check">
            <input type="text" name="j_username">
            <input type="password" name="j_password">
           
            <input type="submit" value="Submit" name="B1">
</form>
标准的表单提交(固定不变):
action:j_security_check
name:j_username
password:j_password
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics