1. Acceda o agregue atributos de solicitud/sesión/aplicación
alcance de cadena pública () lanza una excepción {
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Alcance de la aplicación");//Colocar la aplicación en ServletContext
ctx.getSession().put("ses", "session range");//Pon ses en la sesión
ctx.put("req", "rango de solicitudes");//Pon la solicitud en la solicitud
devolver "alcance";
}
JSP:
<cuerpo>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</cuerpo>
2. Obtenga el objeto HttpServletRequest/HttpSession/ServletContext/HttpServletResponse
Método uno, obtengalo directamente a través de la clase ServletActionContext:
cadena pública rsa () lanza una excepción {
Solicitud HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
solicitud.getSession()
Respuesta HttpServletResponse = ServletActionContext.getResponse();
devolver "alcance";
}
Método dos, implementar la interfaz especificada e inyectarla cuando se esté ejecutando el marco de struts:
la clase pública HelloWorldAction implementa ServletRequestAware, ServletResponseAware, ServletContextAware{
solicitud HttpServletRequest privada;
ServletContext privado servletContext;
respuesta privada HttpServletResponse;
setServletRequest público vacío (solicitud HttpServletRequest) {
this.request=req;
}
setServletResponse público vacío (HttpServletResponse res) {
esta.respuesta=res;
}
setServletContext público vacío (servletContext ser) {
this.servletContext=ser;
}
}
3. Carga de archivos
Paso uno: agregue commons-fileupload-1.2.1.jar y commons-io-1.3.2.jar en WEB-INF/lib. Ambos archivos se pueden descargar desde http://commons.apache.org/.
Paso 2: Establezca el tipo de cifrado de la tabla del formulario en: "multipart/form-data", de la siguiente manera:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" método="post">
<tipo de entrada="archivo" nombre="cargarImagen">
</formulario>
Paso 3: agregue los siguientes atributos en la clase Acción. La parte roja del atributo corresponde al nombre del campo del archivo en el formulario:
clase pública HolaMundoAcción{
Private File uploadImage;//Obtener el archivo cargado
cadena privada uploadImageContentType;//Obtener el tipo de archivo
cadena privada uploadImageFileName;//Obtener el nombre del archivo
//Aquí se omiten los métodos getter/setter de las propiedades.
La carga de cadena pública () arroja una excepción {
Cadena realpath = ServletActionContext.getServletContext().getRealPath("/images");
Archivo archivo = nuevo archivo (ruta real);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, nuevo archivo(archivo, uploadImageFileName));
devolver "éxito";
}
}
4. Carga de múltiples archivos
Paso uno: agregue commons-fileupload-1.2.1.jar y commons-io-1.3.2.jar en WEB-INF/lib. Ambos archivos se pueden descargar desde http://commons.apache.org/.
Paso 2: Establezca el tipo de cifrado de la tabla del formulario en: "multipart/form-data", de la siguiente manera:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" método="post">
<tipo de entrada="archivo" nombre="cargarImagenes">
<tipo de entrada="archivo" nombre="cargarImagenes">
</formulario>
Paso 3: agregue los siguientes atributos en la clase Acción. La parte roja del atributo corresponde al nombre del campo del archivo en el formulario:
clase pública HolaMundoAcción{
Archivo privado[] uploadImages;//Obtener el archivo cargado
private String[] uploadImagesContentType;//Obtener el tipo de archivo
private String[] uploadImagesFileName;//Obtener el nombre del archivo
//Aquí se omiten los métodos getter/setter de las propiedades.
La carga de cadena pública () arroja una excepción {
Cadena realpath = ServletActionContext.getServletContext().getRealPath("/images");
Archivo archivo = nuevo archivo (ruta real);
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ Archivo uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, nuevo archivo(archivo, uploadImagesFileName[i]));
}
devolver "éxito";
}}
5. Interceptor personalizado
Para personalizar el interceptor, debe implementar la interfaz com.opensymphony.xwork2.interceptor.Interceptor:
clase pública PermissionInterceptor implementa Interceptor {
serialVersionUID largo final estático privado = -5178310397732210602L;
destrucción de vacío público () {
}
inicio vacío público() {
}
La intercepción de cadena pública (invocación de ActionInvocation) lanza una excepción {
System.out.println("Ingrese el interceptor");
si (el usuario existe en la sesión) {
Resultado de cadena = invocación.invoke();
}demás{
devolver "iniciar sesión";
}
//System.out.println("Valor de retorno:"+ resultado);
//devuelve resultado;
}
}
<nombre del paquete="csdn" namespace="/test" extends="struts-default">
<interceptores>
<nombre del interceptor="permiso" />
<nombre-pila-interceptor="piladepermisos">
<interceptor-ref nombre="defaultStack" />
<interceptor-ref nombre="permiso" />
</interceptor-pila>
</interceptores>
<nombre de acción="holamundo_*" método="{1}">
<resultado nombre="éxito">/WEB-INF/page/hello.jsp</result>
<interceptor-ref nombre="permissionStack"/>
</acción>
</paquete>
Debido a que las funciones en struts2, como la carga de archivos, la verificación de datos y la encapsulación de parámetros de solicitud en acciones, son implementadas por el interceptor en la pila predeterminada del sistema, el interceptor que definimos debe hacer referencia a la pila predeterminada del sistema para que la aplicación pueda usar struts2 Numerosos características proporcionadas por el marco.
Si desea que todas las acciones del paquete utilicen un interceptor personalizado, puede definir el interceptor como el interceptor predeterminado a través de <default-interceptor-ref name="permissionStack"/>. Nota: Solo se puede especificar un interceptor predeterminado por paquete. Además, una vez que especificamos explícitamente un interceptor para una acción en el paquete, el interceptor predeterminado no funcionará.
6. Verificación de entrada
En struts2, podemos verificar todos los métodos de acción o verificar métodos de acción específicos.
Struts2 proporciona dos métodos de implementación para la verificación de entradas:
1. Implementado escribiendo código manualmente.
2. Implementado en base a la configuración XML.
7. Escriba código manualmente para verificar la entrada de todos los métodos en la acción.
Al anular el método validar(), el método validar() verificará todos los métodos de la acción que tengan la misma firma que el método de ejecución. Cuando falla una determinada verificación de datos, debemos llamar al método addFieldError () para agregar información de falla de verificación a los fieldErrors del sistema (para usar el método addFieldError (), la acción puede heredar ActionSupport. Si los fieldErrors del sistema contienen información de falla, struts2 La solicitud se reenviará al resultado denominado entrada. La información de falla se puede mostrar a través de <s:fielderror/> en la vista de entrada.
ejemplo de uso de validar():
validación de vacío público () {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("nombre de usuario", "El número de teléfono móvil no puede estar vacío");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "El formato del número de teléfono móvil es incorrecto");
}
}
Después de que falla la verificación, la solicitud se reenvía a la vista de entrada:
<resultado nombre="input">/WEB-INF/page/addUser.jsp</result>
Utilice <s:fielderror/> en la página addUser.jsp para mostrar información de error.
Implementado a través del método validarXxx(), validarXxx() solo verificará el método denominado Xxx en la acción. La primera letra de Xxx debe estar en mayúscula. Cuando falla una determinada verificación de datos, debemos llamar al método addFieldError () para agregar información de falla de verificación a los fieldErrors del sistema (para usar el método addFieldError (), la acción puede heredar ActionSupport. Si los fieldErrors del sistema contienen información de falla, struts2 La solicitud se reenviará al resultado denominado entrada. La información de falla se puede mostrar a través de <s:fielderror/> en la vista de entrada.
Ejemplo de uso del método validarXxx():
public String add() lanza una excepción {return "éxito";}
validar el vacío públicoAdd(){
if(nombre de usuario==null && "".equals(nombre de usuario.trim())) this.addFieldError("nombre de usuario", "El nombre de usuario no puede estar vacío");
}
Después de que falla la verificación, la solicitud se reenvía a la vista de entrada:
<resultado nombre="input">/WEB-INF/page/addUser.jsp</result>
Utilice <s:fielderror/> en la página addUser.jsp para mostrar información de error.
8. Proceso de verificación de entrada
1. El convertidor de tipo realiza la conversión de tipo en los parámetros de la solicitud y asigna el valor convertido al atributo en la acción.
2. Si ocurre una excepción durante la conversión de tipo, el sistema guardará la información de la excepción en ActionContext y el interceptor conversionError agregará la información de la excepción a fieldErrors. Independientemente de si se produce una excepción durante la conversión de tipo, se ingresará al paso 3.
3. El sistema primero llama al método validarXxx() en la acción a través de tecnología de reflexión, donde Xxx es el nombre del método.
4. Luego llame al método validar() en la acción.
5. Después de los 4 pasos anteriores, si hay información de error en el campo Errores en el sistema (es decir, el tamaño de la colección que almacena información de error es mayor que 0), el sistema reenviará automáticamente la solicitud a la vista denominada entrada. Si no hay información de error en el campoErrores en el sistema, el sistema ejecutará el método de procesamiento en la acción.
9. Implementar la verificación de entrada para todos los métodos de acción basados en el método de configuración XML.
Cuando se utiliza el método de configuración basado en XML para implementar la verificación de entrada, la Acción también debe heredar ActionSupport y proporcionar un archivo de verificación. El archivo de verificación y la clase de acción se colocan en el mismo paquete. El formato de nombre del archivo es: ActionClassName-validation. xml, donde ActionClassName es el nombre de clase simple de la acción y -validation es un método de escritura fijo. Si la clase Acción es cn.csdn.UserAction, entonces el nombre del archivo debe ser: UserAction-validation.xml. La siguiente es una plantilla para el archivo de verificación:
<?xml versión="1.0" codificación="UTF-8"?>
<!Validadores DOCTYPE PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//ES" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validadores>
<nombre de campo="nombre de usuario">
<tipo de validador de campo="cadena requerida">
<param nombre="trim">verdadero</param>
<message>¡El nombre de usuario no puede estar vacío!</message>
</validador-de-campo>
</campo>
</validadores>
<campo> especifica los atributos que se verificarán en la acción y <campo-validador> especifica el validador. La cadena requerida del validador especificada anteriormente es proporcionada por el sistema. El validador se puede encontrar en default.xml en com.opensymphony.xwork2.validator.validators en xwork-2.x.jar.
<mensaje> es el mensaje que aparece después de que falla la verificación. Si se requiere la internacionalización, puede especificar el atributo clave para el mensaje y el valor de la clave es la clave en el archivo de recursos.
En este archivo de verificación, se verifica el atributo de nombre de usuario del tipo de cadena en la acción. Primero se requiere llamar al método trim() para eliminar espacios y luego determinar si el nombre de usuario está vacío.
Al escribir el archivo de verificación, no aparece el mensaje de ayuda. Al escribir el archivo de verificación ActionClassName-validation.xml, si el mensaje de ayuda no aparece, puede resolver el problema de la siguiente manera:
windowwos->preferencias->myeclipse->archivos y editores->xml->xmlcatalog
Haga clic en "agregar", seleccione "Sistema de archivos" en la ubicación en la ventana que aparece, luego seleccione xwork-validator-1.0.3.dtd en el directorio src/java del directorio de descompresión de xwork-2.1.2 y regrese al ventana de configuración No se apresure a cerrar la ventana, debe cambiar el tipo de clave en la ventana a URI. Clave cambiada a http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd